Външен ключ на SQL Server: Как да го създадете с пример
⚡ Умно обобщение
Външен ключ в SQL Server налага референтна цялост, като свързва дъщерна таблица с родителска таблица. Всяка стойност на външен ключ трябва вече да съществува в посочения първичен ключ на родителската таблица.

Какво е FOREIGN KEY?
Външният ключ предоставя начин за налагане на референтна цялост вътре SQL ServerС прости думи, външният ключ гарантира, че стойностите в една таблица трябва да присъстват и в друга таблица.
Правила за FOREIGN KEY
- NULL е разрешено във външен ключ на SQL.
- Таблицата, към която се прави препратка, се нарича родителска таблица.
- Таблицата с външния ключ се нарича дъщерна таблица.
- Външният ключ в дъщерната таблица препраща към първичен ключ в родителската таблица.
- Тази връзка родител-дете налага правилото, известно като „референтна цялост“.
Диаграмата по-долу обобщава всички точки по-горе за външния ключ.
Как да създадете FOREIGN KEY в SQL
Можете да създадете външен ключ в SQL Server по два начина:
Студио за управление на SQL Server
Родителска таблица: Да кажем, че имаме съществуваща родителска таблица с име „Курс“. Course_ID и Course_name са две колони, като Course_Id е първичен ключ.
Дъщерна таблица: Трябва да създадем втората таблица като дъщерна таблица. „Course_ID“ и „Course_Strength“ са двете ѝ колони. „Course_ID“ обаче ще бъде външният ключ.
Стъпка 1) Щракнете с десния бутон върху Таблици > Нова > Таблица…
Стъпка 2) Въведете две имена на колони като „Course_Id“ и „Course_Strength“. Щракнете с десния бутон върху колоната „Course_Id“, след което щракнете върху Relationship.
Стъпка 3) В „Връзки с външен ключ“ щракнете върху „Добавяне“.
Стъпка 4) В „Спецификация на таблици и колони“ щракнете върху иконата „…“.
Стъпка 5) Изберете „Таблица с първични ключове“ като „КУРС“ и новата таблица, която се създава, като „Таблица с външни ключове“ от падащото меню.
Стъпка 6) За „Таблица с първични ключове“ изберете колоната „Course_Id“ като колона на таблицата с първични ключове.
За „Таблица с външни ключове“ изберете колоната „Course_Id“ като колона на таблицата с външни ключове. Щракнете върху OK.
Стъпка 7) Кликнете върху Добавяне.
Стъпка 8) Дайте име на таблицата като „Course_Strength“ и щракнете върху OK.
Резултат: Зададохме връзка родител-дете между „Course“ и „Course_Strength“.
T-SQL: Създаване на таблица родител-дете с помощта на T-SQL
Родителска таблица: Преосмислете факта, че имаме съществуваща родителска таблица с име „Курс“. Course_ID и Course_name са две колони, като Course_Id е първичен ключ.
Дъщерна таблица: Трябва да създадем втората таблица като дъщерна таблица с име „Course_Strength_TSQL“. „Course_ID“ и „Course_Strength“ са двете ѝ колони. „Course_ID“ обаче ще бъде външният ключ.
По-долу е синтаксисът на създайте таблица с ВЪНШЕН КЛЮЧ.
Синтаксис:
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 } ] );
Ето описание на горните параметри:
- childTable е името на таблицата, която трябва да бъде създадена.
- колона_1, колона_2 са колоните, които ще бъдат добавени към таблицата.
- fkey_name е името на ограничението на външния ключ, което ще бъде създадено.
- child_column1, child_column2 … child_column_n са колоните на дъщерната таблица, които препращат към първичния ключ в parentTable.
- parentTable е името на родителската таблица, чийто ключ е посочен в дъщерната таблица.
- parent_column1, parent_column2 … parent_column_n са колоните, съставляващи първичния ключ на родителската таблица.
- ON DELETE е незадължителен параметър, който указва какво се случва с дъщерните данни след изтриване на родителските данни. Стойностите включват NO ACTION, SET NULL, CASCADE или SET DEFAULT.
- ON UPDATE е незадължителен параметър, който указва какво се случва с дъщерните данни след актуализиране на родителските данни. Стойностите включват NO ACTION, SET NULL, CASCADE или SET DEFAULT.
- „БЕЗ ДЕЙСТВИЕ“ означава, че нищо не се случва с дъщерните данни, след като родителските данни бъдат актуализирани или изтрити.
- CASCADE означава, че дъщерните данни се изтриват или актуализират, след като родителските данни са били изтрити или актуализирани.
- SET NULL означава, че дъщерните данни се задават на null, след като родителските данни бъдат актуализирани или изтрити.
- ЗАДАВАНЕ ПО СТАНДАРТНО означава, че дъщерните данни се задават на стойността си по подразбиране след актуализация или изтриване на родителските данни.
Нека видим пример за външен ключ, който създава таблица с една колона като ВЪНШЕН КЛЮЧ, използвайки тип данни за всяка колона.
Външен ключ в SQL пример
Запитване:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Стъпка 1) Изпълнете заявката, като щракнете върху Изпълни.
Резултат: Зададохме връзка родител-дете между „Course“ и „Course_Strength_TSQL“.
Използване на ALTER TABLE
Сега ще научим как да добавим външен ключ в SQL Server към таблица, която вече съществува, използвайки командата ALTER TABLE. Ще използваме синтаксиса, даден по-долу:
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);
Ето описание на параметрите, използвани по-горе:
- childTable е името на таблицата, която трябва да бъде създадена.
- колона_1, колона_2 са колоните, които ще бъдат добавени към таблицата.
- fkey_name е името на ограничението на външния ключ, което ще бъде създадено.
- child_column1, child_column2 … child_column_n са колоните на дъщерната таблица, които препращат към първичния ключ в parentTable.
- parentTable е името на родителската таблица, чийто ключ е посочен в дъщерната таблица.
- parent_column1, parent_column2 … parent_column_n са колоните, съставляващи първичния ключ на родителската таблица.
Пример за добавяне на външен ключ при ALTER TABLE:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Създадохме външен ключ с име fkey_student_admission в таблицата на отдела. Този външен ключ препраща към колоната за прием на таблицата на учениците.
Примерна заявка FOREIGN KEY
Първо, нека видим данните от нашата родителска таблица, РАЗБИРА СЕ.
Запитване:
SELECT * from COURSE;
Сега нека вмъкнем няколко реда в дъщерната таблица „Course_Strength_TSQL“. Ще се опитаме да вмъкнем два типа редове:
- Първият тип, за който Course_Id в дъщерната таблица съществува в Course_Id на родителската таблица, т.е. Course_Id = 1 и 2.
- Вторият тип, за който Course_Id в дъщерната таблица не съществува в Course_Id на родителската таблица, т.е. Course_Id = 5.
Запитване:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Резултат: Нека изпълним заявката заедно, за да видим родителските и дъщерните таблици.
Редовете с Course_ID 1 и 2 съществуват в таблицата Course_Strength. Course_ID 5 обаче е изключение, защото няма съответстващ ред в родителската таблица.

















