Изменения

Перейти к: навигация, поиск

Цели и средства нормализации

1954 байта добавлено, 19:13, 4 сентября 2022
м
rollbackEdits.php mass rollback
'''Нормализация''' — процесс преобразования отношений реляционной базы данных к виду, отвечающему одной из нормальных форм.
}}
Нормализацию целесообразно понимать следующим образом: она Нормализация помогает спроектировать привести базу данных таким образом, чтобы сделать более логически приемлемыми операции обновления отдельных кортежей, что в противном случае (т.е. когда проект базы данных не нормализован) может оказаться затруднительнымк виду обеспечивающему минимальную логическую избыточность. Эта цель достигается благодаря тому, что в полностью нормализованном проекте предикаты переменных отношения имеют более простой вид.
__TOC__
===Цели===
* Исключение некоторых типов избыточности
* Устранение аномалий
* Разработка проекта базы данных, который является достаточно "качественным" «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения
* Упрощение процедуры применения необходимых ограничений целостности
 
===Следствия===
Полная нормализация приводит к замедлению работы базы так как увеличивается количество увеличению количества логически независимых переменных отношения ⇒ увеличивается количество отдельно хранимых физических файлов, что в свою очередь приводит может привести к появлению большего количества операций ввода-вывода, что и замедляет работуснижению скорости выборки ⇒ к замедлению работы базы данных.
==Средства нормализации==
Для приведения базы данных в нормальную форму будет применяться декомпозиция без потерь. При построении такой декомпозиции используются операции соединения и проекции.
===Проекция===
{{Определение
'''Проекция''' отношения <tex>R</tex> на множество атрибутов <tex>X</tex>: <tex>\pi_X(R) =\{r \cap X|r\in R\}</tex> — это отношение удовлетворяющее свойствам:
* Его заголовок формируется из заголовка отношения <tex>R</tex> путем удаления всех атрибутов, не указанных в множестве <tex>X</tex>
* Тело состоит из всех кортежей <tex>{Х_1 :r_1 , X_2 :r_2, . . . , X_n :r_n }</tex>, таких что в отношении <tex>R</tex> присутствует кортеж со значением <tex>r_1</tex> атрибута <tex>X_1</tex>, <tex>r_2</tex> атрибута <tex>X_2</tex> и т.д.
}}
|id = natural join
|definition =
'''Естественное соединение''' (англ. ''natural join'') отношений <tex>P_1R_1</tex> и <tex>P_2R_2</tex>: <tex>P_1 R_1 P_2 R_2 = \{r_1 ∪ r_2 | r_1 ∈ P_1R_1, r_2 ∈ P_2 R_2 ∧ π_Y(r_1) = π_Y(r_2)\}</tex> — отношение с заголовком <tex>\{X, Y, Z\}</tex> и телом, состоящим из всех таких кортежей <tex>\{Х_i :х_i</tex>, <tex>Y_j :y_j</tex>, . . . , <tex>Z_k :z_k\}</tex>, что любой из этих кортежей присутствует и в отношении <tex>P_1R_1</tex>, со значением <tex>x_i</tex> атрибута <tex>Х_i</tex> и значением <tex>y_j</tex> атрибута <tex>Y_j</tex>, и в отношении <tex>P_2R_2</tex>, со значением <tex>y_i</tex> атрибута <tex>Y_i</tex> и значением <tex>z_k</tex> атрибута <tex>Z_k</tex>.
}}
* Можно понимать как соединение по совпадающим атрибутам
* Коммутативно: <tex>R_1 ⋈ R_2 = R_2 ⋈ R_1</tex>* Ассоциативно: <tex>(R_1 ⋈ R_2) ⋈ R_3 = R_1 ⋈ (R_2 ⋈ R_3)</tex>
[[Файл:Join.png]]
====Пример некорректной декомпозиции====
При обратном соединении полученных отношений исходное отношений не было восстановлено — появились записи, которых не было ⇒ декомпозиция некорректна.
{| class="wikitable"
|-
==Теорема Хита==
Теорема Хита утверждает, что если некоторая декомпозиция выполняется в соответствии с определенной ФЗфункциональной зависимостью, то она будет выполнена без потерь.
{{Теорема
|author=Хит
|statement=
Пусть <tex>R(XYZ) </tex> является отношением, где <tex>X</tex>, <tex>Y </tex> и <tex>Z </tex> — неперескающиеся множества атрибутов. Если <tex>R </tex> удовлетворяет функциональной зависимости <tex>X → Y</tex>, то <tex>R </tex> равно соединению ее его проекций по атрибутам <tex>X</tex>, <tex>Y </tex> и Y<tex>X</tex>, <tex>Z</tex>: <tex>R=\pi_XYpi_{XY}(R)⋈ \pi_XZpi_{XZ}(R)</tex>
|proof=
Докажем равенство в обе стороны: 1. Докажем, что исходное отношение <tex>R</tex> — подмножество соединения проекций. Рассмотрим произвольный кортеж <tex>r</tex> из отношения <tex>R</tex>. Для проекций кортежа <tex>r</tex> на <tex>XY</tex> и <tex>XZ</tex> выполняетя: <tex>π_{XY}(r) ∈ π_{XY}(R), π_{XZ}(r) ∈ π_{XZ}(R)</tex>. Из этого следует, что <tex>r</tex> — подмножество соединения проекций <tex>⇒ ∀ r∈R: r ∈ \subsetpi_{XY}(R)</tex>⋈<tex>\pi_{XZ}(R)</tex>. 2. Докажем, что любой кортеж полученного соединения является кортежем отношения <tex>R</tex>.
Рассмотрим кортеж <tex>∀ r ∈ R: π_{XY}(r) ∈ π_{XY}(Rx, y, z)</tex>, π_{XZ}(r) ∈ π_{XZ}(R) ⇒ r ∈ принадлежащий соединению <tex>π_{XY}(R) ⋈ π_{XZ}(R)</tex>
Для того, чтобы <tex>\supset(x, y, z)</tex> был в соеденении, необходимо, чтобы существовали кортежи <tex>(x, y) ∈ π_{XY}(R)</tex> и <tex>(x, z) ∈ π_{XZ}(R)</tex>
Из <tex>(x, y, z) ∈ π_{XY}(R) ⋈ π_{XZ}(R) </tex> следует, что существует кортеж <tex>(x, y) ∈ π_{XY}, (x', z) ∈ π_{XZ}(R)</tex>для некоторого <tex>Из (x, z) ∈ π_{XZ}(R) ⇒ ∃ y': (x</tex>. Это означает, y', z) ∈ R ⇒ что должен существовать кортеж <tex>(x, y') ∈ π_{XY}(R)</tex> Поскольку <tex>X → Y ⇒ ∃! </tex>, существует единственный <tex>y : (x, y) ∈ π_{XY}(R) ⇒ y = y' ⇒ (x, y, z) ∈ R</tex>
}}
 
Доказательсто первого пункта не опирается на наличие функциональной зависимости ⇒ справедливо следствие:
 
'''Следствие''' Исходное отношение <tex>R</tex> всегда является подмножеством соединения отношений, полученных при декомпозиции.
 
==См. также==
* [[Функциональные зависимости: замыкание, эквивалентность и правила вывода]]
1632
правки

Навигация