EssayAI
Блог
Блог
Математика и алгоритмы

Реляционная модель данных: основные понятия

11 июня 2026Время чтения: 8 минут
#реляционная модель#базы данных#SQL#первичный ключ#нормализация
Реляционная модель данных: основные понятия

Реляционная модель данных - это математически строгий способ организовать информацию в таблицах так, чтобы исключить дублирование, обеспечить целостность и дать возможность делать сложные выборки одним запросом. Придуманная Эдгаром Коддом в 1970 году, она до сих пор лежит в основе большинства промышленных баз данных: PostgreSQL, MySQL, Oracle, SQLite. Чтобы понять, почему JOIN работает именно так и почему NULL - это особое значение, нужно разобраться с первичными понятиями: домен, атрибут, кортеж, отношение, ключ. Ниже - все эти понятия с примерами, а в калькуляторе можно почувствовать, как быстро растёт мощность декартова произведения при добавлении атрибутов.

Домен: множество допустимых значений

Домен - это именованное множество атомарных (неделимых) значений одного типа. Понятие «атомарный» здесь ключевое: значение в ячейке таблицы не должно само по себе быть списком или структурой - иначе первая нормальная форма нарушается.

Примеры доменов:

  • Возраст - целые числа от 0 до 150;
  • ФИО - непустые строки длиной до 200 символов;
  • Статус_заказа - перечисление: {новый, оплачен, отправлен, закрыт};
  • Дата_рождения - даты в диапазоне от 1900-01-01 до сегодня.

Формально домен DD - это набор значений {v1,v2,,vk}\{v_1, v_2, \ldots, v_k\}, а мощность домена D=k|D| = k - это количество различных значений, которые может принимать атрибут. Чем больше D|D|, тем больше потенциальных кортежей может существовать в отношении.

Схема: три домена (Имя, Возраст, Город) перебирают свои значения, декартово произведение разрастается - каждая новая строка это один кортеж. Реальное отношение - лишь малая часть всех возможных комбинаций

Атрибут, кортеж и схема отношения

Атрибут - это именованный столбец таблицы, значения которого берутся из конкретного домена. Атрибут AiA_i определяет тип данных через пару (имя,домен)(имя, домен). Один и тот же домен может использоваться несколькими атрибутами: например, атрибуты Город_проживания и Город_рождения оба берутся из домена Город, но это два разных атрибута.

Схема отношения R(A1,A2,,An)R(A_1, A_2, \ldots, A_n) - это заголовок таблицы: упорядоченный список атрибутов с их доменами. Число атрибутов nn называется степенью отношения (degree или arity). Отношение степени 1 - унарное, степени 2 - бинарное, и так далее.

Кортеж (tuple) - одна строка данных, соответствующая схеме: конкретный набор значений t=(v1,v2,,vn)t = (v_1, v_2, \ldots, v_n), где каждое viv_i принадлежит домену DiD_i атрибута AiA_i.

Отношение r(R)r(R) - это конечное множество кортежей, удовлетворяющих схеме RR. Именно множество - поэтому в отношении не бывает двух одинаковых кортежей и порядок строк не определён. Мощность отношения (cardinality) - это текущее число кортежей r|r|.

Структура отношения: схема (заголовок) из доменов и атрибутов, тело из кортежей, ключ подсвечен
Структура отношения: схема (заголовок) из доменов и атрибутов, тело из кортежей, ключ подсвечен

Декартово произведение и его мощность

Множество всех теоретически возможных кортежей длиной nn - это декартово произведение доменов:

D1×D2××Dn={(v1,v2,,vn)viDi}.D_1 \times D_2 \times \cdots \times D_n = \{(v_1, v_2, \ldots, v_n) \mid v_i \in D_i\}.

Его мощность:

D1×D2××Dn=D1D2Dn.|D_1 \times D_2 \times \cdots \times D_n| = |D_1| \cdot |D_2| \cdots |D_n|.

Если все домены одинаковы по мощности D|D|, то потенциал равен Dn|D|^n. При D=10|D| = 10 и n=5n = 5 получаем уже 100 000 возможных строк; при n=8n = 8 - сто миллионов. Реальное отношение - лишь подмножество этого произведения, которое удовлетворяет бизнес-правилам (ограничениям целостности).

Ключи: первичный, суперключ и кандидат

Суперключ - любое подмножество атрибутов, значения которого однозначно идентифицируют кортеж в отношении. Суперключом является, например, вся схема целиком: два кортежа в отношении не совпадают, значит, их совокупность атрибутов точно уникальна.

Ключ-кандидат (candidate key) - минимальный суперключ: если убрать хотя бы один атрибут из него, уникальность нарушится. В таблице СТУДЕНТ(Номер_зачётки, ФИО, Email, Группа) кандидатами могут быть Номер_зачётки и Email по отдельности - оба уникальны и неделимы в этой роли.

Первичный ключ (primary key, PK) - один из кандидатов, выбранный администратором базы данных как основной идентификатор. По стандарту SQL он обязан быть NOT NULL и уникальным. Остальные кандидаты становятся альтернативными ключами (UNIQUE в SQL).

Внешний ключ (foreign key, FK) - атрибут или набор атрибутов в одной таблице, ссылающийся на первичный ключ другой. Именно внешние ключи реализуют связи между отношениями и обеспечивают ссылочную целостность: нельзя добавить заказ с несуществующим клиентом.

Реляционная алгебра: операции над отношениями

Эдгар Кодд предложил реляционную алгебру как замкнутое множество операций: результат каждой операции - снова отношение. Базовые операции:

  • Выборка (selection, σ\sigma): отбирает кортежи по условию. σвозраст>18(R)\sigma_{\text{возраст} > 18}(R) - аналог WHERE в SQL.
  • Проекция (π\pi): оставляет только указанные атрибуты, удаляя дубли. πФИО, Город(R)\pi_{\text{ФИО, Город}}(R) - аналог SELECT без дублей.
  • Декартово произведение (×\times): комбинирует каждый кортеж первого отношения с каждым кортежем второго.
  • Соединение (join, \bowtie): декартово произведение с условием равенства по общим атрибутам - именно то, что делает JOIN в SQL.
  • Объединение (\cup), пересечение (\cap), разность (-): множественные операции над совместимыми по схеме отношениями.

Реляционная полнота - главная идея: любой запрос, выразимый реляционной алгеброй, можно записать на SQL, и наоборот. Этим обеспечивается декларативность SQL: вы описываете что хотите, а СУБД сама выбирает план выполнения.

Нормальные формы и функциональные зависимости

Функциональная зависимость XYX \to Y означает, что значение набора атрибутов XX однозначно определяет значение YY. Например, Номер_зачётки \to ФИО: зная номер, всегда знаем фамилию.

Нормализация - процесс приведения схемы к нормальным формам, устраняющим аномалии обновления, вставки и удаления:

  • 1НФ: все значения атомарны (нет вложенных списков или структур).
  • 2НФ: 1НФ + каждый неключевой атрибут полностью функционально зависит от первичного ключа (нет частичных зависимостей).
  • 3НФ: 2НФ + нет транзитивных зависимостей: ключXнеключключ \to X \to неключ не допускается.
  • НФБК (Бойса-Кодда): каждая нетривиальная функциональная зависимость - от суперключа.

Пример нарушения 2НФ: таблица ЗАКАЗ(Номер_заказа, Код_товара, Наименование_товара, Количество). Ключ - пара (Номер_заказа, Код_товара), но Наименование_товара зависит только от Код_товара - частичная зависимость. Решение: выделить таблицу ТОВАР(Код_товара, Наименование_товара).

Пошаговое разбиение одной ненормализованной таблицы на 2НФ и 3НФ: стрелки функциональных зависимостей показывают, какие атрибуты выносятся в отдельные отношения

Ограничения целостности

Реляционная модель поддерживает три вида ограничений:

  1. Целостность сущностей: первичный ключ не может содержать NULL. Каждая строка обязана иметь идентификатор.
  2. Ссылочная целостность: значение внешнего ключа либо совпадает со значением первичного ключа родительской таблицы, либо равно NULL (если связь необязательна). Никаких «висячих» ссылок.
  3. Ограничения домена: CHECK-условия и типы данных гарантируют, что в поле возраста не окажется отрицательное число.

NULL в реляционной модели - не ноль и не пустая строка, а маркер отсутствующего или неприменимого значения. Его особенность: любое сравнение с NULL даёт UNKNOWN, а не TRUE или FALSE, что влечёт трёхзначную логику в условиях WHERE.

Частые ошибки

  • Путать мощность и степень. Степень - число атрибутов (столбцов, не меняется при добавлении строк). Мощность - число кортежей (строк, меняется при каждом INSERT/DELETE).
  • Допускать NULL в первичном ключе. По определению PK обязан однозначно идентифицировать строку, а NULL - не значение. Это запрещено стандартом.
  • Смешивать домен и тип данных. Тип данных (VARCHAR(100)) - реализация домена в конкретной СУБД. Домен может дополнительно ограничивать тип: Возраст - это INTEGER с CHECK >= 0 AND <= 150.
  • Считать порядок строк фиксированным. В реляционной модели строки не упорядочены. ORDER BY - инструкция представления, а не свойство отношения.
  • Игнорировать частичные зависимости при составном ключе. Если ключ состоит из двух атрибутов, а неключевой атрибут зависит только от одного из них - это 2НФ-нарушение, которое порождает аномалии при обновлении.

FAQ

Чем отношение отличается от таблицы? Отношение - математический объект: множество кортежей без дублей и порядка. Таблица - физическое представление в СУБД: допускает дублирующиеся строки (без PK), поддерживает порядок строк через физическую запись. Таблица с PRIMARY KEY и без дублей - практически отношение; без этих ограничений - нет.

Почему нельзя хранить список в одной ячейке? Потому что нарушится 1НФ: значения перестанут быть атомарными. Тогда нельзя выбрать один элемент списка в WHERE без разбора строки, а реляционная алгебра теряет замкнутость. Для связи «один ко многим» правильный инструмент - отдельная таблица с внешним ключом.

Как выбрать первичный ключ, если ключей-кандидатов несколько? Предпочитают минимальный, стабильный (не меняется со временем) и простой (один атрибут лучше составного). Если оба кандидата нестабильны (ФИО меняется, Email тоже), вводят суррогатный ключ: автоинкрементное целое число, лишённое бизнес-смысла, но гарантированно уникальное.

Коротко

Реляционная модель строится на трёх понятиях: домен (множество допустимых значений), атрибут (именованный столбец над доменом) и кортеж (строка данных). Отношение - конечное множество кортежей; его степень - число атрибутов, мощность - число строк. Первичный ключ однозначно идентифицирует кортеж, внешний ключ связывает отношения. Нормализация устраняет избыточность через функциональные зависимости. Вся эта система даёт SQL его декларативность: СУБД оптимизирует план запроса, опираясь именно на реляционную алгебру.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также