Relaties met buitenlandse sleutels maken
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
In dit artikel wordt beschreven hoe u relaties met buitenlandse sleutels maakt in SQL Server met behulp van SQL Server Management Studio of Transact-SQL. U maakt een relatie tussen twee tabellen wanneer u rijen van de ene tabel wilt koppelen aan rijen van een andere tabel.
Machtigingen
Voor het maken van een nieuwe tabel met een buitenlandse sleutel is toestemming CREATE TABLE in de database vereist en toestemming ALTER SCHEMA voor het schema waarin de tabel wordt gemaakt.
Voor het maken van een vreemde sleutel in een bestaande tabel is ALTER TABLE machtiging op de tabel vereist.
Beperkingen
Een beperking voor vreemde sleutels hoeft niet alleen te worden gekoppeld aan een primaire sleutelbeperking in een andere tabel. Vreemde sleutels kunnen ook worden gedefinieerd om te verwijzen naar de kolommen van een
UNIQUE
restrictie in een andere tabel.Wanneer een andere waarde dan
NULL
wordt ingevoerd in de kolom van eenFOREIGN KEY
beperking, moet de waarde bestaan in de kolom waarnaar wordt verwezen. Anders wordt een foutmelding over schending van de vreemde sleutel geretourneerd. Als u ervoor wilt zorgen dat alle waarden van een beperking voor een samengestelde vreemde sleutel worden geverifieerd, specificeert uNOT NULL
op alle deelnemende kolommen.FOREIGN KEY
beperkingen kunnen alleen verwijzen naar tabellen binnen dezelfde database op dezelfde server. Referentiële integriteit tussen databases moet worden geïmplementeerd via triggers. Zie CREATE TRIGGER (Transact-SQL)voor meer informatie.FOREIGN KEY
beperkingen kunnen verwijzen naar een andere kolom in dezelfde tabel en ook wel een zelfverwijzing genoemd.Een
FOREIGN KEY
beperking die is opgegeven op kolomniveau kan slechts één verwijzingskolom weergeven. Deze kolom moet hetzelfde gegevenstype hebben als de kolom waarop de beperking is gedefinieerd.Een
FOREIGN KEY
beperking die is opgegeven op tabelniveau, moet hetzelfde aantal referentiekolommen hebben als het aantal kolommen in de lijst met kolommen met beperkingen. Het gegevenstype van elke verwijzingskolom moet ook hetzelfde zijn als de bijbehorende kolom in de kolomlijst.De database-engine heeft geen vooraf gedefinieerde limiet voor het aantal
FOREIGN KEY
beperkingen die een tabel kan bevatten die naar andere tabellen verwijzen. De database-engine beperkt ook niet het aantalFOREIGN KEY
beperkingen die eigendom zijn van andere tabellen die verwijzen naar een specifieke tabel. Het werkelijke aantalFOREIGN KEY
beperkingen wordt echter beperkt door de hardwareconfiguratie en door het ontwerp van de database en toepassing. Een tabel kan verwijzen naar maximaal 253 andere tabellen en kolommen als refererende sleutels (uitgaande verwijzingen). SQL Server 2016 (13.x) en latere versies verhogen de limiet voor het aantal andere tabellen en kolommen dat kan verwijzen naar kolommen in één tabel (binnenkomende verwijzingen), van 253 tot 10.000. (Vereist ten minste 130 compatibiliteitsniveau.) De verhoging heeft de volgende beperkingen:Meer dan 253 vreemde-sleutelreferenties worden ondersteund voor
DELETE
- enUPDATE
DML-bewerkingen.MERGE
bewerkingen worden niet ondersteund.Een tabel met een foreign key verwijzing naar zichzelf is nog steeds beperkt tot 253 foreign key verwijzingen.
Vreemde-sleutelverwijzingen die groter zijn dan 253, zijn momenteel niet beschikbaar voor columnstore-indexen of geheugen-geoptimaliseerde tabellen.
FOREIGN KEY
beperkingen worden niet afgedwongen voor tijdelijke tabellen.Als een vreemde sleutel is gedefinieerd op een CLR-kolom met een gebruikersgedefinieerd type, moet de implementatie van het type binaire volgorde ondersteunen. Zie CLR User-Defined Typenvoor meer informatie.
Een kolom van het type varchar(max) kan alleen deelnemen aan een
FOREIGN KEY
beperking als de primaire sleutel die wordt verwezen ook wordt gedefinieerd als type varchar(max).
Een buitenlandse sleutelrelatie maken in Table Designer
SQL Server Management Studio gebruiken
Klik in Objectverkenner met de rechtermuisknop op de tabel die zich aan de kant van de buitenlandse sleutel van de relatie bevindt en selecteer Ontwerp.
De tabel wordt geopend in Databasetabellen maken en bijwerken.
In het menu Tabelontwerper, selecteer Relaties. (Zie het menu Tabelontwerper in de koptekst of klik met de rechtermuisknop in de lege ruimte van de tabeldefinitie en selecteer vervolgens Relaties....)
In het dialoogvenster Relaties met vreemde sleutels, selecteer Toevoegen.
De relatie wordt weergegeven in de geselecteerde relatie lijst met een door het systeem opgegeven naam in de indeling
FK_<tablename>_<tablename>
, waarbij de eerste tabelnaam de naam van de refererende-sleuteltabel is en de tweede tabelnaam de naam van de primaire-sleuteltabel is. Dit is slechts een standaardinstelling en algemene naamconventie voor het (naam) veld van het vreemde-sleutelobject.Selecteer de relatie in de geselecteerde relatie lijst.
Selecteer tabel- en kolomspecificatie in het raster rechts en selecteer het beletselteken (...) rechts van de eigenschap.
Kies in het dialoogvenster Tabellen en kolommen, in de vervolgkeuzelijst Primaire Sleutel, de tabel die zich aan de primaire-sleutelzijde van de relatie bevindt.
Kies in het raster onder het dialoogvenster de kolommen die bijdragen aan de primaire sleutel van de tabel. Kies in de aangrenzende vak rechts van elke kolom de corresponderende foreign-key kolom van de foreign-key tabel.
Tabelontwerper suggereert een naam voor de relatie. Als u deze naam wilt wijzigen, bewerkt u de inhoud van het tekstvak relatienaam.
Kies OK om de relatie aan te maken.
Sluit het venster Tabelontwerper en sla de wijzigingen op om de wijziging in de referentiesleutelrelatie van kracht te laten worden.
Een vreemde sleutel maken in een nieuwe tabel
Gebruik Transact-SQL
In het volgende voorbeeld wordt een tabel gemaakt en wordt een foreign key-constraint gedefinieerd voor de kolom TempID
die verwijst naar de kolom SalesReasonID
in tabel Sales.SalesReason
in database AdventureWorks
. De ON DELETE CASCADE
- en ON UPDATE CASCADE
-componenten worden gebruikt om ervoor te zorgen dat wijzigingen in Sales.SalesReason
tabel automatisch worden doorgegeven aan de Sales.TempSalesReason
tabel.
CREATE TABLE Sales.TempSalesReason (
TempID INT NOT NULL,
Name NVARCHAR(50),
CONSTRAINT PK_TempSales
PRIMARY KEY NONCLUSTERED (TempID),
CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason(SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Een vreemde sleutel maken in een bestaande tabel
Gebruik Transact-SQL
In het volgende voorbeeld wordt een foreign key gemaakt op de kolom TempID
en verwijst naar de kolom SalesReasonID
in de Sales.SalesReason
-tabel in de AdventureWorks
-database.
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE;
Verwante inhoud
- beperkingen voor primaire en vreemde sleutels
- Databasemachtigingen verlenen (Transact-SQL)
- ALTER TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- ALTER TABLE table_constraint (Transact-SQL)