Cizí klíč SQL Serveru: Jak ho vytvořit pomocí příkladu
⚡ Chytré shrnutí
Cizí klíč v SQL Serveru vynucuje referenční integritu propojením podřízené tabulky s nadřazenou tabulkou. Každá hodnota cizího klíče musí již existovat v odkazovaném primárním klíči nadřazené tabulky.

Co je CIZÍ KLÍČ?
Cizí klíč poskytuje způsob, jak vynutit referenční integritu v rámci SQL ServerJednoduše řečeno, cizí klíč zajišťuje, že hodnoty z jedné tabulky musí být přítomny i v jiné tabulce.
Pravidla pro ZAHRANIČNÍ KLÍČ
- V cizím klíči SQL je povolena hodnota NULL.
- Tabulka, na kterou se odkazuje, se nazývá nadřazená tabulka.
- Tabulka s cizím klíčem se nazývá podřízená tabulka.
- Cizí klíč v podřízené tabulce odkazuje na primární klíč v nadřazené tabulce.
- Tento vztah rodič-dítě vynucuje pravidlo známé jako „referenční integrita“.
Níže uvedený diagram shrnuje všechny výše uvedené body pro cizí klíč.
Jak vytvořit CIZÍ KLÍČ v SQL
Cizí klíč v SQL Serveru můžete vytvořit dvěma způsoby:
SQL Server Management Studio
Nadřazená tabulka: Řekněme, že máme existující nadřazenou tabulku s názvem „Kurz“. ID_kurzu a název_kurzu jsou dva sloupce, přičemž ID_kurzu je primárním klíčem.
Podřízená tabulka: Potřebujeme vytvořit druhou tabulku jako podřízenou tabulku. Jejími dva sloupce jsou „Course_ID“ a „Course_Strength“. „Course_ID“ by však měl být cizí klíč.
Krok 1) Klikněte pravým tlačítkem myši na Tabulky > Nová > Tabulka…
Krok 2) Zadejte dva názvy sloupců: „Course_ID“ a „Course_Strength“. Klikněte pravým tlačítkem myši na sloupec „Course_Id“ a poté klikněte na Vztah.
Krok 3) V části „Vztahy cizích klíčů“ klikněte na tlačítko „Přidat“.
Krok 4) V části „Specifikace tabulek a sloupců“ klikněte na ikonu „…“.
Krok 5) V rozbalovací nabídce vyberte „Tabulku primárních klíčů“ jako „KURZ“ a nově vytvářenou tabulku jako „Tabulku cizích klíčů“.
Krok 6) V části „Tabulka primárních klíčů“ vyberte jako sloupec tabulky primárních klíčů sloupec „Id_kurzu“.
V části „Tabulka cizích klíčů“ vyberte jako sloupec tabulky cizích klíčů sloupec „Id_kurzu“. Klikněte na OK.
Krok 7) Klikněte na tlačítko Přidat.
Krok 8) Zadejte název tabulky jako „Course_Strength“ a klikněte na OK.
Výsledek: Nastavili jsme vztah rodič-dítě mezi 'Kurz' a 'Síla_kurzu'.
T-SQL: Vytvoření tabulky typu rodič-potomek pomocí T-SQL
Nadřazená tabulka: Znovu zvažte, že máme existující nadřazenou tabulku s názvem „Kurz“. ID_kurzu a název_kurzu jsou dva sloupce, přičemž ID_kurzu je primárním klíčem.
Podřízená tabulka: Potřebujeme vytvořit druhou tabulku jako podřízenou tabulku s názvem 'Course_Strength_TSQL'. Jejími dvěma sloupci jsou 'Course_ID' a 'Course_Strength'. 'Course_ID' by však měl být cizí klíč.
Níže je uvedena syntaxe pro vytvořit tabulku s CIZÍM KLÍČEM.
Syntaxe:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Zde je popis výše uvedených parametrů:
- childTable je název tabulky, která má být vytvořena.
- column_1, column_2 jsou sloupce, které mají být přidány do tabulky.
- fkey_name je název omezení cizího klíče, které má být vytvořeno.
- child_column1, child_column2 … child_column_n jsou sloupce podřízené tabulky, které odkazují na primární klíč v nadřazené tabulce (parentTable).
- parentTable je název nadřazené tabulky, na jejíž klíč se odkazuje v podřízené tabulce.
- nadřazený_sloupec1, nadřazený_sloupec2 … nadřazený_sloupec_n jsou sloupce tvořící primární klíč nadřazené tabulky.
- ON DELETE je volitelný parametr, který určuje, co se stane s podřízenými daty po odstranění nadřazených dat. Mezi hodnoty patří NO ACTION, SET NULL, CASCADE nebo SET DEFAULT.
- ON UPDATE je volitelný parametr, který určuje, co se stane s podřízenými daty po aktualizaci nadřazených dat. Hodnoty zahrnují NO ACTION, SET NULL, CASCADE nebo SET DEFAULT.
- ŽÁDNÁ AKCE znamená, že se s podřízenými daty po aktualizaci nebo odstranění nadřazených dat nic nestane.
- CASCADE znamená, že podřízená data jsou odstraněna nebo aktualizována po odstranění nebo aktualizaci nadřazených dat.
- SET NULL znamená, že podřízená data se po aktualizaci nebo odstranění nadřazených dat nastaví na hodnotu null.
- SET DEFAULT znamená, že podřízená data se po aktualizaci nebo smazání nadřazených dat nastaví na výchozí hodnotu.
Podívejme se na příklad cizího klíče, který vytvoří tabulku s jedním sloupcem jako CIZI KLÍČ, a to pomocí datový typ pro každý sloupec.
Cizí klíč v příkladu SQL
Dotaz:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Krok 1) Spusťte dotaz kliknutím na tlačítko Spustit.
Výsledek: Nastavili jsme vztah rodič-dítě mezi 'Course' a 'Course_Strength_TSQL'.
Pomocí ALTER TABLE
Nyní se naučíme, jak přidat cizí klíč v SQL Serveru do již existující tabulky pomocí příkazu ALTER TABLE. Použijeme k tomu níže uvedenou syntaxi:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Zde je popis výše použitých parametrů:
- childTable je název tabulky, která má být vytvořena.
- column_1, column_2 jsou sloupce, které mají být přidány do tabulky.
- fkey_name je název omezení cizího klíče, které má být vytvořeno.
- child_column1, child_column2 … child_column_n jsou sloupce podřízené tabulky, které odkazují na primární klíč v nadřazené tabulce (parentTable).
- parentTable je název nadřazené tabulky, na jejíž klíč se odkazuje v podřízené tabulce.
- nadřazený_sloupec1, nadřazený_sloupec2 … nadřazený_sloupec_n jsou sloupce tvořící primární klíč nadřazené tabulky.
Příklad přidání cizího klíče příkazem ALTER TABLE:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Na stole oddělení jsme vytvořili cizí klíč s názvem fkey_student_admission. Tento cizí klíč odkazuje na sloupec přijetí v tabulce studentů.
Příklad dotazu CIZÍ KLÍČ
Nejprve se podívejme na data z naší nadřazené tabulky, SAMOZŘEJMĚ.
Dotaz:
SELECT * from COURSE;
Nyní vložme několik řádků do podřízené tabulky 'Course_Strength_TSQL'. Zkusíme vložit dva typy řádků:
- První typ, pro který existuje Course_Id v podřízené tabulce v Course_Id nadřazené tabulky, tj. Course_Id = 1 a 2.
- Druhý typ, pro který Course_Id v podřízené tabulce neexistuje v Course_Id nadřazené tabulky, tj. Course_Id = 5.
Dotaz:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Výsledek: Spusťme dotaz společně, abychom viděli nadřazené a podřízené tabulky.
Řádky s Course_ID 1 a 2 existují v tabulce Course_Strength. Course_ID 5 je však výjimkou, protože v nadřazené tabulce nemá žádný odpovídající řádek.

















