Зачем нужны связи (relations) между таблицами в реляционной базе данных?

«Зачем нужны связи (relations) между таблицами в реляционной базе данных?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Связи (отношения) между таблицами — фундаментальный принцип реляционных БД, обеспечивающий целостность данных и устранение избыточности.

Основные цели:

  1. Нормализация данных: Исключение дублирования информации (например, хранение имени пользователя только в таблице users, а не в каждой записи заказа).
  2. Обеспечение ссылочной целостности (Referential Integrity): Гарантия, что внешние ключи ссылаются на существующие записи. Нельзя создать заказ для несуществующего пользователя.
  3. Упрощение сложных запросов: Возможность объединения данных из нескольких таблиц с помощью оператора JOIN.

Пример схемы "один-ко-многим" (пользователь → заказы):

-- Таблица-родитель
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

-- Таблица-потомок с внешним ключом
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT NOT NULL,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
        ON DELETE CASCADE -- Опционально: автоматическое удаление заказов при удалении пользователя
);

Типы связей:

  • Один-ко-многим (One-to-Many): Наиболее частый случай (как в примере выше).
  • Один-к-одному (One-to-One): Для разделения редко используемых или конфиденциальных данных.
  • Многие-ко-многим (Many-to-Many): Реализуется через связующую таблицу (junction table).

Без связей база данных превращается в набор несвязанных таблиц, что ведет к аномалиям данных, сложностям в обновлении и риску несогласованности.