Ответ
Первичный и внешний ключи — это основные механизмы обеспечения целостности данных и создания связей между таблицами в реляционных базах данных.
| Характеристика | Первичный ключ (PRIMARY KEY) | Внешний ключ (FOREIGN KEY) |
|---|---|---|
| Назначение | Уникально идентифицирует каждую запись (строку) в своей таблице. | Устанавливает и поддерживает связь с записью в другой таблице (или иногда в той же). |
| Уникальность | Значение должно быть уникальным в пределах таблицы. Дублирование запрещено. | Значения могут повторяться. Одно значение из родительской таблицы может ссылаться на множество строк в дочерней. |
| Допустимость NULL | Не может содержать значение NULL. |
Может содержать NULL, если связь не обязательна (зависит от бизнес-логики). |
| Количество в таблице | Только один первичный ключ на таблицу (может состоять из нескольких столбцов — составной ключ). | Может быть несколько внешних ключей, ссылающихся на разные таблицы. |
| Обеспечивает | Целостность сущности (Entity Integrity). | Целостность ссылок (Referential Integrity). |
Практический пример в SQL:
-- Таблица-родитель (сущность "Автор")
CREATE TABLE authors (
-- PRIMARY KEY: уникальный идентификатор автора
author_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL
);
-- Таблица-ребёнок (сущность "Книга")
CREATE TABLE books (
-- PRIMARY KEY: уникальный идентификатор книги
book_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
-- FOREIGN KEY: ссылка на автора книги.
-- Значение author_id ДОЛЖНО существовать в таблице authors.
author_id INT,
-- Определение внешнего ключа с именем (good practice)
CONSTRAINT fk_author
FOREIGN KEY (author_id)
REFERENCES authors(author_id)
ON DELETE CASCADE -- Действие при удалении автора: удалить все его книги
);
-- Вставка данных:
INSERT INTO authors (name) VALUES ('Лев Толстой'); -- author_id = 1
-- Корректная вставка: автор существует.
INSERT INTO books (title, author_id) VALUES ('Война и мир', 1);
-- Ошибка нарушения внешнего ключа: автор с id=99 не существует.
INSERT INTO books (title, author_id) VALUES ('Неизвестная книга', 99);
Проще говоря:
- Первичный ключ — это ваш уникальный паспорт в таблице. Он доказывает, что вы — отдельная, уникальная запись.
- Внешний ключ — это ссылка на паспорт другого человека (записи в другой таблице). Он гарантирует, что вы ссылаетесь на реально существующую запись, а не на вымышленную.