Вступ до іноземного ключа в 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)
Правила
- Іноземні ключі не застосовуються до тимчасових таблиць.
- Обмеження зовнішнього ключа не повинно бути пов'язане лише з первинним ключем іншої таблиці, воно також може бути пов'язане з УНІКАЛЬНИМ обмеженням іншої таблиці.
- Зарубіжні обмеження КЛЮЧ можуть посилатися на інший стовпець у цій же таблиці. Це називається самонавіюванням.
- Зовнішні ключові обмеження можуть посилатися на таблиці в межах однієї бази даних.
- Також ми можемо вставити значення NULL у дочірню таблицю.
- Коли ми вставляємо інше, ніж значення NULL, в обмеження іноземного ключа, значення повинно існувати у посилається на стовпчик інше повідомлення про порушення.
- Значення унікальних батьківських ключів неможливо змінити, якщо правилом оновлення є RESTRICT і є один або кілька залежних рядків. Однак якщо правило оновлення НЕ ДІЄ, унікальні батьківські ключі можуть бути оновлені до тих пір, поки у кожної дитини є батьківський ключ до моменту завершення оператора оновлення.
Приклади
Скажімо, у нас є дві таблиці Клієнти та Замовлення. У таблиці клієнтів є всі дані про клієнтів та таблиця замовлень, що містять дані, пов'язані з замовленнями.
Клієнти
Cust_id | Первинний ключ |
Ім’я_користувача | |
Місцезнаходження |
Замовлення
Order_id | Первинний ключ |
Дата замовлення | |
Кількість | |
Cust_id | Зовнішній ключ |
Загальна кількість |
У наведеному вище прикладі стовпець Cust_id у таблиці ЗАМОВЛЕННЯ - це зовнішній ключ, що вказує на стовпець Cust_id у таблиці ЗАМОВНИКИ.
Припустимо, ці таблиці мають такі значення
Клієнти
1001 | Олексій | НАС |
1002 | Кері | НАС |
1003 | Сид | Великобританія |
1004 | Том | AUS |
1005 | Капіль | IND |
Замовлення
78 | 20-10-2018 | 5 | 1002 | 1200 |
79 | 12-10-2017 | 4 | 1001 | 800 |
80 | 20-11-2016 | 2 | 1005 | 369 |
81 | 10.09.2016 | 5 | 1002 | 258 |
82 | 19-08-2016 | 11 | 1004 | 1900 рік |
83 | 30-06-2016 | 45 | 1001 | 2300 |
84 | 16-02-2016 | 7 | 1001 | 890 |
85 | 01.01.2016 | 2 | 1002 | 260 |
Для cust_id 1001 є три замовлення, які існують у таблиці замовлень.
Для cust_id 1003 немає замовлення.
Отже, якщо у батьківській таблиці є конкретні дані (скажіть, ідентифікатор 1003), то ці дані не потрібно мати у дочірній таблиці, а навпаки, це неправда.
Ми не можемо мати будь-яких даних у дочірній таблиці (Таблиця замовлень), яка не існує в батьківській таблиці (Клієнти.)
Наприклад, ми не можемо вставити нове сказування запису для cust_id 1006 у таблицю Замовлень, оскільки cust_id 1006 не існує в таблиці Клієнти.
Нижче наведено приклади, які порушують референтну цілісність цього взаємозв'язку:
- Вставлення рядка в таблицю ЗАМОВЛЕННЯ, де Cust_ID не відображається в стовпчику Cust_ID у таблиці ЗАМОВНИКИ.
- Видалення рядка з таблиці КЛІЄНТІВ, де Keep_ID рядка, який потрібно видалити, все ще присутній у стовпчику Cust_ID у таблиці ЗАМОВЛЕННЯ.
Коли певний запис видалено з головної таблиці, є два способи збереження цілісності даних у дочірній таблиці. Коли дві таблиці з'єднані із зовнішнім ключем, а певні дані з головної таблиці видаляються, для яких запис існує і в дочірній таблиці, у нас є певний механізм збереження цілісності даних у дочірній таблиці
- При видаленні каскаду : це видалить запис із дочірньої таблиці, якщо це значення зовнішнього ключа буде видалено з головної таблиці.
- При видаленні NULL: при цьому всі значення в цьому записі дочірньої таблиці будуть встановлені як NULL, для яких значення зовнішнього ключа буде видалено з головної таблиці.
Висновок - Зовнішній ключ у SQL
Тому доцільно використовувати зовнішній ключ у базі даних, яка має відношення один до одного або один до багатьох. Основна перевага використання обмежень іноземних ключів полягає в тому, що це покращує продуктивність. Розробники можуть легко визначити структуру бази даних. Ми також можемо вивчити, як запит збирає дані.
Рекомендовані статті
Це посібник із іноземного ключа в SQL. Тут ми обговорюємо правила та приклади іноземного ключа в SQL із синтаксисом. Ви також можете переглянути наступні статті, щоб дізнатися більше -
- Перегляди SQL
- Типи приєднань до SQL Server
- Що таке PL / SQL?
- Обмеження SQL-сервера
- Топ 6 типів приєднань до MySQL з прикладами