Проверяет понимание возможности составных внешних ключей в реляционных базах данных и их практического применения.
Внешний ключ (foreign key) — это механизм обеспечения ссылочной целостности в реляционных базах данных. Обычно он представляет собой один столбец, ссылающийся на первичный ключ другой таблицы. Однако в реальных проектах часто встречаются ситуации, когда первичный ключ родительской таблицы состоит из нескольких столбцов (составной первичный ключ). В таких случаях внешний ключ также должен быть составным, чтобы корректно ссылаться на все компоненты первичного ключа.
Представьте таблицу orders с составным первичным ключом (customer_id, order_date). Если вы хотите создать таблицу order_items, которая ссылается на конкретный заказ, вам потребуется внешний ключ, состоящий из тех же двух столбцов. Это гарантирует, что каждая позиция заказа будет привязана к существующему заказу.
CREATE TABLE orders (
customer_id INT,
order_date DATE,
PRIMARY KEY (customer_id, order_date)
);
CREATE TABLE order_items (
item_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
product_name VARCHAR(100),
FOREIGN KEY (customer_id, order_date) REFERENCES orders(customer_id, order_date)
);Составные внешние ключи часто используются в системах с нормализованной схемой данных, где сущности идентифицируются несколькими атрибутами. Например, в системах учёта, где заказ определяется клиентом и датой, или в журналах событий, где событие уникально по устройству и времени.
Составной внешний ключ — это стандартный инструмент реляционных баз данных, который необходим для поддержания целостности при составных первичных ключах. Его использование оправдано, когда бизнес-логика требует уникальной идентификации записи по нескольким полям. Понимание этой концепции важно для проектирования корректных схем баз данных и избежания ошибок при связывании таблиц.