|
Программирование >> Хронологические базы данных
OFFICEl { DEPTt, OFF#, AREA } PRIMARY KEY { DEPTt, OFFi } PHONEI { DEPTi, OFFi, PHONEi } PRIMARY KEY { DEPTi, OFFi, PHONEi } Этап 2. Приведение отношений к 2НФ Теперь переменные-отношения, находяшиеся в 1НФ, можно привести к эквивалентной совокупности переменных-отношений в 2НФ, исключив те функциональные зависимости, которые не являются неприводимыми. Ниже все такие переменные-отношения рассматриваются последовательно одна за другой. DEPT1 ЕМР1 J0B1 SALHIST1 PRO Л OFFICEl Эта переменная-отношение уже находится в 2НФ. Прежде всего следует отметить, что атрибут DEPTi является избыточным компонентом первичного ключа данной переменной-отношения. В качестве первичного ключа здесь можно принять атрибут EMPi, причем в таком виде данная переменная-отношение уже будет находиться в 2НФ. Опять отметим, что необязательно использовать атрибут DEPTi в качестве компонента первичного ключа. Поскольку атрибут DEPTi функционально зависит от атрибута EMPi, имеется неключевой атрибут (DEPTi), зависимость которого от первичного ключа (комбинации атрибутов {EMPi, JOBTITLE}) не является неприводимой и, следовательно, переменная-отношение J0B1 не находится во 2НФ. Эту переменную-отношение можно заменить двумя другими. J0B2A { EMPi, JOBTITLE } PRIMARY KEY { EMPi, JOBTITLE } J0B2B { EMPi, DEPTi } PRIMARY KEY { EMPi } Однако переменная-отношение JOB 2 A является проекцией переменной-отношения SALHIST2 (ниже это описано подробнее), а переменная-отношение J0B2B- проекцией переменной-отношения ЕМР1 (ниже она будет переименована в ЕМР 2). Следовательно, обе вновь созданные переменные-отношения могут быть просто удалены. Так же, как и в случае переменной-отношения J0B1, атрибут DEPTi можно полностью удалить. Более того, как компонент первичного ключа атрибут JOBTITLE не требуется. В качестве первичного ключа достаточно использовать комбинацию атрибутов {EMPi, DATE}. В результате будет получена следующая переменная-отношение, находящаяся в 2НФ. SALHIST2 { EMPi, DATE, JOBTITLE, SALARY } PRIMARY KEY { EMPt, DATE } Так же, как и в случае с переменной-отношением ЕМР1, можно рассматривать атрибут DEPTi как неключевой, причем данная переменная-отношение будет находиться в 2НФ. Здесь можно применить аналогичное рассуждение. PHONEI Атрибут DEPTt можно удалить совсем, поскольку переменная-отношение (DEPTt, OFF#) является проекцией переменной-отношения 0FFICE1 (переименованной далее в 0FFICE2). Кроме того, атрибут OFF# функционально зависит от атрибута PHONEl, поэтому в качестве первичного ключа достаточно принять только атрибут PHONE#, в результате чего будет получена приведенная ниже переменная-отношение в 2НФ. PH0NE2 { PHONE#, OFFi } PRIMARY KEY { PHONEl } Обратите внимание, что эта переменная-отношение необязательно является проекцией переменной-отношения ЕМР2 (телефоны и офисы могут сушествовать и без их соотнесения с конкретными сотрудниками), поэтому ее нельзя удалить. Таким образом, мы получили следующий набор переменных-отношений в 2НФ. DEPT2 { DEPTt, DBUDGET, MGR EMPt } PRIMARY KEY { DEPTt }~ ALTERNATE KEY { MGR EMPt } EMP2 { EMPt, DEPTI, PROJI, OFFi, PHONEt } PRIMARY KEY { EMPt } SALHIST2 { EMPt, DATE, JOBTITLE, SALARY } PRIMARY KEY { EMPI, DATE } PR0J2 { PROJI, DEPTt, PBUDGET } PRIMARY KEY { PROJi } 0FFICE2 { OFFI, DEPTi, AREA } PRIMARY KEY { OFFI } PH0NE2 { PHONEt, OFFI } PRIMARY KEY { PHONEt } Этап 3. Приведение к ЗНФ Теперь можно привести переменные-отношения, находящиеся в 2НФ, к эквивалентному набору переменных-отношений в ЗНФ, для чего необходимо исключить транзитивные зависимости. Единственной переменной-отношением, которая находится в 2НФ и не находится в ЗНФ, является переменная-отношение ЕМР2, в которой атрибуты OFFt и DEPTt транзитивно зависят от первичного ключа EMPt: атрибут OFFI через атрибут PHONEt, а атрибут DEPTt - через атрибут PROJt, а также через атрибут OFFI (следовательно, и через атрибут PHONEt). Таким образом, переменной-отношению ЕМР2 соответствует следующий набор переменных-отношений (проекций) в ЗНФ. ЕМРЗ { EMPt, PROJt, PHONEt } PRIMARY KEY { EMPI } X { PHONEl, OFFI } PRIMARY KEY { PHONEt } Y { PROJI, DEPTI } PRIMARY KEY { PROJi } Z { OFFI, DEPTI } PRIMARY KEY { OFFI } Однако переменная-отношение X - это аналог переменной-отношения PH0NE2, переменная-отношение Y - это проекция переменной-отношения PR0J2, а переменная-отношение Z - это проекция переменной-отношения 0FFICE2. Следовательно, окончательная совокупность переменных-отношений в ЗНФ будет выглядеть следуюшим образом. DEPT3 { DEPTI, DBUDGET, MGR EMP } PRIMARY KEY { DEPTt } ALTERNATE KEY { MGR EMP# } EMP3 { EMPI, PROJI, PHONEI } PRIMARY KEY { EMPI } SALHIST3 { EMPI, DATE, JOBTITLE, SALARY } PRIMARY KEY { EMP#, DATE } PR0J3 { PROJI, DEPTI, PBUDGET } PRIMARY KEY { PROJi } OFFICES { OFFI, DEPTt, AREA } PRIMARY KEY { OFFI } PH0NE3 { PHONEI, OFFI } PRIMARY KEY { PHONEI } Наконец, отметим, что каждая из этих переменных-отношений в ЗНФ уже находится в НФБК. I Следует указать на то, что при учете некоторых (разумных) дополнительных семантических ограничений этот набор переменных-отношений становится сильно избыточным [5.1], так как проекция переменной-отношения PR0J3 по атрибутам {PROJi, DEPTI} практически всегда эквивалентна проекции, выполненной для результата соединения переменных-отношений ЕМРЗ, PH0NE3 и 0FFICE3. В заключение отметим, что полученный набор переменных-отношений в НФБК можно было выделить непосредственно на диаграмме ФЗ. {Вопрос. Как именно это можно сделать?) Замечание. Это не значит, что выделить результирующий набор переменных-отношений в НФБК можно всегда; на самом деле определить результаты декомпозиции подобным образом можно лишь в некоторых конкретных случаях. Точнее говоря, для данной переменной-отношения R, удовлетворяющей множеству функциональных зависимостей S, представленный ниже алгоритм (этапы 0-8) гарантирует декомпозицию D переменной-отношения R на переменные-отношения в ЗНФ (но не НФБК), которая выполняется одновременно без потерь информации и с сохранением зависимостей.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |