Suport pentru chei externe în sqlite

Acest document descrie suportul pentru cheile SQL externe implementate în SQLite versiunea 3.6.19.

Primul capitol este dedicat conceptului general de chei străine în SQLite, explicându-l cu ajutorul exemplelor și definițiilor terminologice necesare înțelegerii acestui document. Capitolul al doilea, pas cu pas, descrie ce trebuie să faceți pentru a activa suportul pentru chei externe în SQLite (în mod implicit acestea sunt dezactivate). Următorul capitol (cel de-al treilea) descrie ce indexuri ar trebui să creeze utilizatorul pentru a utiliza cheile externe și care dintre ele trebuie create pentru a îmbunătăți eficiența cheii externe.







Capitolul 4 descrie funcții avansate legate de cheile externe acceptate în SQLite. Iar capitolul 5 descrie modul în care comenzile ALTER și DROP TABLE funcționează cu chei străine. Ultimul capitol 6 enumeră oportunitățile și limitele nerealizate ale implementării actuale.

Acest document nu conține o descriere completă a sintaxei pentru crearea cheilor externe utilizate în SQLite. Acesta poate fi găsit ca parte a documentației pentru instrucțiunea CREATE TABLE.

1. Informații generale despre constrângerile cheie străine

Tastele externe din SQL sunt folosite pentru a forța legăturile dintre tabele în starea curentă. Luați în considerare, de exemplu, schema bazei de date creată de următoarele comenzi SQL:

Din păcate, dacă un utilizator editează o bază de date utilizând instrumente externe sau dacă există o eroare în aplicație, devine posibilă introducerea în liniile de masă "track" care nu au rândurile corespunzătoare în tabela artistului. Sau, puteți elimina rânduri din tabela artistului, creând astfel rânduri "agățate" în tabelul "track", pentru care nu există rânduri corespunzătoare în tabelul "artist".







Această situație poate duce la erori de aplicație logică, la erori software sau la complicarea dezvoltării aplicațiilor.

O soluție este adăugarea unei chei SQL străine în schema bazei de date, care ar forța conexiunea dintre tabelele artistului și pieselor. Pentru a face acest lucru, trebuie să modificați declarația tabelului "track" adăugând definiția cheii externe la ea după cum urmează:

Aceasta stabilește limita pentru SQLite. Acum încearcă să insera un rând într-un tabel «piesa», pentru care nu există nici un rând corespunzătoare în «artist» tabel va avea succes, precum și eliminarea unei linii de «artist» tabel cu rânduri dependente în «piesă» de masă.

Există însă o excepție: dacă coloana cheii externe din tabelul "track" este NULL, atunci nu este necesară existența liniei corespunzătoare în tabelul "artist". În expresiile SQL, aceasta înseamnă că pentru fiecare rând din tabelul "track" următoarea expresie trebuie să fie adevărată:

Sfat: dacă aplicația necesită o potrivire strictă între "artist" și "track", valorile NULL ar trebui să fie dezactivate în coloana "trackartist". Acest lucru se poate face simplu prin adăugarea constrângerii corespunzătoare NOT NULL la schemă.

Următoarea ieșire a sesiunii SQLite în modul linie de comandă ilustrează rezultatul acțiunii cheie străină adăugată la tabela de urmărire:

Apoi, puteți să vă asigurați că este imposibil să manipulați baza de date ca aceasta, să ștergeți și să modificați rândurile tabelului "artist", astfel încât constrângerea cheii străine să fie încălcată:

SQLite utilizează următoarea terminologie:

O constrângere cheie externă este îndeplinită în cazul în care pentru fiecare linie de una dintre cele două condiții este masa de copil satisfăcut, una sau mai multe subsidiare coloane cheie au o valoare NULL sau dacă există un rând în tabela părinte că fiecare coloană a cheii părinte este o valoare echivalentă cu valoarea coloanei corespunzătoare în cheia copilului.

Termenul "echivalent" din paragraful anterior este utilizat în sensul că comparația se realizează utilizând regulile descrise aici. În contextul actual, aceste reguli înseamnă următoarele:

  • Când se compară valorile textului, se folosește întotdeauna o secvență de sortare. asociat cu coloana cheie părinte.
  • Când se compară valorile și se afișează cheia parentală. atunci această afinitate este aplicată și valorii cheii copilului înainte de comparație.

2. Activarea suportului pentru chei externe







Trimiteți-le prietenilor: