"Проектирование реляционных баз данных." - читать интересную книгу автора (Джен Л. Харрингтон)1002 John Doe Mary 1/1/92 Sam 5/15/94
1003 Jane Smith John 10/5/94 Pat 10/12/90 Lee 6/6/96 1004 John Smith Michael 7/4/96 1005 Jane Jones Edward 10/21/95 Martha 10/15/89 Рис. 4.З. Неверное устранение повторяющихся групп Отношение, показанное на рис. 4.3, вполне отвечает критериям первой нормальной формы: повторяющихся групп больше нет, и проблемы определения соответствия дат рождения не существует. Однако в такой структуре возникает ряд собственных проблем: ¦ Отношение ограничено тремя детьми для каждого служащего. Это означает, что для хранения сведений о четвертом ребенке Джейн Сми (Jane Smith) места нет. Может быть, нужно создать для Джейн Смит дополнительную строку в таблице? Если это сделать, то первичный клю4 отношения не сможет и дальше быть идентификатором служащего (Emp. 1D> В состав первичного ключа придется внести еще как минимум имя одно ребенка. Глава 4 • Нормализация 53 ¦ Пространство этого отношения понапрасну расходуется на тех людей, у которых не больше трех детей. При условии, что дисковое пространство является одним из самых недорогих элементов системы базы данных, это, пожалуй, наименее важная из всех проблем, связанных с рассматриваемым отношением. ¦ Поиск сведений о конкретном ребенке становится очень громоздким. Чтобы ответить на вопрос: "Есть ли у кого-то ребенок по имени Ли?", СУБД приходится формировать запрос, в котором просматриваются все три столбца имен детей, так как узнать, в каком именно столбце можно найти нужное имя, нельзя. Правильный способ устранения повторяющихся групп — создание еще одной таблицы (еще одной сущности) для работы с несколькими экземплярами повторяющейся группы. В рассматриваемом примере можно создать для детей (Children) вторую таблицу, которая выглядит примерно так, как показано на рис. 4.4. Employees Children Emp. ID First Last Emp. ID Child Name Birthdate 1001 Jane Doe 1001 Mary 1/1/92 1002 John Doe 1001 Sam 5/15/94 1003 Jane Smith 1002 Mary 1/1/92 1004 John Smith 1002 Sam 5/15/94 1005 Jane Jones 1003 John 10/5/94 1003 Pat 10/12/90 1003 Lee 6/6/96 1003 Mary 8/21/94 1004 Michael 7/4/96 —- 1005 Martha 10/15/89 ^K. 4.4. Правильный способ устранения повторяющейся группы Ни в одной из двух новых таблиц нет повторяющихся групп, и при использовании ^ои формы не возникают проблемы, имевшие место выше: , ¦ Отсутствует ограничение на число детей, сведения о которых можно хранить для конкретного служащего. Для добавления сведений еще об одном ребенке достаточно внести в таблицу дополнительную строку. 54 Часть первая • Теория ¦ Дисковое пространство не расходуется понапрасну. В таблице детей оно занимается только существующими данными. ¦ Искать сведения о конкретном ребенке намного проще, так как его имя указывается только в одном столбце. Недостатки первой нормальной формы Хотя в отношениях первой нормальной формы нет повторяющихся групп, существует ряд других проблем. Чтобы их понять, рассмотрим отношение, лежащее в основе формы для ввода данных (см. главу 1). Это отношение, выраженное используемым нами способом записи отношений, может выглядеть следующим образом: orders (customer number, first name, last name, street, city, state, zip, phone, order date, item number, title, price, has shipped) Во-первых, для этой таблицы нужно определить первичный ключ. Одного номера клиента (customer number) мало, так как он повторяется для каждого пункта, заказываемого клиентом. Недостаточно и номера пункта заказа (item number), поскольку он повторяется для каждого заказа, в котором фигурирует. Номер заказа нельзя использовать из-за того, что тот повторяется для каждого пункта заказа. Единственным выходом является составной ключ, в данном случае комбинация из номера заказа и номера товара. Если первичный ключ состоит из номера заказа и номера товара, то с помощью этого отношения нельзя выполнить две важные операции: ¦ Добавить данные о клиенте до того, пока тот не сделает хотя бы один заказ, так как без заказа и пункта в этом заказе нет полного первичного ключа. ¦ Добавить данные о продаваемом товаре, если он не заказан. Для того чтобы первичный ключ был полным, должен присутствовать номер заказа. Рассмотренные ситуации являются аномалиями ввода, которые возникают при невозможности ввода данных в отношение из-за отсутствия полного первичного ключа (не забывайте о том, что ни одна из частей первичного ключа не может быть null-значением). Если говорить точнее, в отношении заказов существуем и третья аномалия ввода: невозможно ввести сведения о заказе до тех пор, пока не будет известен один из его пунктов. Однако с чисто практической точки зрения никто, конечно, не будет вводит информацию о заказе без внесения в него какого-либо пункта. Глава 4 • Нормализация 55 В отношениях первой нормальной формы аномалии ввода достаточно распространены, что не характерно для нормальных форм более высокого уровня. На практике ЭТЯ аномалии происходят из-за наличия в отношении данных о нескольких сущностях. Аномалия вынуждает при вводе данных о некоторой сущности (например, о клиенте) вводить еще и сведения о сущности, не связанной с первой (например, о товарном пункте). При работе с отношениями первой нормальной формы могут возникать проблемы и при удалении данных. Посмотрим, к примеру, что происходит, если клиент отменяет заказ одного пункта: ¦ В случаях, когда удаляемый пункт является единственным пунктом заказа, теряются все данные о заказе. |
|
|