Первинний ключ проти зовнішнього ключа SQL, пояснюється прикладами синтаксису MySQL

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

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

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

Приклад використання

У цьому посібнику ми детальніше розглянемо таблиці учнів (батьків) та учнів (дітей).

Первинний ключ батьківської таблиці

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

SHOW index FROM student; 
+---------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +---------+------------+----------+--------------+-------------+ | student | 0 | PRIMARY | 1 | studentID | +---------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 

Первинний та зовнішній ключі дочірньої таблиці

У таблиці контактних даних студента є один основний ключ, який також є ідентифікатором студента. Це пов’язано з тим, що між двома таблицями існує взаємозв’язок «один на один». Іншими словами, ми розраховуємо лише на одного студента та один контактний запис студента на одного студента.

SHOW index FROM `student-contact-info`; 
+----------------------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +----------------------+------------+----------+--------------+-------------+ | student-contact-info | 0 | PRIMARY | 1 | studentID | +----------------------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 
SELECT concat(table_name, '.', column_name) AS 'foreign key', concat(referenced_table_name, '.', referenced_column_name) AS 'references' FROM information_schema.key_column_usage WHERE referenced_table_name IS NOT NULL AND table_schema = 'fcc_sql_guides_database' AND table_name = 'student-contact-info'; 
+--------------------------------+-------------------+ | foreign key | references | +--------------------------------+-------------------+ | student-contact-info.studentID | student.studentID | +--------------------------------+-------------------+ 1 row in set (0.00 sec) 

Приклад звіту з використанням батьківської таблиці студента та таблиці дочірніх контактів

SELECT a.studentID, a.FullName, a.programOfStudy, b.`student-phone-cell`, b.`student-US-zipcode` FROM student AS a JOIN `student-contact-info` AS b ON a.studentID = b.studentID; 
+-----------+------------------------+------------------+--------------------+--------------------+ | studentID | FullName | programOfStudy | student-phone-cell | student-US-zipcode | +-----------+------------------------+------------------+--------------------+--------------------+ | 1 | Monique Davis | Literature | 555-555-5551 | 97111 | | 2 | Teri Gutierrez | Programming | 555-555-5552 | 97112 | | 3 | Spencer Pautier | Programming | 555-555-5553 | 97113 | | 4 | Louis Ramsey | Programming | 555-555-5554 | 97114 | | 5 | Alvin Greene | Programming | 555-555-5555 | 97115 | | 6 | Sophie Freeman | Programming | 555-555-5556 | 97116 | | 7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557 | 97117 | | 8 | Donald D. Chamberlin | Computer Science | 555-555-5558 | 97118 | +-----------+------------------------+------------------+--------------------+--------------------+ 

Висновок

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

Як і у всіх цих речах SQL, для них існує НАБАГАТО БІЛЬШО, ніж те, що є в цьому вступному посібнику.

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

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