Вопрос проверяет понимание фундаментальной концепции проектирования реляционных баз данных — связи «один-ко-многим», которая необходима для корректного структурирования данных и обеспечения целостности.
Связь «один-ко-многим» (1:N) — это краеугольный камень реляционных баз данных, описывающий, как данные в одной таблице соотносятся с данными в другой. Она моделирует ситуации, где один объект владеет или ассоциируется с несколькими другими объектами, но каждый из этих других объектов принадлежит только одному владельцу.
Связь устанавливается через внешний ключ (foreign key). В таблице, которая находится на стороне «многих», создаётся столбец, который хранит значение первичного ключа (primary key) из связанной записи таблицы «одного». Например, в системе блога у одного пользователя может быть много постов.
-- Таблица "один" (Пользователи)
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
-- Таблица "многие" (Посты)
CREATE TABLE posts (
id INT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
user_id INT, -- Внешний ключ, ссылается на users.id
FOREIGN KEY (user_id) REFERENCES users(id)
);Эта связь повсеместна в приложениях:
Чтобы получить все посты конкретного пользователя, используется оператор JOIN:
SELECT users.username, posts.title
FROM users
INNER JOIN posts ON users.id = posts.user_id
WHERE users.id = 5;Вывод: Связь «один-ко-многим» следует применять всегда, когда требуется смоделировать отношения владения или иерархии, где один родительский объект логически содержит несколько дочерних. Это обеспечивает целостность данных, устраняет дублирование и является основой для эффективных запросов.