Denne artikel vil lære dig forskellen mellem en primær nøgle og en fremmed nøgle. Denne artikel vil også lære dig, hvorfor begge disse nøgler er vigtige, når det kommer til vedligeholdelse af en relationel databasestruktur.
alle eksempler på denne lektion er baseret på Microsoft s .l Server Management Studio og Adventure .orks2012 database. Du kan komme i gang med at bruge disse gratis værktøjer ved hjælp af min Guide Kom godt i gang ved hjælp af s .l Server.
hvad er forskellen mellem en primær nøgle og en fremmed nøgle?,
før vi kan grave i forskellen, lad os først udforske primære og udenlandske nøgleegenskaber. Lad os starte med at lære om primære nøgler.
primære nøgler
for at en tabel kan betegnes som en relationel tabel, skal den have en primær nøgle.
den primære nøgle består af en eller flere kolonner, hvis data indeholdt i bruges til entydigt at identificere hver række i tabellen. Du kan tænke på dem som en adresse. Hvis rækkerne i en tabel var postkasser, ville den primære nøgle være listen over gadeadresser.,
når en primær nøgle er sammensat af flere kolonner, bruges dataene fra hver kolonne til at bestemme, om en række er unik.
for at være en primær nøgle skal flere betingelser være sande. For det første, som vi nævnte, skal kolonnerne være unikke. For at afklare henviser vi til dataene i rækkerne, ikke kolonnenavnene selv. Ingen værdi i kolonnerne kan heller ikke være tom eller NULL.
Når du definerer en tabel, angiver du den primære nøgle. En tabel har kun en primær nøgle, og dens definition er obligatorisk.
den primære nøgle for hver tabel gemmes i et indeks., Indekset bruges til at håndhæve det unikke krav. Det gør det også nemt for udenlandske nøgleværdier at henvise til tilsvarende primære nøgleværdier, som vi vil lære om i det følgende afsnit.
udenlandske nøgler
en fremmed nøgle er et sæt af en eller flere kolonner i en tabel, der henviser til den primære nøgle i en anden tabel. Der er ikke nogen særlig kode, konfigurationer eller tabeldefinitioner, du skal placere for officielt at “udpege” en fremmed nøgle.
i diagrammet nedenfor se på SalesOrderHeader bordet. Kolonnen SalesOrderHeader.,CurrencyRateID er en fremmed nøgle, da det er relateret til CurrencyRate.CurrencyRateID. Denne kolonne CurrencyRate.CurrencyRateID er den primære nøgle i currencyrate-tabellen.
udenlandske nøgler som en del af primære
se på følgende diagram. Hvilken kolonne er den fremmede nøgle?
Hvis du sagde, at det var PersonPhone.,BusinessEntityID så er du korrekt. Årsagen til, at det er en fremmed nøgle, er, at den henviser til en primær nøgle, Person.BusinessEntityID, på det andet bord.
tilfældigt, PersonPhone.BusinessEntityID er ikke kun en fremmed nøgle, men er også en del af PersonPhone primære nøgle. Den PersonPhone tabel primære nøgle er kombinationen af BusinessEntityID, PhoneNumber, og PhoneNumberTypeID.
Jeg er enig i, at dette er forvirrende, men det er tilladt og ikke en dårlig praksis.
i modsætning til primære nøgler kan udenlandske nøgler indeholde dobbeltværdier. Det er også OK for dem at indeholde NULL-værdier.,
indekser oprettes ikke automatisk for udenlandske nøgler; men som en DBA kan du definere dem.
en tabel må indeholde mere end en fremmed nøgle. I PersonPhone-tabellen kan du finde den anden udenlandske nøgle (se svaret i slutningen af artiklen)?
find primære og udenlandske nøgler i Object e .plorer
Når du bruger SSMS, finder du alle mulige nyttige oplysninger i object e .plorer. Du behøver ikke at grave dybt for at finde de primære nøgler. Når du viser en tabels kolonner, men klikker på kolonner-mappen, har de primære nøglekolonner guldtaster ved siden af dem.,
Også, hvis nogen af de fremmede nøgler er defineret i fremmed nøgle begrænsninger, som vi vil lære i de følgende afsnit, så er de kolonner, har FK efter dem. Disse er cirkuleret i grønt i ovenstående diagram.
udenlandske nøglebegrænsninger
nogle databasestyringssystemer, såsom S .l Server, giver dig mulighed for at konfigurere udenlandske nøglebegrænsninger. Disse hjælper med at håndhæve referenceintegritet., I deres enkleste form forhindrer en udenlandsk nøglebegrænsning dig i at indtaste værdier, der ikke findes i den relaterede tabels primære nøgle.brug af det første diagram som vores eksempel, kan du ikke gå ind i SalesOrderHeader.CurrencyRateID, hvis det ikke allerede findes i currencyrate-tabellen.
disse begrænsninger træder i kraft på flere måder:
- de forhindrer dig i at ændre den udenlandske nøgleværdi til en, der ikke findes som en værdi i den relaterede tabels primære nøgle.
- de forhindrer dig i at slette en række fra den primære nøgletabel. Dette forhindrer dig i at oprette orphan records., Orphan records beskrives som ” child records uden forældre.”
- de forhindrer dig i at tilføje en fremmed nøgleværdi, der ikke findes i den primære nøgle.
sammenfattende håndhæver begrænsningerne forholdet mellem de primære og udenlandske nøgletabeller.
sammenligning af primære nøgler til udenlandske nøgler
for at opsummere her er en sammenligning af primære til udenlandske nøgler
svar på spørgsmål: tidligere bad vi dig om at identificere den anden udenlandske nøgle i PersonPhone-tabellen. Det rigtige svar er Telefonnummertypeid.
Skriv et svar