Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2016 (13.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Tento článek popisuje, jak vytvořit vztahy cizích klíčů v SQL Serveru pomocí nástroje SQL Server Management Studio nebo Transact-SQL. Relaci mezi dvěma tabulkami vytvoříte, když chcete přidružit řádky jedné tabulky k řádkům druhé.
Permissions
Vytvoření nové tabulky s cizím klíčem vyžaduje oprávnění CREATE TABLE v databázi a oprávnění ALTER SCHEMA schématu, ve kterém se tabulka vytváří.
Vytvoření cizího klíče v existující tabulce vyžaduje ALTER TABLE oprávnění k tabulce.
Limitations
Omezení cizího klíče nemusí být propojené pouze s omezením primárního klíče v jiné tabulce. Cizí klíče lze také definovat tak, aby odkazovaly na sloupce omezení
UNIQUEv jiné tabulce.Pokud je do sloupce omezení
NULLzadána jiná hodnota nežFOREIGN KEY, musí hodnota existovat v odkazovaném sloupci. V opačném případě se vrátí chybová zpráva o porušení cizího klíče. Pokud chcete zajistit, aby byly ověřeny všechny hodnoty omezení složeného cizího klíče, zadejteNOT NULLpro všechny zúčastněné sloupce.FOREIGN KEYomezení mohou odkazovat pouze na tabulky ve stejné databázi na stejném serveru. Referenční integrita mezi databázemi musí být implementována prostřednictvím triggerů. Další informace naleznete v tématu CREATE TRIGGER (Transact-SQL).FOREIGN KEYomezení mohou odkazovat na jiný sloupec ve stejné tabulce a označují se jako samoreferenční omezení.Omezení
FOREIGN KEYzadané na úrovni sloupce může obsahovat pouze jeden referenční sloupec. Tento sloupec musí mít stejný datový typ jako sloupec, na kterém je definováno omezení.Omezení
FOREIGN KEYzadané na úrovni tabulky musí mít stejný počet sloupců odkazu jako počet sloupců v seznamu sloupců omezení. Datový typ každého referenčního sloupce musí být také stejný jako odpovídající sloupec v seznamu sloupců.Databázový stroj nemá předdefinovaný limit na počet omezení
FOREIGN KEY, která mohou být v tabulce, a která odkazují na jiné tabulky. Databázový stroj také neomezuje počet omezeníFOREIGN KEYvlastněných jinými tabulkami, které odkazují na konkrétní tabulku. Skutečný počet použitých omezeníFOREIGN KEYje však omezen konfigurací hardwaru a návrhem databáze a aplikace. Tabulka může odkazovat na maximálně 253 dalších tabulek a sloupců jako cizí klíče (odchozí odkazy). SQL Server 2016 (13.x) a novější verze zvyšují limit počtu dalších tabulek a sloupců, které můžou odkazovat na sloupce v jedné tabulce (příchozí odkazy), od 253 do 10 000. (Vyžaduje alespoň 130 úrovní kompatibility.) Zvýšení má následující omezení:Pro operace
DELETEaUPDATEDML se podporuje více než 253 odkazů na cizí klíč.MERGEoperace nejsou podporovány.Tabulka s odkazem na cizí klíč je stále omezena na 253 odkazů na cizí klíč.
Pro indexy columnstore nebo tabulky optimalizované pro paměť momentálně nejsou podporovány odkazy na cizí klíč, které jsou větší než 253.
Omezení
FOREIGN KEYnejsou vynucována u dočasných tabulek.Pokud je cizí klíč definován ve sloupci typu definovaném uživatelem CLR, musí implementace typu podporovat binární řazení. Další informace naleznete v tématu CLR User-Defined Types.
Sloupec typu varchar(max) se může účastnit omezení
FOREIGN KEYpouze v případě, že primární klíč, na který odkazuje, je také definován jako typ varchar(max).
Vytvořte relaci cizího klíče v Návrháři tabulek
Použití aplikace SQL Server Management Studio
V Průzkumníku objektů klikněte pravým tlačítkem myši na tabulku, která je na straně cizího klíče relace, a vyberte Návrh.
Tabulka se otevře v Vytvoření a aktualizace databázových tabulek.
V nabídce Návrháře tabulky vyberte možnost Relace. (Podívejte se na nabídku Table Designer v záhlaví, nebo klikněte pravým tlačítkem na prázdné místo definice tabulky a vyberte Relace....)
V dialogovém okně Relace cizího klíče vyberte Přidat.
Relace se zobrazí v seznamu Vybraná relace s názvem zadaným systémem ve formátu
FK_<tablename>_<tablename>, kde první název tabulky je tabulka cizího klíče a druhý název tabulky je tabulka primárního klíče. Toto je pouze výchozí a běžná konvence pojmenování pro pole (Název) objektu cizího klíče.Vyberte relaci v seznamu Vybraná relace.
Vyberte Specifikace tabulek a sloupců v mřížce napravo a vyberte trojtečku (...) napravo od vlastnosti.
V dialogovém okně Tabulky a sloupce vyberte v rozevíracím seznamu Primární klíč tabulku, která je na straně primárního klíče relace.
V mřížce pod dialogovým oknem zvolte sloupce, které přispívají k primárnímu klíči tabulky. V sousední buňce mřížky napravo od každého sloupce zvolte odpovídající sloupec cizího klíče v tabulce cizího klíče.
Návrhář tabulky navrhne název relace. Chcete-li změnit tento název, upravte obsah textového pole Název relace.
Pokud chcete vytvořit relaci, zvolte OK.
Zavřete okno návrháře tabulky a uložte změny, aby se změna relace cizího klíče projevila.
Vytvoření cizího klíče v nové tabulce
Použijte Transact-SQL
Následující příklad vytvoří tabulku a definuje omezení cizího klíče pro sloupec TempID, který odkazuje na sloupec SalesReasonID v tabulce Sales.SalesReason v databázi AdventureWorks. Klauzule ON DELETE CASCADE a ON UPDATE CASCADE slouží k zajištění automatického šíření změn Sales.SalesReason tabulky do tabulky Sales.TempSalesReason.
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
);
Vytvoření cizího klíče v existující tabulce
Použijte Transact-SQL
Následující příklad vytvoří cizí klíč ve sloupci TempID a odkazuje na sloupec SalesReasonID v tabulce Sales.SalesReason v databázi AdventureWorks.
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE;