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

Дарья Матвеева · May 16, 2024

В этой статье – обзор главы 1 книги “Sql и реляционная теория” Дж. Дейта.

Что такое реляционная модель и зачем она нужна разработчику?

При изучении sql реляционная модель обычно упоминается мимоходом, а основной упор делается на изучение языка sql, или даже какого-то его диалекта, например для oracle. Между тем, SQL и реляционная теория - не одно и то же, а профессионал в области баз данных должен знать реляционную теорию, т.к. вся область знания об управлении базами данных построена на ней. Разработчик может использовать БД разных вендоров, различные диалекты, но базовые принципы всегда останутся те же самые.

Чтобы запросы на sql были понятными, нужно писать их так, чтобы не нарушались реляционные принципы. Иногда бывает необходимо отступить от этих принципов, чтобы увеличить эффективность запроса, например, задействовать индекс. В таком случае, разрабочик должен:

  • понимать, по какой причине это делается
  • какое решение будет правильным с точки зрения теории
  • документировать эти причины, чтобы в будущем была возможность вернуться к теоретически более правильному решению, если причины отпадут (например в будущей версии выйдет более удачная реализация какой-то функции)

Обзор реляционной модели

В 1969 Э.Ф. Кодд определил реляционную модель и сформулировал, как применить математику для определения строгих принципов в основании знания об управлении базами данных.

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

  • Структурные свойства
  • Целостность
  • Средства манипулирования

Формальная терминология

Привычные обозначения используемые в SQL – “таблица” “строка” “столбец” – с точки зрения реляционной теории не совсем верные. Корректно - это термины “отношение”, “кортеж”, “атрибут”. Отношение != таблица, кортеж != строка, атрибут != столбец.

Структурные свойства

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

Отношения принято обозначать на бумаге в виде таблиц. Но строго говоря, таблица в SQL и отношение - это не одно и то же. Если сопоставлять отношение с таблицей, то столбцы будут соответствовать атрибутам отношения, а строки – кортежам.

Отношение состоит из заголовка и тела. Заголовок - это множество атрибутов отношения, а точнее пар “имя атрибута / тип атрибута”. Тело - это множество кортежей отношения.

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

Отношения никогда не содержат кортежей-дубликатов.

Т.к. в математике множество - это набор неупорядоченных и неповторяющихся элементов. Очевидно, что таблица в SQL может иметь повторяющиеся кортежи (строки) поэтому в общем случае таблица и не является отношением.

Кортежи отношения не упорядочены.

Аналогично, атрибуты отношения не упорядочены.

Отношения всегда нормализованы (находятся в первой нормальной форме).

Реляционная теория поддерживает также различные виды ключей. Каждая таблица содержит по крайней мере один потенциальный ключ. Потенциальный ключ – это уникальный идентификатор – атрибут или комбинация атрибутов, значения которых различны для всех кортежей.

Первичный ключ - это некий особенный потенциальный ключ. Если потенциальный ключ в отношении один, то он и будет первичным. Если их несколько, первичный может быть выбран произвольным образом. Но для реляционной теории в основном имеют значения потенциальные ключи, а не первичные.

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

Свойства целостности

Ограничение целостности - это некоторое булево выражение, которое всегда должно быть равно TRUE. Например, для если у нас в отношении есть атрибут - возраст, он должен быть больше нуля.

Оригинальная реляционная модель включает два ограничения целостности, одно касается первичных ключей, второе внешних.

Правило целостности сущностей – атрибуты, входящие в состав первичного ключа, не могут быть null.

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

Средства манипулирования

Этот раздел модели состоит из 2-х частей:

  • реляционная алгебра (реляционное исчисление)
  • оператор реляционного присваивания

Оператор реляционного присваивания – позволяет присвоить значение реляционного выражения какому-то отношению.

Реляционная алгебра состоит из операторов, которые позволяют порождать новые отношения из базовых.

Каждый оператор принимает одно или несколько отношений и возвращает новое отношение. Результат одной операции можно подать на вход другой.

  • ограничение – возвращает кортежи отношения, которые удовлетворяют заданному условию
  • проекция – возвращает отношение, которое содержит все подкортежи, которые остались после исключения из него некоторых атрибутов
  • произведение (декартово произведение) - возвращает отношение, содержащее кортежи, которые являются всеми возможными комбинациями кортежей из исходных отношений
  • пересечение – возвращает отношение, содержащее кортежи, которые входят одновременно в оба заданных отношения
  • объединение – возвращает отношение, содержащее все кортежи, которые входят и в первое, и во второе отношения
  • разность – возвращает отношение, содержащее кортежи, которые принадлежат первому отношению, но не принадлежат второму
  • соединение – возвращает отношение, содержащее все возможные кортежи, которые представляют собой комбинацию кортежей из первого и второго отношений, при условии, что в этих кортежах присутствуют одинаковые значения для одного или несколько заданных атрибутов, общих для обоих отношений.

VK, Telegram