Программирование баз данных MS SQL Server (1084479), страница 73
Текст из файла (страница 73)
Кроме того, нельзя исключить такую возможность, что в столбце Сизьовегнатпе появится информация о закаэчиках, компании которых имеют одинаковые названия. (Например, практика показала, что в США имеются сотни компаний с названием АА Апго С)азз.) Сз Безусловно, часть данных из таблицы Ог41егз успешно изъята, но нам необходимо обеспечить возможность обращаться из таблицы Огс1егз к данным новой таблицы Сизьотегз. Именно поэтому в таблице Ого(егз по-прежнему находится столбец Спзьовегно (столбец первичного ключа таблицы Спзьовегз).
В дальнейшем, после формирования необходимых связей, будет создано ограничение внешнего ключа, позволяющее обеспечить наличие во всех заказах действительных номеров заказчиков. 03 В результате создания таблицы Сизсовегз удалось исключить дублирующийся экземпляр информации о компании АСМЕ Со. Тем самым продемонстрирован пример успешного решения задачи исключения данных, присутствующих в повторяющихся группах, для дальнейшего сохранения этих данных в единствен- Нормализация и другие важные проблемы проектирования 285 ном экземпляре.
Благодаря этому, во-первых, удается сэкономить место, а вовторых, избежать конфликтов, связанных с нарушением синхронизации при обновлении нескольких экземпляров повторяющихся данных. 03 Изъятию подлежат только повторяющиеся группы данных, а не отдельные элементы данных. Например, в таблице может несколько раз повторяться одна и та же дата заказа, но такая дата в действительности не составляет группу; дата — это просто не связанный с другими фрагмент данных, который не имеет смысла за пределами таблицы. Таким образом, выше было показано, какие действия следует предпринимать по отношению к повторяющимся данным.
Теперь мы можем перейти к устранению второго нарушения требований к первой нормальной форме, чтобы добиться применения только неразрывных данных. В частности, изучение столбца 10ергзогс1егес! показывает, что в нем фактически присутствует несколько различных фрагментов данных: 53 данные о деталях, количество которых может составлять от одной и больше; 53 информация о количестве, весе и стоимости отдельных деталей. Отдельно взятые фрагменть! данных о номере, количестве, весе, цене и стоимости деталей являются неразрывными, но теряют это свойство после их объединения в многозначные значения. На пе/твый взгляд это может показаться невфоятньим, но на тфактике некотефью тфнложения действительно офганизованьг по такому же пугинципу Дело в том, что тфи поверхностном подходе тфедставляетгя очень удобным обьгдиненне всех взаимосвязанных данных в одном многозначном значении, ведь офгфмленные на бумам счета-факту/гы также тфедставляют собой один к/гупньгй инфгфмационный блок, в котгфом имеются все данные о тово/тах, тфгдназначенных для определенного заказчика, а это очень удобно.
Поэтому иногда компью тле/гизгф сван ныл системы создаются с учетом офгфмления данных по такому же поинципу, копифый п/гименяется для тфедставлення данна х на бумаге. Приступим к устранению этого недостатка и осуществим разбивку многозначного значения. В ходе этого обнаруживается, что целесообразно также ввести новый фрагмент информации, представляющий собой цену одной детали, или цену единицы товара (!/п1сргйсе), как показано на рнс. 8.1. Оп!егно Он1ег ваге Сна!статно Рагтно ОеасНраоп Оат Ппйрпса Тоге!Расе \т. (РК! лчис. 8.1.
ВОРиант таблицы Охс)ется, в итнфам исключены многозначные значе ния, но не обеснечиваенгся однозначная идентификация софок !оо 1ОО 100 !ОО ю! 102 1О2 102 !оз юз !оз 1/1/ 1999 1/!/1999 1/! / 1999 1/1/1999 1/!/1999 ! Д/1999 1/1/1999 1/!/ 1999 1/2/ 1999 1/2/1999 !/2/1999 54545 144536 54545 ОЯ2400 54545 ОЯ2403 54545 4!5436 12000 ЗХ9557 66651 809200 66651 805437 56651 ЗН6250 54545 809200 54545 2Р5523 54545 ЗХ9567 Яанов !и!ааог !и!ааог наао Рипр Рап Рап Санто! Рап Нснэпо Рипр 5 4 4 1 1 7 1 1 40 1 1 15 27 29 750 62.50 12 15 32 12 165 42 75 6 108 .5 116 .5 750 3 62.50 5 84 3 15 3 32 5 480 3 165 1 42 5 286 Глава 8 Тем не менее после разбиения многозначного значения с данными о заказе на несколько фрагментов информации обнаруживается проблема, связанная с тем, что первичный ключ больше не может служить уникальным идентификатором для строк; несмотря на то, что в самих строках содержится уникальная информация, значения первичного ключа в некоторых из них повторяются.
Для устранения указанной проблемы могут применяться разные способы, но в данном примере просто введем в таблицу столбец с номерами строк заказа, как показано на рис. 8.2, чтобы снова получить возможность однозначно идентифицировать строки таблицы. Оп!егно Осеет (РК) (РК) Огеег Оа(е Сойопюг йо Рт йо Оепсг(раоп О!у Опа Рисе !Ма( Рисе КЯ. Рис 8.2.
Вариант жабаицы Оке(екв, обесгмчиеаюгций однозначную идентицгикоцию строк ВМЕО7О.ВВЕдвййя ЕВ(Е ОдгНОГО:Етеипбце; КагК В:даййОМ ПрИМЕрд, Месжйга бЫдЬ бм таЮ1КЕЛ()ИС МЕНИтЬ':ДР)(Г(Ой,огоДКОД:-' ВВЕСТИ 'В ОвгвтаВ ОЕРВгИКНОГО КксЮЧО Стбдбеигв ИОМВпРВМИ-баталий, рак(КОО.,"ЙО)тагКОЕ'ргЕШЕНИЕ йМЕЕт ОдИИ.
йбдгеотв(тех! =СВЕЗО)1(йЫя атЕМ;- Чта О)2)де,бм) Ивагеа-. й018(ИЫМ В((7(И~ЧЕНйв)В Однй И тв)7'МЕ Захаагдвух.ИЛИ! НЕОКЕяг((КИК:Отрвгв С ОдййаКОВЫМИ йемерами деталей..краткие сведена)(О ключа)(,(юиоеанйык больше',чвм йе 'Одй(!)(гбтолбцву (НаВЫВВЕМЫглотВЮКЕ;СаоуаВИЫМИ43)ЮЧаМИ1) будут ПрмввдЕНЫГВ:Сведу)О(ОЕИ'ГЛаВЕ. К этому моменту все требования к первой нормальной форме выполнены. Повторяющиеся группы данных отсутствуют, и значения во всех столбцах являются неразрывными (однозначными).
Безусловно, возникают проблемы, связанные с тем, что некоторые данные приходится повторять в одном и том же столбце (поскольку все эти данные относятся к строкам с одинаковым значеннсм первичного ключа), но решение данной проблемы будет вскоре описано. Вторая нормальная форма Следующий этап нормализации состоит в переходе ко второй нормальной форме (8есопс) Хогша! гогш — юг). Применение второй нормальной формы способствует дальнейшему сокращению количества повторяющихся данных (которые не должны обязательно составлять группы). Вторая нормальная форма определяется в соответствии с двумя приведенными ниже правилами. Юо Юо 100 Юо !а! 102 102 102 103 !0З 103 1 2 3 4 1 1 2 3 1 2 3 17171999 54545 17171999 54545 1/1/1999 54545 1/1/1999 54545 17171999 12000 17171999 65651 1!171999 66651 17171999 66651 17271999 54545 17271999 54545 17271999 54545 1А4536 092400 092403 415436 ЗХ9567 669200 805417 ЗН6250 809200 2Р5523 ЗХ9567 Напое 5 )п)ес( ог 4 )п)ес1ог 4 неао 1 Рспр 1 Рап 7 рап 1 Сап!о) 1 Гас 40 Носипо 1 рспр 15 75 б 27 108 5 29 116 5 750 750 3 62.50 62.50 5 12 84 3 15 15 3 32 32 5 12 460 3 !65 165 1 42 42 5 Нормализация и другие важные проблемы проектирования 287 ~2 Таблица должна соответствовать требованиям к первой нормальной форме (процесс нормализации является строго последовательным и напоминает кладку стены — в стену невозможно положить третий кирпич, не положив перед этим два первых).
а Каждый столбец должен зависеть от всего ключа. В рассматриваемом примере как раз и обнаруживается нарушение требований ко второй нормальной форме (фактически даже несколько нарушений). Еще раз рассмотрим версию таблицы Огбегя в первой нормальной форме (см. рис. 8.2), чтобы определить. зависит ли каждый столбец от всего ключа, и нет ли таких столбцов, которые зависят только от части ключа. Ответы на этих два вопроса являются соответственно отрицательным и положительным. В таблице Огоегя есть два столбца, которые зависят только от столбца Огбегио, но не от столбца ~,тпе1гекг Таковыми являются столбцы Огоегпаге и Озясотегио: значения в обоих столбцах остаются одинаковыми для всего заказа, независимо от того, сколько отдельных позиций имеется в заказе.
Для устранения указанного недостатка требуется ввести еще одну таблицу. При этом мы впервые сталкиваемся с противопоставлением таблиц заголовка и расшифровки. Как показывает рассматриваемый пример, иногда на практике невозможно представить одну сущность с помощью одной таблицы и приходится разбивать одну таблицу на две; в связи с этим одна сущность разделяется на две сущности.
Возникает связь двух таблиц, в которой таблица заголовка играет роль своего рода родительской таблицы по отношению к таблице расшифровки. При этом таблица заголовка хранит информацию, которую достаточно представить единожды, а таблица расшифровки содержит информацию, которая может существовать в нескольких экземпляраа При создании двух таких таблиц на основании исходной за таблицей заголовка обычно закрепляют имя исходной таблицы, а таблице расшифровки присваивают имя, которое содержит в начале имя таблицы заголовка и заканчивается подстрокой, указывающей, что эта таблица предназначена для описания содержимого заказов (например, Огс)егЭеса11я; буквально — расшифровка заказов).
К каждой отдельной строке таблицы заголовка, как правило, относится не меньше одной строки таблицы расшифровки, но, вообще говоря, таких строк может быть гораздо больше. В этом проявляется один из характерных примеров связи, которая будет рассматриваться в следующем крупном разделе (а именно, связи "один ко многим"). Итак, попытаемся устранить указанный недостаток и для этого еще раз разобьем одну из используемых таблиц (таблицу Огоегя). Фактически вначале целесообразно рассмотреть таблицу расшифровки, поскольку именно в ней находится основная часть оставшихся столбцов (табл. 8.5).
Начиная с этого момента таблица расшифровки будет именоваться как Огс(егРеса21я. Затем приступим к созданию таблицы заголовка (табл. 8.8). Хотя эта таблица после разбиения исходной таблицы на две кажется полностью новой, она предназначена для использования в качестве таблицы заголовка и поэтому сохраняет за собой имя Огата. Итак, после этих преобразований требования ко второй нормальной форме выполнены.
В частности, все столбцы зависят от всего ключа. Тем не менее читатель, скорее всего, не будет удивлен, узнав, что еще не все недостатки устранены. Речь об этом пойдет ниже. 288 ТЪава 8 Таблица 8.8. Таблица Окс1екпесах1в Огпегио Ььпегеее РагйБо Пеасгярбаоп ОЕР ПвИРгясе Тоба1Ргбсе ИС 100 1А4536 082400 Р1ап9е 1пЗессог 15 27 29 750 62.50 12 75 б .5 100 108 1пЗеосог Неао 100 ОР2403 415436 Зх9567 869200 865437 ЗН6250 116 750 62.50 84 100 101 Р~ппр Рап 102 102 102 103 103 103 Рап 15 32 12 165 15 32 480 165 42 Сопсго1 869200 2Р5523 ЗХ9567 Рап Нопагпд Роар Таблица 8.8.
Таблица Ох41ехе Огг1егио (РЕ) Огсегвасе Соаеоеегио 1/1/1999 1/1/1999 1/1/1999 1/2/1999 100 101 102 103 54545 12000 66651 54545 Третья нормальная форма 63 Наличие в таблице производных данных не допускается. Обычно после выполнения требований к третьей нормальной форме процесс нормализации заканчивается. С формальной точки зрения почти всегда остается возможность добиться еще большей степени нормализации по сравнению с этой, но, как правило, необходимые для этого процедуры не привлекают значительного интереса, кроме как в кругу теоретиков.
Очень краткое описание следующих нормальных форм будет приведено ниже в данной главе, но вначале мы должны закончить свою основную работу по нормализации. Как было указано в конце описания второй нормальной формы, созданная структура данных все еще характеризуется определенными недостатками, поскольку в ней еще не достигнута третья нормальная форма (ТЫгс( 11оппа1 Ропп — ЗХг). Применение третьей нормальной формы позволяет добиться того, чтобы ни один столбец в таблице не зависел от каких-либо других столбцов, кроме столбцов первичного ключа.