Вступ до іноземного ключа в 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 - це назва таблиці, яку ми створимо
  • column_1, column_2 - стовпці, які потрібно додати до таблиці.
  • F_key - Це обмеження зовнішнього ключа.
  • child_column1, child_column2… child_column_n- Це ім'я стовпців child_Table для посилання на первинний ключ у батьківській таблиці.
  • Parent_Table - це ім'я___ батьків_table. Первинний ключ parent_table посилається на дочірні таблиці
  • ON DELETE - Цей параметр вживає дочірніх даних після видалення батьківських даних. SET NULL, NO ACTION, CASCADE, SET DEFAULT - деякі значення цього параметра.
  • ON UPDATE - це необов'язковий параметр, який вживає дочірніх даних після оновлення батьківських даних. SET NULL, NO ACTION, CASCADE, SET DEFAULT - деякі значення цього параметра.
  • CASCADE - ми можемо використовувати це разом із ON DELETE та ON UPATE. Після видалення або оновлення батьківських даних Дочірні дані будуть або видалені, або оновлені.

Для створення стороннього ключа в існуючій таблиці потрібен дозвіл ALTER на столі.

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

Правила

  1. Іноземні ключі не застосовуються до тимчасових таблиць.
  2. Обмеження зовнішнього ключа не повинно бути пов'язане лише з первинним ключем іншої таблиці, воно також може бути пов'язане з УНІКАЛЬНИМ обмеженням іншої таблиці.
  3. Зарубіжні обмеження КЛЮЧ можуть посилатися на інший стовпець у цій же таблиці. Це називається самонавіюванням.
  4. Зовнішні ключові обмеження можуть посилатися на таблиці в межах однієї бази даних.
  5. Також ми можемо вставити значення NULL у дочірню таблицю.
  6. Коли ми вставляємо інше, ніж значення NULL, в обмеження іноземного ключа, значення повинно існувати у посилається на стовпчик інше повідомлення про порушення.
  7. Значення унікальних батьківських ключів неможливо змінити, якщо правилом оновлення є RESTRICT і є один або кілька залежних рядків. Однак якщо правило оновлення НЕ ДІЄ, унікальні батьківські ключі можуть бути оновлені до тих пір, поки у кожної дитини є батьківський ключ до моменту завершення оператора оновлення.

Приклади

Скажімо, у нас є дві таблиці Клієнти та Замовлення. У таблиці клієнтів є всі дані про клієнтів та таблиця замовлень, що містять дані, пов'язані з замовленнями.

Клієнти

Cust_idПервинний ключ
Ім’я_користувача
Місцезнаходження

Замовлення

Order_idПервинний ключ
Дата замовлення
Кількість
Cust_idЗовнішній ключ
Загальна кількість

У наведеному вище прикладі стовпець Cust_id у таблиці ЗАМОВЛЕННЯ - це зовнішній ключ, що вказує на стовпець Cust_id у таблиці ЗАМОВНИКИ.

Припустимо, ці таблиці мають такі значення

Клієнти

1001ОлексійНАС
1002КеріНАС
1003СидВеликобританія
1004ТомAUS
1005КапільIND

Замовлення

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8110.09.201651002258
8219-08-20161110041900 рік
8330-06-20164510012300
8416-02-201671001890
8501.01.201621002260

Для cust_id 1001 є три замовлення, які існують у таблиці замовлень.

Для cust_id 1003 немає замовлення.

Отже, якщо у батьківській таблиці є конкретні дані (скажіть, ідентифікатор 1003), то ці дані не потрібно мати у дочірній таблиці, а навпаки, це неправда.

Ми не можемо мати будь-яких даних у дочірній таблиці (Таблиця замовлень), яка не існує в батьківській таблиці (Клієнти.)

Наприклад, ми не можемо вставити нове сказування запису для cust_id 1006 у таблицю Замовлень, оскільки cust_id 1006 не існує в таблиці Клієнти.

Нижче наведено приклади, які порушують референтну цілісність цього взаємозв'язку:

  1. Вставлення рядка в таблицю ЗАМОВЛЕННЯ, де Cust_ID не відображається в стовпчику Cust_ID у таблиці ЗАМОВНИКИ.
  2. Видалення рядка з таблиці КЛІЄНТІВ, де Keep_ID рядка, який потрібно видалити, все ще присутній у стовпчику Cust_ID у таблиці ЗАМОВЛЕННЯ.

Коли певний запис видалено з головної таблиці, є два способи збереження цілісності даних у дочірній таблиці. Коли дві таблиці з'єднані із зовнішнім ключем, а певні дані з головної таблиці видаляються, для яких запис існує і в дочірній таблиці, у нас є певний механізм збереження цілісності даних у дочірній таблиці

  • При видаленні каскаду : це видалить запис із дочірньої таблиці, якщо це значення зовнішнього ключа буде видалено з головної таблиці.
  • При видаленні NULL: при цьому всі значення в цьому записі дочірньої таблиці будуть встановлені як NULL, для яких значення зовнішнього ключа буде видалено з головної таблиці.

Висновок - Зовнішній ключ у SQL

Тому доцільно використовувати зовнішній ключ у базі даних, яка має відношення один до одного або один до багатьох. Основна перевага використання обмежень іноземних ключів полягає в тому, що це покращує продуктивність. Розробники можуть легко визначити структуру бази даних. Ми також можемо вивчити, як запит збирає дані.

Рекомендовані статті

Це посібник із іноземного ключа в SQL. Тут ми обговорюємо правила та приклади іноземного ключа в SQL із синтаксисом. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Перегляди SQL
  2. Типи приєднань до SQL Server
  3. Що таке PL / SQL?
  4. Обмеження SQL-сервера
  5. Топ 6 типів приєднань до MySQL з прикладами