Acest articol vă va învăța diferența dintre o cheie primară și o cheie străină. Acest articol vă va învăța, de asemenea, de ce ambele chei sunt importante atunci când vine vorba de întreținerea unei structuri de baze de date relaționale.
toate exemplele pentru această lecție se bazează pe Microsoft SQL Server Management Studio și baza de date AdventureWorks2012. Puteți începe să utilizați aceste instrumente gratuite folosind ghidul meu Noțiuni de bază folosind SQL Server.
care este diferența dintre o cheie primară și o cheie străină?,
înainte de a putea săpa în diferență, să explorăm mai întâi caracteristicile cheie primare și străine. Să începem prin a învăța despre cheile primare.
chei primare
pentru ca un tabel să se califice drept tabel relațional, acesta trebuie să aibă o cheie primară.
cheia primară constă dintr-una sau mai multe coloane ale căror date conținute sunt utilizate pentru a identifica în mod unic fiecare rând din tabel. Te poți gândi la ele ca la o adresă. Dacă rândurile dintr-un tabel erau căsuțe poștale, atunci cheia primară ar fi listarea adreselor stradale.,
când o cheie primară este compusă din mai multe coloane, datele din fiecare coloană sunt utilizate pentru a determina dacă un rând este unic.pentru a fi o cheie primară, mai multe condiții trebuie să dețină true. În primul rând, așa cum am menționat, coloanele trebuie să fie unice. Pentru a clarifica, ne referim la datele din rânduri, nu la numele coloanelor în sine. De asemenea, nicio valoare din coloane nu poate fi goală sau nulă.
când definiți un tabel, specificați cheia primară. Un tabel are doar o cheie primară, iar definiția sa este obligatorie.
cheia primară pentru fiecare tabel este stocată într-un index., Indicele este utilizat pentru a aplica cerința de unicitate. De asemenea, este ușor ca valorile cheie străine să se refere la valorile cheie primare corespunzătoare, așa cum vom afla în secțiunea următoare.
chei străine
o cheie străină este un set de una sau mai multe coloane dintr-un tabel care se referă la cheia primară dintr-un alt tabel. Nu există niciun cod special, configurații sau definiții de tabel pe care trebuie să le plasați pentru a „desemna” oficial o cheie străină.
în diagrama de mai jos, consultați tabelul SalesOrderHeader. Coloana SalesOrderHeader.,CurrencyRateID este o cheie străină, deoarece este legată de CurrencyRate.CurrencyRateID. Această coloană CurrencyRate.CurrencyRateID este cheia principală a tabelului CurrencyRate.
Chei Externe ca Parte a Primare
Uită-te la diagrama de mai jos. Care coloană este cheia străină?
Dacă ai spus că a fost PersonPhone.,BusinessEntityID atunci sunt corecte. Motivul pentru care este o cheie străină este că se referă la o cheie primară, persoană.BusinessEntityID, pe cealaltă masă.
întâmplător, Persontelefon.BusinessEntityID nu este doar o cheie străină, dar este, de asemenea, o parte din cheia primară PersonPhone lui. Cheia principală a tabelului PersonPhone este combinația dintre BusinessEntityID, PhoneNumber și PhoneNumberTypeID.sunt de acord că acest lucru este confuz, dar este permis și nu o practică proastă.spre deosebire de cheile primare, cheile străine pot conține valori duplicate. De asemenea, este OK pentru ei să conțină valori nule.,
indexurile nu sunt create automat pentru chei străine; cu toate acestea, ca un DBA, le puteți defini.
un tabel este permis să conțină mai mult de o cheie străină. În tabelul PersonPhone puteți găsi cealaltă cheie străină (a se vedea răspunsul la sfârșitul articolului)?
găsirea cheilor primare și străine în Object Explorer
când utilizați SSMS, veți găsi tot felul de informații utile în object explorer. Nu trebuie să săpați adânc pentru a găsi cheile primare. Când Afișați coloanele unui tabel, dar faceți clic pe folderul coloane, coloanele cheie primare au chei aurii lângă ele.,
de Asemenea, dacă oricare dintre chei externe sunt definite în constrângeri cheie străină, pe care o vom învăța în secțiunea următoare, atunci aceste coloane trebuie FK după ei. Acestea sunt încercuite în verde în diagrama de mai sus.
constrângeri cheie străine
unele sisteme de gestionare a bazelor de date, cum ar fi SQL Server vă permit să configurați constrângeri cheie străine. Acestea ajută la aplicarea integrității referențiale., În forma lor cea mai simplă, o constrângere cheie străină vă oprește să introduceți valori care nu se găsesc în cheia primară a tabelului aferent.
folosind prima diagramă ca exemplu, nu puteți introduce SalesOrderHeader.CurrencyRateID dacă nu există deja în tabelul CurrencyRate.
aceste constrângeri intră în vigoare în mai multe moduri:
- te împiedică să schimbi valoarea cheii străine cu una care nu există ca valoare în cheia primară a tabelului aferent.
- ei te opresc de la ștergerea unui rând din tabelul cheie primară. Acest lucru vă împiedică să creați înregistrări orfane., Înregistrările orfane sunt descrise ca ” înregistrări pentru copii fără părinți.”
- te opresc de la adăugarea unei valori cheie străină care nu există în cheia primară.
în rezumat, constrângerile impun relația dintre tabelele cheie primară și străină.pentru a rezuma aici este o comparație de primar la chei străine
răspuns la întrebare: mai devreme am cerut pentru tine de a identifica alte chei străine în tabelul PersonPhone. Răspunsul corect este PhoneNumberTypeID.
Lasă un răspuns