den här artikeln lär dig skillnaden mellan en primärnyckel och en utländsk nyckel. Denna artikel kommer också att lära dig varför båda dessa nycklar är viktiga när det gäller underhåll av en relationsdatabasstruktur.
alla exempel för den här lektionen är baserade på Microsoft SQL Server Management Studio och AdventureWorks2012-databasen. Du kan komma igång med dessa gratis verktyg med hjälp av min Guide komma igång med SQL Server.
vad är skillnaden mellan en primärnyckel och en utländsk nyckel?,
innan vi kan gräva i skillnaden, låt oss först utforska primära och utländska nyckelegenskaper. Låt oss börja med att lära oss om primära nycklar.
primära nycklar
för att en tabell ska kvalificeras som en relationstabell måste den ha en primärnyckel.
huvudnyckeln består av en eller flera kolumner vars data som finns i används för att unikt identifiera varje rad i tabellen. Du kan se dem som en adress. Om raderna i en tabell var brevlådor, skulle den primära nyckeln vara noteringen av gatuadresser.,
När en primärnyckel består av flera kolumner används data från varje kolumn för att avgöra om en rad är unik.
för att vara en primärnyckel måste flera villkor vara sanna. Först, som vi nämnde, måste kolumnerna vara unika. För att klargöra hänvisar vi till data inom raderna, inte kolumnnamnen själva. Dessutom kan inget värde i kolumnerna vara tomt eller NULL.
När du definierar en tabell anger du primärnyckeln. En tabell har bara en primär nyckel, och dess definition är obligatorisk.
primärnyckeln för varje tabell lagras i ett index., Indexet används för att upprätthålla det unika kravet. Det gör det också enkelt för utländska nyckelvärden att hänvisa tillbaka till motsvarande primära nyckelvärden, som vi kommer att lära oss om i följande avsnitt.
främmande nycklar
en främmande nyckel är en uppsättning av en eller flera kolumner i en tabell som refererar till primärnyckeln i en annan tabell. Det finns inte någon särskild kod, konfigurationer eller tabelldefinitioner som du behöver placera för att officiellt ”utse” en utländsk nyckel.
i diagrammet nedan tittar du på SalesOrderHeader-tabellen. Kolumnen säljare.,CurrencyRateID är en utländsk nyckel eftersom den är relaterad till CurrencyRate.CurrencyRateID. Denna kolumn CurrencyRate.CurrencyRateID är primärnyckeln i CurrencyRate bordet.
utländska nycklar som en del av primärval
titta på följande diagram. Vilken kolumn är den utländska nyckeln?
om du sa att det var PersonPhone.,BusinessEntityID då du har rätt. Anledningen till att det är en utländsk nyckel är att det hänvisar till en primär nyckel, Person.BusinessEntityID, på andra bordet.
tillfälligt, PersonPhone.BusinessEntityID är inte bara en utländsk nyckel men är också en del av PersonPhone primära nyckel. Den PersonPhone tabellens primärnyckel är kombinationen av BusinessEntityID, Telefonnummer och PhoneNumberTypeID.
Jag håller med om att detta är förvirrande, men det är tillåtet och inte en dålig praxis.
till skillnad från primära nycklar kan främmande nycklar innehålla dubbla värden. Det är också OK för dem att innehålla NULL-värden.,
index skapas inte automatiskt för utländska nycklar, men som DBA kan du definiera dem.
en tabell får innehålla mer än en utländsk nyckel. I PersonPhone-tabellen hittar du den andra utländska nyckeln (se svaret i slutet av artikeln)?
hitta primära och utländska nycklar i Object Explorer
När du använder SSMS hittar du all slags användbar information i objektutforskaren. Du behöver inte gräva djupt för att hitta de primära nycklarna. När du visar en tabells kolumner, men klickar på Kolumnmappen, har de primära nyckelkolumnerna guldnycklar bredvid dem.,
om någon av de utländska nycklarna definieras i utländska nyckelbegränsningar, som vi lär oss i följande avsnitt, har dessa kolumner FK efter dem. Dessa är cirklade i grönt i ovanstående diagram.
utländska nyckelbegränsningar
vissa databashanteringssystem, till exempel SQL Server, tillåter dig att ställa in utländska nyckelbegränsningar. Dessa hjälper till att upprätthålla referensintegritet., I sin enklaste form hindrar en utländsk nyckelbegränsning dig från att ange värden som inte finns i den relaterade tabellens huvudnyckel.
genom att använda det första diagrammet som vårt exempel kan du inte ange SalesOrderHeader.CurrencyRateID om det inte redan finns i CurrencyRate bordet.
dessa begränsningar träder i kraft på flera sätt:
- de spärrar dig från att ändra det utländska nyckelvärdet till ett som inte finns som ett värde i den relaterade tabellens primära nyckel.
- de hindrar dig från att ta bort en rad från den primära nyckeltabellen. Detta hindrar dig från att skapa föräldralösa poster., Föräldralösa register beskrivs som ” barnregister utan föräldrar.”
- de hindrar dig från att lägga till ett främmande nyckelvärde som inte finns i primärnyckeln.
Sammanfattningsvis upprätthåller begränsningarna förhållandet mellan de primära och utländska nyckeltabellerna.
jämförelse av primära nycklar till utländska nycklar
för att sammanfatta här är en jämförelse av primära till utländska nycklar
svar på frågan: tidigare bad vi om att du skulle identifiera den andra utländska nyckeln i Persontelefontabellen. Det rätta svaret är PhoneNumberTypeID.
Lämna ett svar