Ответ
Эти ключи служат разным, но взаимосвязанным целям в реляционной модели данных.
Первичный ключ (PRIMARY KEY) — это столбец (или группа столбцов), который однозначно идентифицирует каждую строку в своей таблице.
Свойства:
- Уникальность: Значение должно быть уникальным для каждой записи.
- NOT NULL: Не может содержать
NULL. - Один на таблицу: В таблице может быть только один PRIMARY KEY.
- Индекс: Создает кластеризованный (чаще всего) или некластеризованный индекс для быстрого поиска.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- Первичный ключ
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(100)
);
Внешний ключ (FOREIGN KEY) — это столбец (или группа столбцов) в одной таблице, который ссылается на PRIMARY KEY (или UNIQUE ключ) в другой таблице. Он устанавливает и поддерживает связь между таблицами.
Свойства:
- Ссылочная целостность: Гарантирует, что значение во внешнем ключе соответствует существующей записи в связанной (родительской) таблице.
- Может быть NULL: Если связь необязательна.
- Несколько на таблицу: В таблице может быть много FOREIGN KEY.
- Ограничения (CONSTRAINTS): Определяют поведение при удалении или обновлении родительской записи (
ON DELETE CASCADE,ON UPDATE SET NULLи т.д.).
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT, -- Этот столбец будет внешним ключом
total DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id) -- Связь с таблицей users
ON DELETE CASCADE -- При удалении пользователя удалятся его заказы
);
Итог: PRIMARY KEY обеспечивает уникальность внутри таблицы, а FOREIGN KEY — целостность связей между таблицами.