Реляционная модель данных
Математические основы
Реляционная модель описывает данные как отношения — множества кортежей с одинаковой структурой. В СУБД отношение материализуется таблицей.
Фундаментальные понятия
- Домен — множество допустимых значений атрибута с заданным типом и семантикой (например, возраст: целые числа от 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 — стандартный приём реляционного проектирования.
Контрольные вопросы
- Почему отношение не допускает дублирующих кортежей, а таблица в Excel — допускает?
- Как отсутствие внутреннего порядка атрибутов влияет на формулировку SQL-запросов?
- Почему внешний ключ может быть
NULL, а первичный — нет? - Как атомарность значений связана с первой нормальной формой?
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Вот SQL как раз обеспечивает такую связь и это главное отличие реляционных БД - реляции (relations), что означает связи. Знакомимся с языком - ставим программы, запускаем, выполняем первые запросы. От файлового хранения к реляционной и современной мультимодельной СУБД — термины, причины появления SQL и базовая классификация систем. Функциональные зависимости, нормальные формы 1НФ–3НФ, аномалии обновления и осознанная денормализация при проектировании схемы. Метаданные СУБД через information_schema и pg_catalog — запросы к структуре таблиц, ключей и индексов в PostgreSQL. Логическое и физическое резервное копирование, pg_dump, pg_restore, WAL и восстановление на точку во времени (PITR). Логический порядок выполнения SELECT, проекция, WHERE, DISTINCT, ORDER BY и правила читаемого форматирования запросов. Скалярные и коррелированные подзапросы, EXISTS против IN, особенности NULL и выбор между подзапросом и JOIN. AND, OR, NOT, приоритет операторов, NULL и UNKNOWN, IS NULL, NOT IN и IS DISTINCT FROM в PostgreSQL. MVCC, уровни блокировок таблиц, FOR UPDATE, SKIP LOCKED, взаимоблокировки и диагностика через pg_locks. Учебная схема интернет-магазина для PostgreSQL — DDL и примеры запросов по темам курса SQL. Принципы работы SQL-движка - подключение к СУБД, разбор и выполнение запроса и возврат результата клиенту.SQL - язык структурированных запросов
Первые шаги с SQL
Эволюция систем хранения данных
Нормализация данных
Словарь данных и системные каталоги
Резервное копирование и восстановление PostgreSQL
Оператор SELECT — синтаксис и стиль
Подзапросы, EXISTS и IN
Фильтрация и трёхзначная логика
Блокировки и конкурентный доступ в PostgreSQL
Практикум shop_data
Принципы работы SQL-движка