Dit artikel leert u het verschil tussen een primaire en een buitenlandse sleutel. Dit artikel zal je ook leren waarom beide sleutels belangrijk zijn als het gaat om het onderhoud van een relationele database structuur.
alle voorbeelden voor deze les zijn gebaseerd op Microsoft SQL Server Management Studio en de AdventureWorks2012 database. U kunt aan de slag met behulp van deze gratis tools met behulp van mijn gids aan de slag met behulp van SQL Server.
Wat is het verschil tussen een primaire sleutel en een buitenlandse sleutel?,
voordat we in het verschil kunnen graven, laten we eerst primaire en buitenlandse sleutelkenmerken onderzoeken. Laten we beginnen door te leren over de primaire sleutels.
primaire sleutels
om een tabel als relationele tabel te kwalificeren, moet deze een primaire sleutel hebben.
de primaire sleutel bestaat uit een of meer kolommen waarvan de gegevens binnen worden gebruikt om elke rij in de tabel uniek te identificeren. Je kunt ze zien als een adres. Als de rijen in een tabel postbussen waren, dan zou de primaire sleutel de lijst van straatadressen zijn.,
wanneer een primaire sleutel uit meerdere kolommen bestaat, worden de gegevens uit elke kolom gebruikt om te bepalen of een Rij uniek is.
om een primaire sleutel te zijn, moeten verschillende voorwaarden true houden. Ten eerste, zoals we al zeiden, moeten de kolommen uniek zijn. Ter verduidelijking verwijzen we naar de gegevens binnen de rijen, niet naar de kolomnamen zelf. Ook kan geen waarde in de kolommen leeg of NULL zijn.
bij het definiëren van een tabel specificeert u de primaire sleutel. Een tabel heeft slechts één primaire sleutel, en de definitie ervan is verplicht.
de primaire sleutel voor elke tabel wordt opgeslagen in een index., De index wordt gebruikt om de uniciteit eis af te dwingen. Het maakt het ook gemakkelijk voor buitenlandse sleutelwaarden om terug te verwijzen naar overeenkomstige primaire sleutelwaarden, zoals we zullen leren over in de volgende sectie.
vreemde sleutels
een vreemde sleutel is een verzameling van een of meer kolommen in een tabel die verwijst naar de primaire sleutel in een andere tabel. Er zijn geen speciale code, configuraties of tabeldefinities die je moet plaatsen om officieel een buitenlandse sleutel aan te wijzen.
in het onderstaande diagram kijk naar de SalesOrderHeader tabel. De column SalesOrderHeader.,CurrencyRateID is een buitenlandse sleutel omdat het gerelateerd is aan het CurrencyRate.CurrencyRateID. Deze kolom CurrencyRate.CurrencyRateID is de primaire sleutel van de CurrencyRate table.
vreemde sleutels als onderdeel van Primaries
Kijk naar het volgende diagram. Welke kolom is de buitenlandse sleutel?
If you said it was PersonPhone.,BusinessEntityID dan heb je gelijk. De reden dat het een buitenlandse sleutel is, is dat het verwijst naar een primaire sleutel, persoon.Business ID, op de andere tafel.
Toevallig, PersonPhone.BusinessEntityID is niet alleen een buitenlandse sleutel, maar is ook onderdeel van de primaire sleutel PersonPhone. De hoofdsleutel van de PersonPhone-tabel is de combinatie van BusinessEntityID, PhoneNumber en PhoneNumberTypeID.
Ik ben het ermee eens dat dit verwarrend is, maar het is toegestaan en geen slechte praktijk.
In tegenstelling tot primaire sleutels kunnen buitenlandse sleutels dubbele waarden bevatten. Ook is het OK dat ze NULL-waarden bevatten.,
indexen worden niet automatisch aangemaakt voor buitenlandse sleutels; u kunt ze echter als DBA definiëren.
een tabel mag meer dan één buitenlandse sleutel bevatten. In de PersonPhone-tabel kunt u de andere buitenlandse sleutel vinden (zie het antwoord aan het einde van het artikel)?
primaire en buitenlandse sleutels vinden in Object Explorer
wanneer u SSM ‘ s gebruikt, vindt u allerlei nuttige informatie in de object explorer. Je hoeft niet diep te graven om de primaire sleutels te vinden. Wanneer u de kolommen van een tabel toont, maar klikt op de map kolommen, hebben de kolommen met hoofdsleutel gouden toetsen ernaast.,
ook als een van de buitenlandse sleutels zijn gedefinieerd in buitenlandse sleutelbeperkingen, die we in de volgende sectie zullen leren, dan hebben die kolommen FK achter hen. Deze zijn in het bovenstaande diagram in het groen omcirkeld.
Foreign Key Constraints
sommige databasebeheersystemen, zoals SQL Server, stellen u in staat om foreign key constraints in te stellen. Deze helpen om referentiële integriteit af te dwingen., In hun eenvoudigste vorm voorkomt een FOREIGN key constraint dat u waarden invoert die niet zijn gevonden in de primaire sleutel van de gerelateerde tabel.
met behulp van het eerste diagram als ons voorbeeld, kunt u de SalesOrderHeader niet invoeren.CurrencyRateID als het nog niet bestaat in de CurrencyRate tabel.
deze beperkingen treden op verschillende manieren in werking:
- ze voorkomen dat u de buitenlandse sleutelwaarde wijzigt in een waarde die niet bestaat als een waarde in de primaire sleutel van de gerelateerde tabel.
- hiermee wordt voorkomen dat u een rij uit de primaire sleuteltabel verwijdert. Dit weerhoudt je van het maken van orphan records., Orphan records worden beschreven als ” child records with no parents.”
- ze stoppen met het toevoegen van een buitenlandse sleutel waarde die niet bestaat in de primaire sleutel.
samengevat versterken de beperkingen de relatie tussen de primaire en buitenlandse sleuteltabellen.
Comparison of Primary Keys to Foreign Keys
om samen te vatten hier is een vergelijking van Primary to Foreign Keys
antwoord op de vraag: eerder vroegen we u om de andere vreemde sleutel in de PersonPhone-tabel te identificeren. Het juiste antwoord is PhoneNumberTypeID.
Geef een reactie