Один внешний ключ может указывать только одну строку на другую строку, что не может выражать «многие строки относятся ко многим строкам». Для связи «многие-ко-многим» требуется отдельная соединительная/ассоциативная таблица (например, enrollments(student_id, course_id)), составным первичным ключом которой является пара внешних ключей.
Пример
BEGIN;
INSERT INTO orders (id, customer_id) VALUES (1, 42);
SAVEPOINT before_risky_step;
UPDATE inventory SET stock = stock -1WHERE product_id =999; -- fails: constraint violationROLLBACKTOSAVEPOINT before_risky_step; -- undoes only the failed stepCOMMIT; -- the order insert is still committed
Итог
Один внешний ключ может указывать только одну строку на другую строку, что не может выражать «многие строки относятся ко многим строкам». Для связи «многие-ко-многим» требуется отдельная таблица соединений/ассоциативных связей (например,
Как ER-диаграмма представляет связь «многие ко многим» и почему про… · Sobeso