C#: atestat și pregătire ONTI

C#: proiectează schema SQL înaintea formularelor

Proiectează tabelele pentru o aplicație C# de bibliotecă. Separă entitățile, alege cheile și pregătește date de test înainte de a construi ecranele de editare.

Schema bazei de date fixează ce informații poate reprezenta aplicația și ce contradicții trebuie refuzate. Începem cu Books și Loans, folosind identificatori expliciți. Exemplul este intenționat mic: numele cititorului este text în Loans. Un proiect cu editarea cititorilor ar introduce un tabel Readers și o cheie ReaderId.

Cum lucrezi cu exemplul

Schema și interogarea sunt disponibile în arhiva lecției. Verificarea semantică folosește SQLite în memorie; integrarea Access/OleDb se face separat pe Windows, după pregătirea formatului și providerului potrivit.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

Books are BookId, Title și Category. Loans are LoanId, BookId și ReaderName. Relația leagă Loans.BookId de Books.BookId. Titlul nu este cheie: două ediții pot avea același titlu. Numele coloanelor sunt stabile și nu includ spații, pentru a reduce citarea specifică dialectului SQL.

Scriptul de mai jos descrie schema și datele de exercițiu în SQL uzual. Exemplele de interogare sunt verificate semantic într-o bază SQLite temporară. Pentru lecțiile OleDb creează separat catalog.accdb în Access: ID-urile ca Number/Long Integer, textele ca Short Text cu limitele indicate și relația cu integritate referențială. Nu redenumi un fișier SQLite în .accdb.

Exemplu și rezultat așteptat

Avem trei cărți și trei împrumuturi: două pentru cartea 1, unul pentru cartea 2 și niciunul pentru cartea 3. Interogarea de control întoarce exact trei cărți. Acest set mic este suficient pentru a testa și relația fără copii, pe care un set cu toate cărțile împrumutate ar ascunde-o.

Schemă pentru lecția 32: Books: 1, 2, 3; Loans: 10→1, 11→1, 12→2; Cartea 3: fără împrumut; Control: 3 cărți.Books: 1, 2, 3 → Loans: 10→1, 11→1, 12→2 → Cartea 3: fără împrumut → Control: 3 cărți.Mărește schema ↗

Schema și datele de test

CREATE TABLE Books(BookId INTEGER PRIMARY KEY,Title VARCHAR(80) NOT NULL,Category VARCHAR(40) NOT NULL);
CREATE TABLE Loans(LoanId INTEGER PRIMARY KEY,BookId INTEGER NOT NULL REFERENCES Books(BookId),ReaderName VARCHAR(80) NOT NULL);
INSERT INTO Books VALUES(1,'Algoritmi','Programare'),(2,'Grafuri','Programare'),(3,'Povesti','Literatura');
INSERT INTO Loans VALUES(10,1,'Ana'),(11,1,'Mihai'),(12,2,'Ana');

Interogarea verificată

SELECT COUNT(*) AS BookCount FROM Books;

Rezultatul, în ordinea rândurilor:

3

Greșeli și limite

Nu presupune că toate dialectele SQL au aceeași sintaxă pentru autonumerotare, booleeni sau date calendaristice. Nu instala un provider la întâmplare în timpul concursului: verifică mediul disponibil. Folosește o copie de test a bazei; exercițiile de actualizare vor modifica date.

Exersează

Adaugă Readers pe hârtie și rescrie relația din Loans. Pregătește un cititor fără împrumuturi și unul cu două. Verifică ce operații ar trebui refuzate la ștergerea unei cărți referite. Scrie politica înainte să alegi ștergerea în cascadă.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: relații și chei în DataTable și DataSet

Lecția următoare: C#: interogări SQL cu filtrare și ordine stabilă.

Referință: documentația Microsoft.

Întrebări frecvente

Pot folosi titlul drept cheie?

Nu este o identitate sigură, fiindcă se poate repeta sau modifica.

SQLite și Access folosesc același fișier?

Nu. Sunt formate și provideri diferiți. Testele semantice SQL nu dovedesc integrarea Access.

De ce includ o carte fără împrumuturi?

Pentru a verifica interogările care trebuie să păstreze și entitățile fără rânduri copil.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →