Перейти к основному содержимому

Реляционная модель данных

Разработчику Аналитику Архитектору

Математические основы

Реляционная модель описывает данные как отношения — множества кортежей с одинаковой структурой. В СУБД отношение материализуется таблицей.

Фундаментальные понятия

  • Домен — множество допустимых значений атрибута с заданным типом и семантикой (например, возраст: целые числа от 0 до 150).
  • Атрибут — именованная характеристика кортежа, связанная с доменом. Имя уникально в пределах отношения.
  • Кортеж — набор значений атрибутов; в таблице представлен строкой.
  • Отношение — множество кортежей одной структуры; в таблице — набор строк с общим заголовком столбцов.

Свойства отношений

СвойствоСмысл
Нет дубликатов кортежейОтношение — множество, не мультимножество
Нет порядка строкПозиция строки не несёт смысла
Нет порядка столбцовСтолбец идентифицируется именем, не позицией
Атомарность значенийКаждая ячейка — одно значение домена (связь с 1НФ)

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

  • Сущностная целостность — первичный ключ не содержит NULL и однозначно идентифицирует кортеж.
  • Ссылочная целостность — внешний ключ ссылается на существующий первичный ключ родительской таблицы или равен NULL (если это разрешено).
  • Доменная целостность — значение соответствует типу и диапазону столбца.
  • Пользовательские правилаCHECK, триггеры, бизнес-логика на уровне БД.

Подробнее о синтаксисе ограничений: Ограничения целостности в SQL.


Пример проектирования: библиотека

Исходные требования: книги (ISBN, название, год), авторы (многие ко многим с книгами), выдачи читателям.

Сущности и ключи

-- Книга
CREATE TABLE books (
isbn VARCHAR(17) PRIMARY KEY,
title TEXT NOT NULL,
year_published SMALLINT
);

-- Автор
CREATE TABLE authors (
author_id SERIAL PRIMARY KEY,
full_name TEXT NOT NULL
);

-- Связь M:N книга ↔ автор
CREATE TABLE book_authors (
isbn VARCHAR(17) NOT NULL REFERENCES books(isbn),
author_id INT NOT NULL REFERENCES authors(author_id),
PRIMARY KEY (isbn, author_id)
);

-- Читатель
CREATE TABLE readers (
card_number VARCHAR(10) PRIMARY KEY,
full_name TEXT NOT NULL,
registered_at DATE NOT NULL DEFAULT CURRENT_DATE
);

-- Выдача (1:N читатель → выдачи)
CREATE TABLE loans (
loan_id SERIAL PRIMARY KEY,
card_number VARCHAR(10) NOT NULL REFERENCES readers(card_number),
isbn VARCHAR(17) NOT NULL REFERENCES books(isbn),
loan_date DATE NOT NULL DEFAULT CURRENT_DATE,
return_date DATE
);

Декомпозиция связи «многие-ко-многим» через таблицу book_authors — стандартный приём реляционного проектирования.


Контрольные вопросы

  1. Почему отношение не допускает дублирующих кортежей, а таблица в Excel — допускает?
  2. Как отсутствие внутреннего порядка атрибутов влияет на формулировку SQL-запросов?
  3. Почему внешний ключ может быть NULL, а первичный — нет?
  4. Как атомарность значений связана с первой нормальной формой?

См. также


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).