Megosztás a következőn keresztül:


Idegenkulcs-kapcsolatok létrehozása

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Ez a cikk azt ismerteti, hogyan hozhat létre idegenkulcs-kapcsolatokat az SQL Serverben az SQL Server Management Studio vagy a Transact-SQL használatával. Két tábla közötti kapcsolatot akkor hoz létre, ha az egyik tábla sorait egy másikhoz szeretné társítani.

Permissions

Egy új tábla idegen kulccsal való létrehozásához CREATE TABLE engedély szükséges az adatbázisban, és ALTER SCHEMA engedélyt arra a sémára, amelyben a tábla létrejön.

Az idegen kulcs meglévő táblában való létrehozásához ALTER TABLE engedélyre van szükség a táblában.

Limitations

  • Az idegenkulcs-kényszereket nem kell csak egy másik táblában lévő elsődleges kulcskényszerhez kapcsolni. Idegen kulcsok is definiálhatók egy másik tábla UNIQUE kényszerének oszlopaira való hivatkozáshoz.

  • Ha NULL-tól eltérő értéket ad meg egy FOREIGN KEY kényszer oszlopába, az értéknek léteznie kell a hivatkozott oszlopban. Ellenkező esetben a rendszer idegenkulcs-megsértési hibaüzenetet ad vissza. Annak érdekében, hogy az összetett idegenkulcs-korlátozás összes értéke ellenőrizve legyen, minden részt vevő oszlopnál adja meg a NOT NULL értéket.

  • FOREIGN KEY korlátozások csak az ugyanazon kiszolgálón található adatbázis tábláira hivatkozhatnak. Az adatbázisközi hivatkozási integritást eseményindítókon keresztül kell megvalósítani. További információ: CREATE TRIGGER (Transact-SQL).

  • FOREIGN KEY korlátozások hivatkozhatnak egy másik oszlopra ugyanabban a táblában, és önhivatkozásnak is nevezik.

  • Az oszlopszinten megadott FOREIGN KEY kényszerek csak egy referenciaoszlopot sorolhatnak fel. Ennek az oszlopnak ugyanazzal az adattípussal kell rendelkeznie, mint a kényszert definiáló oszlopnak.

  • A tábla szintjén megadott FOREIGN KEY kényszernek ugyanannyi hivatkozási oszlopmal kell rendelkeznie, mint a kényszeroszlopok listájában szereplő oszlopok számának. Az egyes referenciaoszlopok adattípusának meg kell egyeznie az oszloplista megfelelő oszlopával is.

  • Az adatbázismotornak nincs előre definiált korlátja azon FOREIGN KEY korlátozások számára, amelyeket egy tábla más táblákra hivatkozva tartalmazhat. Az adatbázismotor emellett nem korlátozza az adott táblára hivatkozó más táblák által birtokolt FOREIGN KEY korlátozások számát. A FOREIGN KEY korlátozások tényleges számát azonban a hardverkonfiguráció, valamint az adatbázis és az alkalmazás kialakítása korlátozza. Egy tábla legfeljebb 253 másik táblára és oszlopra hivatkozhat idegen kulcsként (kimenő hivatkozásokként). Az SQL Server 2016 (13.x) és újabb verziói 253-ról 10 000-re növelik azon táblák és oszlopok számát, amelyek egyetlen táblában lévő oszlopokra hivatkozhatnak (bejövő hivatkozások). (Legalább 130 kompatibilitási szintet igényel.) A növekedés a következő korlátozásokkal rendelkezik:

    • 253-nál több idegen kulcsos hivatkozás támogatott DELETE és UPDATE DML műveletekhez. A MERGE műveletek nem támogatottak.

    • Az idegenkulcs-hivatkozással rendelkező táblák továbbra is 253 idegenkulcs-hivatkozásra korlátozódnak.

    • 253-nál több idegenkulcs-hivatkozás jelenleg nem érhető el oszlopcentrikus indexekhez vagy memóriaoptimalizált táblákhoz.

  • FOREIGN KEY korlátozások nem lesznek kényszerítve ideiglenes táblákra.

  • Ha egy felhasználó által definiált CLR-típusoszlopon idegen kulcs van definiálva, a típus implementációjának támogatnia kell a bináris rendezést. További információ, lásd: CLR User-Defined Types.

  • A varchar(max) típusú oszlop csak akkor vehet részt FOREIGN KEY korlátozásban, ha a hivatkozott elsődleges kulcs varchar(max)típusként is definiálva van.

Idegenkulcs-kapcsolat létrehozása a(z) Táblatervezőben

Az SQL Server Management Studio használata

  1. Az Object Explorerben kattintson a jobb gombbal a kapcsolat idegenkulcsos oldalán található táblára, és válassza a Tervezés lehetőséget.

    A tábla megnyílik Adatbázistáblák létrehozása és frissítése.

  2. A Táblatervező menüben válassza Kapcsolatoklehetőséget. (Lásd a Táblatervező menüt a fejlécben, vagy kattintson a jobb gombbal a tábladefiníció üres területére, majd válassza a Kapcsolatok...lehetőséget.)

  3. Az Külső kulcsú kapcsolatok párbeszédpanelen válassza a Hozzáadás lehetőséget.

    A kapcsolat megjelenik a Kijelölt kapcsolat listában egy rendszer által megadott névvel a FK_<tablename>_<tablename>formátumban, ahol az első táblanév az idegenkulcs-tábla neve, a második táblanév pedig az elsődleges kulcstábla neve. Ez csak egy alapértelmezett és gyakori elnevezési konvenció az idegenkulcs-objektum (Név) mezőjéhez.

  4. Válassza ki a kapcsolatot a "Kiválasztott kapcsolat" listából.

  5. A jobb oldali rácsban válassza a Táblák és oszlopok specifikációja elemet, majd a tulajdonság jobb oldalán található három pontot (...) válassza ki.

  6. A Táblák és oszlopok párbeszédpanel Elsődleges kulcs legördülő listájában válassza ki a kapcsolat elsődlegeskulcs-oldalán található táblát.

  7. A párbeszédpanel alatti rácson válassza ki a tábla elsődleges kulcsához hozzájáruló oszlopokat. Az egyes oszlopoktól közvetlenül jobbra lévő rácscellában válassza ki az idegen kulcs táblázat megfelelő idegen kulcs oszlopát.

    Table Designer a kapcsolat nevét javasolja. A név módosításához szerkessze a Kapcsolat neve szövegmező tartalmát.

  8. Válassza OK lehetőséget a kapcsolat létrehozásához.

  9. Zárja be a táblatervező ablakát, és Mentse az idegenkulcs-kapcsolat módosításának érvénybe lépéséhez szükséges módosításokat.

Idegen kulcs létrehozása új táblában

Használd a Transact-SQL-t

Az alábbi példa létrehoz egy táblát, és egy idegenkulcs-korlátozást határoz meg a TempID oszlopon, amely a SalesReasonID adatbázis Sales.SalesReason táblájának AdventureWorks oszlopára hivatkozik. A ON DELETE CASCADE és a ON UPDATE CASCADE záradékok biztosítják, hogy a Sales.SalesReason tábla módosításai automatikusan propagálásra kerülnek a Sales.TempSalesReason táblába.

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
);

Idegen kulcs létrehozása meglévő táblában

Használd a Transact-SQL-t

Az alábbi példa egy idegen kulcsot hoz létre a TempID oszlopban, és a SalesReasonID adatbázis Sales.SalesReason táblájának AdventureWorks oszlopára hivatkozik.

ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
   ON DELETE CASCADE
   ON UPDATE CASCADE;