04. Теория проектирования реляционных баз данных. Функциональные зависимости - KattyOG/Database GitHub Wiki
При проектировании базы данных решаются две основные проблемы:
- Каким образом отобразить объекты предметной области в абстрактные объекты модели данных, чтобы это отображение не противоречило семантике предметной области, и было, по возможности, лучшим (эффективным, удобным и т. д.)?
(проблема логического проектирования баз данных) - Как обеспечить эффективность и корректность выполнения запросов к базе данных?
(проблема физического проектирования баз данных)
Отвечает на вопросы: что неплохо сделать, чтобы ваши запросы к базе работали хорошо и правильно.
Данный вид проектирование неразрывно связан с нормализацией, то есть с преобразованием наших объектов к неким формам (к нормальным формам). Эти формы применяются для того, чтобы уменьшить объем хранения данных, но приводит к увеличению времени запросов.
Из лекции от
30.10
понятными словами:
Фактически нормализация связана с разбиением: как из одной большой сущности широкой, на много полей сделать несколько маленьких сущностей, которые будут хранить данные без дублирования. Это позволит сэкономить пространство
Обычно выделяется следующая последовательность нормальных форм:
- первая нормальная форма
- вторая нормальная форма
- третья нормальная форма
- нормальная форма Бойса-Кодда
- четвертая нормальная форма
- пятая нормальная форма, или нормальная форма проекции-соединения
Основные свойства нормальных форм:
- каждая следующая нормальная форма в некотором смысле лучше предыдущей
- при переходе к следующей нормальной форме свойства предыдущих нормальных свойств сохраняются
Процесс проектирования реляционной базы данных на основе метода нормализации преследует две основные цели:
- избежать избыточности хранения данных
- устранить/избежать аномалии
Аномалии бывают трех видов:
- Обновления
- Удаления
- Вставки
Из лекции от
30.10
понятными словами:
Аномалия обновления заключается в обновлении сущности в цикле, например, когда у нас нет бизнес-ключа. Тогда при update-е сущности, может получиться ситуация, что несколько записей в таблице с одинаковым id будут отличаться.
Решение: юзать транзакции: "всё или ничего"
Аномалия удаления заключается в том, что удаление одной строки влечет удаление другой сущности.
Решение: использовать еще одну таблицу.
Аномалия вставки заключается в том, что вставка в одну сущность влечет вставку в другую сущность. Обычно это значение null/null.
Про OLAP и OLTP
OLAP - online analytical processing - системы оперативной аналитической обработки
OLTP - online transaction processing - системы оперативной обработки транзакций
Из лекции от
30.10
понятными словами:
OLTP нацелена на сохранение и накопление данных, транзакции.
OLAP нацелена на упрощение запросов для пользователей.
Особенности OLTP: быстрая вставка, быстрый update, delete. Время select-a увеличивается из-за большого количества таблиц, большого количества join-ов (3-я нормальная форма)
Особенности OLAP: время select-а сведено к минимуму, но эта система денормализованная.
Чтобы построить денормализованную систему, ее нужно сначала нормализовать
Рассмотрим таблицу:
Определение 1:
Пусть R - это отношение, а Х и Y - произвольные подмножества множества атрибутов отношения R. Тогда Y функционально зависимо от Х, что в символическом виде записывается как X -> Y, значит значение множества Х связано в точности с одним значением множества Y.
Из таблицы видим, что
{ Sno } -> { City } // Город функционально зависит от поставщика
{ Sno } - это детерминант, { City } - это зависимая часть
{ Sno, Рno } -> { Qty }
{ Sno, Рno } -> { City }
{ Sno, Рno } -> { City, Qty }
{ Sno, Рno } -> { Sno }
{ Sno, Рno } -> { Sno, Рno, City, Qty }
{ Sno } -> { Qty }
{ Qty } -> { Sno }
Данные зависимости фиксируются в конкретный момент времени, зависимости могут быть нарушены с добавлением данных.
Определение 2:
ФЗ называется тривиальной, только когда y ∈ x, то есть:
{ Sno, Рno } -> { Sno }
Правила Армстронга:
- Правило рефлексивности: B ∈ A => A -> B
- Правило дополнения: (A -> B) => АС -> BC
- Правило транзитивности: (А -> В), (В -> С) => (А -> C)
Расширяющие правила:
- Правило самоопределения: A -> A
- Правило декомпозиции: A -> BC => А -> B, A-> C
- Правило объединения: А -> B, A-> C => A -> BC
- Правило композиции: А -> B, C-> D => AC -> BD
Общая теорема объединения:
(А -> В) и (С -> D) => (А (С – B) -> BD)
Суперключ переменной-отношения R - это множество атрибутов переменной-отношения R, которое содержит в виде подмножества (но не обязательно собственного подмножества), по крайней мере, один потенциальный ключ.
Из этого определения следует, что суперключи для данной переменной-отношения R - это такие подмножества К множества атрибутов переменной-отношения R, что ФЗ (K -> A) истинна для каждого атрибута А переменной-отношения R.
Любой потенциальный ключ есть суперключ, но это не работает наоборот
Потенциальный ключ К - это суперключ с дополнительным свойством: удаление любого атрибута из K приведет к тому, что K перестанет быть суперключом.
Определение 3
Дано 2 множества ФЗ. S1 и S2 эквивалентны, только когда они являются покрытиями друг друга.
Определение 4:
Множество ФЗ является неприводимым, когда:
- Для каждой ФЗ X->Y, Y - один элемент
- Ни одна ФЗ не мб устранена без изменения замыкания
- Ни один элемент/атрибут не может быть удален из детерминанта без изменения замыкания
Определение 5:
Суперключ в схеме отношения R(A1, A2, ... , An) - это набор атрибутов S из R со свойством, что ни для каких двух кортежей t1 и t2 в любом отношении над схемой R не будет выполняться равенство t1[S] = t2[S].
Определение 6:
Атрибут в схеме отношения R называется первичным атрибутом R, если он является членом некоторого потенциального ключа R. Атрибут называется непервичным, если он не является первичным атрибутом, то есть, если он не является членом какого-либо потенциального ключа.