Может ли столбец с ограничением FOREIGN KEY содержать повторяющиеся значения?

«Может ли столбец с ограничением FOREIGN KEY содержать повторяющиеся значения?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, может. Ограничение FOREIGN KEY обеспечивает ссылочную целостность, но не требует уникальности значений в столбце. Его основная задача — гарантировать, что каждое значение в этом столбце существует в связанном первичном (PRIMARY KEY) или уникальном (UNIQUE) ключе родительской таблицы.

Почему это допустимо? Это отражает отношения "один ко многим". Например, один клиент может иметь множество заказов.

Пример (SQL):

-- Родительская таблица
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);

-- Дочерняя таблица
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- В таблице `orders` множество строк могут иметь одинаковый `customer_id`.

Ключевой момент: FOREIGN KEY ограничивает допустимые значения, но не их количество.