Ответ
Ответ зависит от того, на какой столбец ссылается внешний ключ.
1. Если FOREIGN KEY ссылается на PRIMARY KEY или UNIQUE столбец
Дублирование значений ВОЗМОЖНО. Внешний ключ требует, чтобы каждое значение в его столбце существовало в целевом столбце (REFERENCES), но не требует уникальности у себя.
CREATE TABLE Departments (
id INT PRIMARY KEY, -- Уникальные значения
name VARCHAR(100)
);
CREATE TABLE Employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id) REFERENCES Departments(id)
);
-- В Employees.department_id могут быть дубли: многие сотрудники в одном отделе.
INSERT INTO Employees VALUES (1, 'Alice', 10), (2, 'Bob', 10); -- ОК
2. Если FOREIGN KEY ссылается на столбец БЕЗ ограничения UNIQUE
Такая ситуация в стандартном SQL невозможна.
-- НЕВАЛИДНО: Целевой столбец должен иметь ограничение PRIMARY KEY или UNIQUE.
CREATE TABLE TableA (id INT); -- id не UNIQUE
CREATE TABLE TableB (a_id INT, FOREIGN KEY (a_id) REFERENCES TableA(id)); -- ОШИБКА
Итог:
- Внешний ключ гарантирует ссылочную целостность (значение существует в другой таблице), но не уникальность.
- Множество строк в дочерней таблице (
Employees) могут ссылаться на одну и ту же строку в родительской таблице (Departments), создавая отношение «один-ко-многим».