Что такое отношение (реляция) в реляционной базе данных? Приведите пример.

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

Ответ

В реляционной модели данных отношение (relation) — это фундаментальное понятие, которое на физическом уровне реализуется как таблица. Это набор кортежей (строк) с одинаковой структурой.

Ключевые компоненты отношения:

  • Заголовок (Схема): Фиксированный набор атрибутов (столбцов) с именами и типами данных.
  • Тело: Множество кортежей (строк), соответствующих схеме. Каждый кортеж представляет собой факт.

Пример отношения Employees:

-- Схема (заголовок) отношения
CREATE TABLE Employees (
    employee_id INT PRIMARY KEY,      -- Атрибут 1
    first_name VARCHAR(50) NOT NULL,  -- Атрибут 2
    last_name VARCHAR(50) NOT NULL,   -- Атрибут 3
    department_id INT,                -- Атрибут 4
    hire_date DATE NOT NULL           -- Атрибут 5
);

Тело отношения (данные):

employee_id (Ключ) first_name last_name department_id hire_date
101 John Doe 5 2022-03-15
102 Jane Smith 3 2021-07-22
103 Alice Johnson 5 2023-01-10

Важные свойства реляций:

  1. Отсутствие упорядоченности строк: Нет встроенной очередности, порядок задается при выборке (ORDER BY).
  2. Уникальность кортежей: Все строки в таблице должны быть уникальны (обеспечивается ключами).
  3. Атомарность значений: Значение в каждом пересечении строки и столбца атомарно (неразложимо), не содержит множеств или других отношений.
  4. Связи между отношениями: Отношения связываются через внешние ключи (foreign keys), что и создает "реляционность".
    -- Отношение Departments связано с Employees через department_id
    CREATE TABLE Departments (
        department_id INT PRIMARY KEY,
        department_name VARCHAR(100)
    );
    -- department_id в Employees ссылается на Departments
    ALTER TABLE Employees 
    ADD CONSTRAINT fk_dept 
    FOREIGN KEY (department_id) REFERENCES Departments(department_id);

Таким образом, база данных — это набор взаимосвязанных отношений (таблиц).