"Проектирование реляционных баз данных." - читать интересную книгу автора (Джен Л. Харрингтон)

customer_street, customer_city, customer_state, customer_zip,
customer_phone, credit_card_numb, card_exp_date) item (item_numb, title, distributor_numb, retail_price,
release_date, genre) order (order_numb, customer_numb, order_date, order_filled) order_lines (order_numb, item_numb, quantity, discount_applied,
selling_price, line_cost, shipped) distributor (distributor_numb, distributor_name,
distributor_street, distributor_city, distributor_state,
distributor_zip, distributor_phone, distributor_contact_person,
contact_pe rson_ext) actor (actor_numb, actor_name) performance (actor_numb, item_numb, role) producer (producer_name, studio) production (producer_name, item_numb)
В последующих главах первой части книги эти отношения несколько меняются и иллюстрируют различные аспекты процесса проектирования базы данных. Приведенная же выше структура является результатом преобразования непосредственно ER-диаграммы.
Нормальные формы
I еоретические правила, которым отвечает структура отношения, называются Реальными формами (normal forms). С возрастанием порядкового номера нормаль-I формы набор правил постоянно усложняется. В теории, чем выше номер нормаль-формы, тем лучше структура отношения.
На рис. 4.1 представлены шесть вложенных нормальных форм. Если отношение •ответствует одной из высоких, внутренних нормальных форм, оно также соответст-т Всем более низким нормальным формам.
50
Часть первая • Теория
В большинстве случаев, если можно установить соответствие отношений третьей нормальной форме (3NF), удастся избежать многих проблем, присущих плохим реляционным проектам. Нормальная форма Бойса-Кодда (BCNF) и четвертая нормаль-ная форма (4NF) используются в особых ситуациях. Однако концепции, лежащие в их основе, вполне понятны, что позволяет применять эти формы на практике, когда это необходимо.
Пятая же нормальная форма (5NF) представляет собой сложный набор критериев, работать с которыми исключительно трудно. Большинство разработчиков стараются не иметь дела с 5NF, зная о том, что если их отношения соответствуют 3NF (или 4NF, если это оправданно), никаких проблем с их проектами не возникнет.
Рис. 4.1. Вложенные нормальные формы
Помимо шести нормальных форм, представленных на рис. 4.1, существует еще одна — нормальная форма доменов/ключей, важность которой исключительно теоретическая и на данный момент с целью практического проектирования не используется.
Глава 4 • Нормализация 51
Первая нормальная форма
Таблица соответствует первой нормальной форме (1NF), если она отвечает следующему критерию:
Данные хранятся в двухмерной таблице без повторяющихся групп.
Следовательно, ключом к освоению 1NF является понятие повторяющейся группы данных.
Понятие повторяющейся группы
Повторяющаяся группа (repeating group) — это атрибут, имеющий несколько значений в каждой строке. Предположим, что в отношении служащих нужно хранить имена и даты рождения их детей. У каждого служащего может быть по несколько детей, поэтому имена детей и даты их рождения образуют повторяющуюся группу.
Повторяющаяся группа имеет прямую аналогию с многозначным атрибутом ER-диаграммы.
Действительно, запрет на использование повторяющихся групп имеет четкое обоснование. Что произойдет при их наличии, можно понять, обратившись к рис. 4.2, где представлен пример обсуждавшегося выше отношения служащих (employees).
Emp. ID First Last Children's Names Children's Birthdates
1/1/92,5/15/94
1/1/92,5/15/94
10/5/94,10/12/90, 6/6/96, 8/21/94
7/4/96
10/21/95, 10/15/89
Рис. 4.2. Отношение с повторяющимися группами
Обратите внимание: в одной строке здесь присутствует по несколько значений j* столбцах имен детей (Children's Names) и дат их рождения (Children's Birthdates). °°зникают две основные проблемы:
¦ Нет возможности точно сказать, какие даты рождения каким детям соответствуют. Предположим, что мы можем сопоставить даты рождения именам детей по их позиции в списке, однако нет уверенности в том, что номера позиций всегда будут соблюдаться.
1001 Jane Doe Mary, Sam
1002 John Doe Mary, Sam
1003 Jane Smith John, Pat, Lee, Mary
1004 John Smith Michael
1005 Jane Jones Edward, Martha
52
Часть первая • Теория
¦ Поиск в такой таблице чрезвычайно труден. Например, если необходимо узнать, дети каких сотрудников родились до 1995 г., СУБД потребуется извлечь даты рождения из столбца дат рождения, а лишь затем проверить их. Если же невозможно узнать, сколько дат рождения находится в этом столбце для конкретной строки, объем обработки информации становится еще больше.
Решением указанных проблем является, естественно, полный отказ от применения повторяющихся групп.
Устранение повторяющихся групп
Существуют два способа устранения повторяющихся групп и приведения отношения в соответствие требованиям первой нормальной формы: верный и неверный. Сначала рассмотрим неверный способ, чтобы знать, чего именно не следует делать.
На рис. 4.3 приведено отношение, где повторяющиеся группы устраняются созданием нескольких столбцов для нескольких значений. В этом конкретном примере — три пары столбцов имен и дат рождения детей.
Child Child Child Child Child Child
Emp. ID First Last Name 1 B_date 1 Name 2 B_date 2 Name 3 B_date 3
1001 Jane Doe Mary 1/1/92 Sam 5/15/94