Цели и средства нормализации — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Теорема Хита)
м (Теорема Хита)
Строка 85: Строка 85:
  
 
Доказательсто не опирается на наличие функциональной зависимости ⇒ мы доказали следствие:
 
Доказательсто не опирается на наличие функциональной зависимости ⇒ мы доказали следствие:
 +
 
'''Следствие''' исходное отношение <tex>R</tex> всегда является подмножеством соединения отношений, полученных при декомпозиции.
 
'''Следствие''' исходное отношение <tex>R</tex> всегда является подмножеством соединения отношений, полученных при декомпозиции.
 +
 
2. Докажем, что любой кортеж полученного соединения является кортежем отношения <tex>R</tex>.
 
2. Докажем, что любой кортеж полученного соединения является кортежем отношения <tex>R</tex>.
  

Версия 16:55, 13 января 2021

Определение:
Нормализация — процесс преобразования отношений реляционной базы данных к виду, отвечающему одной из нормальных форм.

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

Цели

  • Исключение некоторых типов избыточности
  • Устранение аномалий
  • Разработка проекта базы данных, который является достаточно «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения
  • Упрощение процедуры применения необходимых ограничений целостности

Следствия

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

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

Проекция

Определение:
Проекция отношения [math]R[/math] на множество атрибутов [math]X[/math]: [math]\pi_X(R) =\{r \cap X|r\in R\}[/math] — это отношение удовлетворяющее свойствам:
  • Его заголовок формируется из заголовка отношения [math]R[/math] путем удаления всех атрибутов, не указанных в множестве [math]X[/math]
  • Тело состоит из всех кортежей [math]{Х_1:r_1 , X_2:r_2, . . . , X_n:r_n }[/math], таких что в отношении [math]R[/math] присутствует кортеж со значением [math]r_1[/math] атрибута [math]X_1[/math], [math]r_2[/math] атрибута [math]X_2[/math] и т.д.


Projection.png

Соединение

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

Определение:
Естественное соединение (англ. natural join) отношений [math]R_1[/math] и [math]R_2[/math]: [math]R_1 ⋈ R_2 = \{r_1 ∪ r_2 | r_1 ∈ R_1, r_2 ∈ R_2 ∧ π_Y(r_1) = π_Y(r_2)\}[/math] — отношение с заголовком [math]\{X, Y, Z\}[/math] и телом, состоящим из всех таких кортежей [math]\{Х_i:х_i[/math], [math]Y_j:y_j[/math], . . . , [math]Z_k:z_k\}[/math], что любой из этих кортежей присутствует и в отношении [math]R_1[/math], со значением [math]x_i[/math] атрибута [math]Х_i[/math] и значением [math]y_j[/math] атрибута [math]Y_j[/math], и в отношении [math]R_2[/math], со значением [math]y_i[/math] атрибута [math]Y_i[/math] и значением [math]z_k[/math] атрибута [math]Z_k[/math].
  • Можно понимать как соединение по совпадающим атрибутам
  • Коммутативно: [math]R_1 ⋈ R_2 = R_2 ⋈ R_1[/math]
  • Ассоциативно: [math](R_1 ⋈ R_2) ⋈ R_3 = R_1 ⋈ (R_2 ⋈ R_3)[/math]

Join.png

Декомпозиция

Процедура нормализации предусматривает разбиение, или декомпозицию, данной переменной отношения на другие переменные отношения, причем декомпозиция должна быть обратимой, т.е. выполняться без потерь информации, то есть, соединение отношений, полученных при декомпозиции множества, должно давать исходное отношение Декомпозиция отношения [math]R[/math] на множества атрибутов [math]A[/math] и [math]B[/math]: [math]R(A, B) = \pi_A(R) ⋈ \pi_B(R)[/math]

Decomposition.png

Пример корректной декомпозиции

Проекции на CId Phone и Lecturer Phone Соединение CId Lecturer и Lecturer Phone
Decomposition Example 1 1.png Decomposition Example 1 2.png

Пример некорректной декомпозиции

При обратном соединении полученных отношений исходное отношений не было восстановлено — появились записи, которых не было ⇒ декомпозиция некорректна.

Проекции на CId Phone и Lecturer Phone Соединение CId Phone и Lecturer Phone
Decomposition Example 2 1.png Decomposition Example 2 2.png

Теорема Хита

Теорема Хита утверждает, что если некоторая декомпозиция выполняется в соответствии с определенной функциональной зависимостью, то она будет выполнена без потерь.

Теорема (Хит):
Пусть [math]R(XYZ)[/math] является отношением, где [math]X[/math], [math]Y[/math] и [math]Z[/math] — неперескающиеся множества атрибутов. Если [math]R[/math] удовлетворяет функциональной зависимости [math]X → Y[/math], то [math]R[/math] равно соединению его проекций по атрибутам [math]X[/math], [math]Y[/math] и [math]X[/math], [math]Z[/math]: [math]R=\pi_{XY}(R)⋈ \pi_{XZ}(R)[/math]
Доказательство:
[math]\triangleright[/math]

Докажем равенство в обе стороны:

1. Докажем, что исходное отношение [math]R[/math] — подмножество соединения проекций.

Рассмотрим произвольный кортеж [math]r[/math] из отношения [math]R[/math].

Для проекций кортежа [math]r[/math] на [math]XY[/math] и [math]XZ[/math] выполняетя: [math]π_{XY}(r) ∈ π_{XY}(R), π_{XZ}(r) ∈ π_{XZ}(R)[/math].

Из этого следует, что [math]r[/math] — подмножество соединения проекций [math]⇒ ∀ r∈R: r ∈ \pi_{XY}(R)[/math][math]\pi_{XZ}(R)[/math].

Доказательсто не опирается на наличие функциональной зависимости ⇒ мы доказали следствие:

Следствие исходное отношение [math]R[/math] всегда является подмножеством соединения отношений, полученных при декомпозиции.

2. Докажем, что любой кортеж полученного соединения является кортежем отношения [math]R[/math].

Рассмотрим кортеж [math](x, y, z)[/math], принадлежащий соединению [math]π_{XY}(R) ⋈ π_{XZ}(R)[/math]

Для того, чтобы [math](x, y, z)[/math] был в соеденении, необходимо, чтобы существовали кортежи [math](x, y) ∈ π_{XY}(R)[/math] и [math](x, z) ∈ π_{XZ}(R)[/math]

Из [math](x, z) ∈ π_{XZ}(R)[/math] следует, что существует кортеж [math](x, y', z) ∈ R[/math] для некоторого [math]y'[/math]. Это означает, что должен существовать кортеж [math](x, y') ∈ π_{XY}(R)[/math]

Поскольку [math]X → Y[/math], существует единственный [math]y: (x, y) ∈ π_{XY}(R) ⇒ y = y' ⇒ (x, y, z) ∈ R[/math]
[math]\triangleleft[/math]

См. также

Источники информации