[МУЗЫКА]
[МУЗЫКА] Здравствуйте.
В прошлый раз мы с вами рассмотрели аномалии, которые возможны в плохо
спроектированных отношениях и наметили пути для их улучшения.
Сейчас мы рассмотрим критерии,
которыми мы должны руководствоваться при улучшении наших отношений.
Назовем процесс улучшения нормализацией.
Нормализация связана с нормальными формами.
Мы будем говорить, что каждой нормальной форме, в которых может находиться наше
отношение, есть определенный набор ограничений, и отношение находится
в этой некоторой нормальной форме, если оно всем этим ограничениям удовлетворяет.
Начнем с самой простой, с первой нормальной формы.
Мы говорим, что отношение находится в первой нормальной форме,
если значения его атрибутов не являются множествами или кортежами.
Например, в таблице, если у нас есть один атрибут Фирма,
а другой атрибут, соответствующий адресу, содержит подполя Город,
Улица и Дом, то такое отношение не будет находиться в первой нормальной форме.
Или вспомним нашу таблицу, в которой у нас был номер группы и список всех студентов.
Такое отношение также не находится в первой нормальной форме.
Следующая нормальная форма — вторая.
Для этого вспомним определение первичного атрибута.
Атрибут называется первичным, если он входит в состав любого возможного ключа.
Дадим определение второй нормальной форме.
Отношение находится во второй нормальной форме, если оно находится в
первой нормальной форме, плюс любой атрибут, не являющийся первичным,
полностью зависит от любого его ключа, но не от подмножества ключей.
Например, наша таблица: Фирма, Адрес, Телефон, Товар и Цена.
Мы с вами выявили там следующие зависимости:
что ключом данной таблицы является фирма и товар.
Это набор атрибутов, которые позволяют определить все остальные.
Но также в этом отношении присутствует зависимость,
что Фирма определяет Адрес и Телефон.
Таким образом мы получаем, что у нас есть зависимость от части ключа,
но не полностью от набора ключевых атрибутов.
Таким образом вторая форма в данном случае нарушена.
Для того, чтобы ввести понятие третьей нормальной формы,
нам нужно поговорить о транзитивной зависимости.
Транзитивная зависимость заключается в том, что если у нас есть атрибуты A,
B и C, A функционально определяет B, а B функционально определяет C,
то зависимость из A в C называется транзитивной.
Или говорят, что C транзитивно зависит от A.
Мы говорим, что наше отношение находится в третьей нормальной форме,
если оно находится во второй нормальной форме, и любой атрибут,
не являющийся первичным, не транзитивно зависит от любого возможного ключа.
Можно сказать иначе, может быть, это пояснит картину: что отношение находится в
третьей нормальной форме тогда и только тогда, когда отношение находится во второй
нормальной форме, и все неключевые атрибуты взаимно независимы.
Давайте рассмотрим пример.
Например, таблица, в которой мы храним информацию об адресе,
в ней есть три поля: Город, Индекс и Адрес.
Какие мы можем заметить зависимости в этой таблице?
Мы знаем, что у нас индекс определяет город, то есть, зная индекс,
мы всегда можем определить город, откуда было отправлено, например, письмо.
Или если мы знаем город и адрес,
то мы сможем узнать индекс нашего почтового отделения.
В таком случае у нас есть два возможных набора атрибутов,
которые могут стать ключами.
Это либо город и адрес, либо индекс и адрес.
В таком случае у нас нет зависимостей, которые бы нарушали третью нормальную
форму, и наше отношение в этой третьей нормальной форме находится.
Рассмотрим еще один пример.
Представим, что у нас есть таблица, в которой мы храним информацию о товарах,
которые хранятся в каком-то магазине или универмаге.
Например, в таблице будут столбцы Универмаг, Товар,
Номер отдела и Заведующий.
Какие зависимости мы можем здесь увидеть?
Мы понимаем, что универмаг с товаром определяют номер отдела,
в котором должен продаваться этот товар.
И универмаг с номером отдела определяют заведующего.
Ключом в этом отношении будет являться комбинация атрибутов Универмаг и Товар.
Эта комбинация дает нам возможность определить все остальные атрибуты.
Таким образом мы видим, что у нас заведующий транзитивно зависит от ключа,
потому что он не напрямую зависит от универмага и товара,
а зависит как бы через номер отдела.
В таком случае мы видим, что у нас третья нормальная форма нарушена.
Следующая нормальная форма.
Она называется нормальной формой Бойса-Кодда по имени ее создателя.
Она говорит о том, что если у нас есть в отношении зависимость
из некого множества атрибутов X и множества атрибутов A,
при этом A не является подмножеством X, то X содержит ключ нашего отношения.
Для того, чтобы проиллюстрировать этот пример,
давайте снова вернемся к нашей таблице Город, Индекс и Адрес.
Мы заметили там следующие зависимости: что город с адресом определяет индекс,
а индекс определяет город.
Мы рассматривали две возможности для выбора ключа: либо это Город и Адрес,
либо это Индекс и Адрес.
Вот зависимость, когда у нас из Индекса следует Город,
она нарушает нормальную форму Бойса-Кодда, потому что зависимость в схеме
присутствует, а поле Индекс ключа не содержит.
Что сделать с этой таблицей?
Если мы разобьем ее на две — Город и Индекс и Индекс, Адрес — то у нас
пропадает зависимость между Городом и Адресом, зависимость в поле Индекс.
Какой вывод мы можем сделать?
Мы можем привести любое наше отношение к нормальной форме,
к первой, второй, третьей и Бойса-Кодда таким образом,
чтобы декомпозиция обладала свойством соединения без потерь.
Любая схема может быть приведена к третьей нормальной форме, и при этом она
будет соединяться без потерь и сохраняет все функциональные зависимости.
Но можно заметить, что третья нормальная форма не избавляет нас от всех
аномалий избыточности, но сохраняет все функциональные зависимости.
А во нормальная форма Бойса-Кодда,
она избавляет нас от всех возможных аномалий, но может...
но в процессе приведения к нормальной форме Бойса-Кодда мы можем потерять
некоторые функциональные зависимости.
Теперь.
Чтобы привести наши таблицы к нормальным формам,
мы должны производить декомпозицию.
Каким образом мы будем это делать?
Мы находим множество функциональных зависимостей, выделяем зависимость,
которая нарушает нормальную форму, к которой мы хотим привести.
Например, зависимость X определяет Y.
Ищем также другие зависимости с той же самой левой частью,
то есть мы ищем другие наборы атрибутов, которые функционально зависят от X.
Выделяем в отдельное отношение наши атрибуты X, Y и все другие атрибуты,
зависящие от X, а из исходного отношения мы удаляем зависимые атрибуты.
Таким образом мы изучили с вами правила приведения отношений
к нормальным формам.