Въведение в чужд ключ в SQL

Външният ключ е ограничение в SQL. Използва се за свързване на двете таблици. Външен ключ в една таблица сочи към първичен ключ в друга таблица. Външен ключ може да се използва, за да се уверите, че редът в една таблица има съответен ред / редове в друга таблица. Реферираната таблица се нарича родителска таблица, а таблицата с чужд ключ е известна като дъщерна таблица. Тази връзка родител-дете налага правилото, което е известно като референтна цялост. Референтната цялост е свойство на данните, заявяващи, че всички нейни референции са валидни.

Така че, ако в базата данни имате връзки 1 към много или много към много, чужди ключове ще бъдат много полезни. Той действа като препратка между две таблици (родителска таблица и таблица за деца), защото препраща към основния ключ на друга таблица. Така той установява връзка между родителска таблица и детска таблица.

Синтаксис

Създаването на нова таблица с чужд ключ изисква CREATE TABLE разрешение в базата данни

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (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 ) ) );

  • Child_Table е името на таблицата, която ще създадем
  • колона_1, колона_2 - колоните, които трябва да се добавят към таблицата.
  • F_key - Това е ограничение с чужд ключ.
  • child_column1, child_column2… child_column_n- Това е името на колони child_Table за препратка към основния ключ в родителската таблица.
  • Parent_Table - Това е името на parent_table. Основният ключ на parent_table се позовава в child_table
  • ON DELETE - Този параметър предприема действия по дочерните данни след изтриването на родителските данни. SET NULL, NO ACTION, CASCADE, SET DEFAULT са някои от стойностите на този параметър.
  • ON UPDATE - Това е незадължителен параметър, който предприема действия върху дъщерните данни след актуализация на родителските данни. SET NULL, NO ACTION, CASCADE, SET DEFAULT са някои от стойностите на този параметър.
  • CASCADE - Можем да използваме това заедно с ON DELETE и ON UPDATE. След изтриването или актуализирането на родителските данни Детските данни ще бъдат изтрити или актуализирани.

Създаването на чужд ключ в съществуваща таблица изисква ALTER разрешение на таблицата.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

правилник

  1. Чуждите ключове не са приложими за временни таблици.
  2. Ограничаването на чужди ключове не трябва да се свързва само с първичния ключ на друга таблица, но може да бъде свързано и с УНИКАЛНОто ограничение на друга таблица.
  3. Ограниченията на FOREIGN KEY могат да се позовават на друга колона в същата таблица. Това се означава като самонасочване.
  4. Ограниченията на чужди ключове могат да се отнасят към таблиците в една и съща база данни.
  5. Можем също да вмъкнем NULL стойности в дъщерната таблица.
  6. Когато в ограничението на чужд ключ вмъкваме различна от NULL стойност, стойността трябва да съществува в реферираната колона, възникнало друго съобщение за нарушение.
  7. Стойността на уникалните ключове на родителя не може да бъде променена, ако правилото за актуализация е RESTRICT и има един или повече зависими редове. Ако обаче правилото за актуализация НЕ Е ДЕЙСТВИЕ, уникалните родителски ключове могат да се актуализират, стига всяко дете да има родителски ключ до момента, когато декларацията за актуализация завърши.

Примери

Кажете, че имаме две таблици Клиенти и Поръчки. Таблицата на клиентите съдържа всички данни, свързани с клиента и таблица за поръчки, съдържащи данни, свързани с поръчки на клиенти.

Клиенти

Cust_idПървичен ключ
CUST_NAME
местоположение

Поръчки

ORDER_IDПървичен ключ
Дата на поръчка
Количество
Cust_idВъншен ключ
Обща сума

В горния пример, колоната Cust_id в таблицата ПОРЪЧКИ е чужд ключ, сочещ към колоната Cust_id в таблицата КЛИЕНТИ.

Да предположим, че тези таблици имат следните стойности

Клиенти

1001АлексНАС
1002КериНАС
1003СидВеликобритания
1004мъжко животноAUS
1005КапилIND

Поръчки

7820-10-2018510021200
7910.12.201741001800
8020-11-201621005369
8109/10/201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8501.02.201621002260

За cust_id 1001 има три поръчки, които съществуват в таблицата с поръчки.

За cust_id 1003 няма поръчка.

Така че, ако имаме конкретни данни (Say id 1003) в родителската таблица, тогава не е необходимо тези данни да са в дъщерната таблица, но обратното не е вярно.

Не можем да разполагаме с данни в дъщерната таблица (Таблица с поръчки), която не съществува в родителската таблица (Клиенти.)

Например, ние не можем да вмъкнем нов запис например за cust_id 1006 в таблицата с поръчки, защото cust_id 1006 не съществува в таблицата на клиентите.

Така че по-долу са примерите, които нарушават референтната цялост на тази връзка:

  1. Вмъкване на ред в таблицата ПОРЪЧКИ, където Cust_ID не се появява в колоната Cust_ID в таблицата КЛИЕНТИ.
  2. Изтриване на ред от таблицата КЛИЕНТИ, където парите на идентификатора на задържане на реда все още присъстват в колоната Задържане_ID в таблицата ПОРЪЧКИ.

Когато определен запис се изтрие от основната таблица, има два начина да се поддържа целостта на данните в дъщерната таблица. Когато две таблици са свързани с чуждестранен ключ и се изтрият определени данни от основната таблица, за които записът съществува и в дъщерната таблица, тогава имаме някакъв механизъм за запазване целостта на данните в дъщерната таблица

  • При изтриване на каскада : Това ще премахне записа от дъщерната таблица, ако тази стойност на чуждия ключ бъде изтрита от главната таблица.
  • При изтриване на NULL: Това ще зададе всички стойности в този запис на таблицата на Child като NULL, за които стойността на чуждия ключ се изтрива от главната таблица.

Заключение - Външен ключ в SQL

Така че е препоръчително да използвате Foreign Key в базата данни, която има едно към едно или едно към много отношения. Основното предимство на използването на чужди ключови ограничения е, че подобрява производителността. Разработчиците могат лесно да идентифицират структурата на базата данни. Можем също така да проучим как заявката ще извлече данните.

Препоръчителни статии

Това е ръководство за чужд ключ в SQL. Тук обсъждаме правилата и примерите на чужд ключ в SQL със синтаксиса. Може да разгледате и следните статии, за да научите повече -

  1. SQL изгледи
  2. Видове присъединения в SQL Server
  3. Какво е PL / SQL?
  4. Ограничения на SQL Server
  5. Топ 6 вида съединения в MySQL с примери