logo

Зовнішній ключ в СУБД

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

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

Що таке зовнішній ключ

Зовнішній ключ – це той, який використовується для зв’язку двох таблиць разом через первинний ключ. Це означає, що стовпці однієї таблиці вказують на атрибут первинного ключа іншої таблиці. Крім того, це означає, що якщо будь-який атрибут встановлено як атрибут первинного ключа, він працюватиме в іншій таблиці як атрибут зовнішнього ключа. Але слід знати, що зовнішній ключ не має нічого спільного з первинним ключем.

Використання зовнішнього ключа

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

Приклад зовнішнього ключа

Давайте обговоримо приклад, щоб зрозуміти роботу зовнішнього ключа.

ins ключ

Розглянемо дві таблиці студент і відділ мають відповідні атрибути, як показано в наведеній нижче структурі таблиці:

Зовнішній ключ в СУБД
Зовнішній ключ в СУБД

У таблицях один атрибут, як ви бачите, є загальним, тобто Stud_Id , але він має різні ключові обмеження для обох таблиць. У таблиці Student поле Stud_Id є a первинний ключ оскільки він однозначно визначає всі інші поля таблиці Student. З іншого боку, Stud_Id є a зовнішній ключ для таблиці Department, оскільки він діє як атрибут первинного ключа для таблиці Student. Це означає, що і таблиця Student, і таблиця Department пов’язані одна з одною завдяки атрибуту Stud_Id.

На наведеному нижче малюнку ви можете переглянути наступну структуру зв’язку між двома таблицями.

файл csv читає java
Зовнішній ключ в СУБД

Примітка. Посилальна цілісність у СУБД розроблена на основі концепції зовнішнього ключа. Зрозуміло, що первинний ключ — це єдиний існуючий ключ, а зовнішній ключ завжди посилається на первинний ключ у іншій таблиці, у якій таблиця, що містить первинний ключ, відома як таблиця, на яку посилається, або батьківська таблиця для іншої таблиці, яка має зовнішній ключ.

Створення обмеження зовнішнього ключа

На CREATE TABLE

Нижче наведено синтаксис, який допоможе нам навчитися створювати зовнішній ключ у таблиці:

 CREATE TABLE Department ( Dept_name varchar (120) NOT NULL, Stud_Id int, FOREIGN KEY (Stud_Id) REFERENCES Student (Stud_Id) ); 

Отже, таким чином ми можемо встановити зовнішній ключ для таблиці в базі даних MYSQL.

У разі створення зовнішнього ключа для таблиці на сервері SQL або Oracle буде працювати такий синтаксис:

 CREATE TABLE Department ( Dept_name varchar (120) NOT NULL, Stud_Id int FOREIGN KEY REFERENCES Student (Stud_Id) ); 

На ALTER TABLE

Нижче наведено синтаксис для створення обмеження зовнішнього ключа для ALTER TABLE:

char до внутр
 ALTER TABLE Department ADD FOREIGN KEY (Stud_Id) REFERENCES Student (Stud_Id); 

Відкидання зовнішнього ключа

Щоб видалити зовнішній ключ, можна використовувати наведений нижче синтаксис:

 ALTER TABLE Department DROP FOREIGN KEY FK_StudentDepartment; 

Отже, таким чином ми можемо скинути зовнішній ключ за допомогою ALTER TABLE у базі даних MYSQL.

Вказуйте на запам'ятовування

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

Посилальні дії

Є деякі дії, пов’язані з діями, які виконує власник таблиці зовнішнього ключа:

1) Каскад

Коли ми видаляємо рядки в батьківській таблиці (тобто тій, що містить первинний ключ), ті самі стовпці в іншій таблиці (тобто тій, що містить зовнішній ключ) також видаляються. Таким чином, дія відома як Каскад .

Як завантажити відео з youtube vlc

2) Встановіть NULL

Така посилальна дія підтримує посилальну цілісність обох таблиць. Коли ми маніпулюємо/видаляємо посилальний рядок у батьківській/посилається таблиці, у дочірній таблиці (таблиці, що має зовнішній ключ), значення такого посилального рядка встановлюється як NULL. Така виконана референтна дія відома як Встановити NULL .

3) Встановіть DEFAULT

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

4) Обмежити

логічний рядок Java

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

5) Без дій

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

6) Тригери

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