В чем разница между Primary Key и Foreign Key?

«В чем разница между Primary Key и Foreign Key?» — вопрос из категории Базы данных и SQL, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Primary Key (Первичный ключ, PK) и Foreign Key (Внешний ключ, FK) — это основные механизмы обеспечения целостности данных в реляционных базах, знание которых критично для тестирования.

Аспект Primary Key (PK) Foreign Key (FK)
Назначение Уникально идентифицирует каждую запись (строку) в своей таблице. Устанавливает связь между записями двух таблиц. Создает ссылку из одной таблицы на другую.
Уникальность Значение должно быть уникальным в рамках таблицы. Повторяющиеся значения недопустимы. Значения могут повторяться. Многие записи в дочерней таблице могут ссылаться на одну запись в родительской.
Обязательность (NOT NULL) Не может быть NULL. Каждая запись должна иметь уникальный идентификатор. Может быть NULL, если связь необязательная. Если связь обязательная, столбец определяется как NOT NULL.
Количество в таблице В таблице может быть только один первичный ключ (хотя он может состоять из нескольких столбцов — составной ключ). В таблице может быть несколько внешних ключей, ссылающихся на разные таблицы.

Пример для тестировщика: Представьте систему заказов:

-- Таблица пользователей (родительская)
CREATE TABLE Users (
    user_id INT PRIMARY KEY, -- PK: уникальный ID пользователя
    username VARCHAR(50) NOT NULL
);

-- Таблица заказов (дочерняя)
CREATE TABLE Orders (
    order_id INT PRIMARY KEY, -- Свой собственный PK
    user_id INT, -- FK: ссылается на PK таблицы Users
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES Users(user_id) -- Определение связи
);

Что важно проверять в тестах:

  1. Целостность при вставке: Нельзя вставить запись в Orders с user_id = 999, если в таблице Users нет записи с user_id = 999. Система должна вернуть ошибку нарушения внешнего ключа.
  2. Целостность при удалении: Что произойдет с заказами (Orders), если удалить пользователя из Users? Варианты: каскадное удаление (CASCADE), запрет удаления (RESTRICT), обнуление ссылки (SET NULL). Поведение должно соответствовать требованиям.
  3. Уникальность PK: Попытка добавить двух пользователей с одинаковым user_id должна завершиться ошибкой. Понимание этих правил помогает проектировать тесты для проверки бизнес-логики, связанной с данными.