Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric Preview
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.
Permissions
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.
Limitations
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
UNIQUErestrictie in een andere tabel.Wanneer een andere waarde dan
NULLwordt ingevoerd in de kolom van eenFOREIGN KEYbeperking, 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 NULLop alle deelnemende kolommen.FOREIGN KEYbeperkingen 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 KEYbeperkingen kunnen verwijzen naar een andere kolom in dezelfde tabel en ook wel een zelfverwijzing genoemd.Een
FOREIGN KEYbeperking 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 KEYbeperking 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 KEYbeperkingen die een tabel kan bevatten die naar andere tabellen verwijzen. De database-engine beperkt ook niet het aantalFOREIGN KEYbeperkingen die eigendom zijn van andere tabellen die verwijzen naar een specifieke tabel. Het werkelijke aantalFOREIGN KEYbeperkingen 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- enUPDATEDML-bewerkingen.MERGEbewerkingen 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 KEYbeperkingen 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 KEYbeperking 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 refererende-sleutelzijde van de relatie bevindt en selecteer Ontwerpen.
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 het aangrenzende vakje 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 foreign key-relatie 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)
- MAAK TABEL AAN (Transact-SQL)
- ALTER TABLE table_constraint (Transact-SQL)