Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УИС Лабораторные работы.doc
Скачиваний:
8
Добавлен:
06.12.2018
Размер:
377.86 Кб
Скачать

3Нф: Отношение находится в 3нф, если оно удовлетворяет 2нф и ни одно из неключевых полей не идентифицируется однозначно значением другого неключевого поля.

Проверим наши отношения на соответствие 3НФ. Вспомним, что могут существовать среди студентов университета полные тезки, поэтому поле ФИО не определяет однозначно остальные поля кортежа, в том числе и пол студента. При чисто русском значении ФИО, действительно, можно однозначно сказать пол человека, а если студент нерусский, а например, китаец или африканец? Поля Дата_рожд, Пол, Дата_выдачи и Факультет тоже не определяют остальные поля кортежа. А вот №_паспорта однозначно определяет атрибуты ФИО, Дата_рожд, Пол, Дата_выдачи, Прописка, а атрибут Группа однозначно определяет атрибут Факультет. По этой причине выделим в отдельные отношения атрибуты ФИО, Дата_рожд, Пол, Дата_выдачи и Факультет.

Атрибут Прописка, т.е. адрес однозначно определяет номер домашнего телефона. Но и атрибут Дом_тел тоже однозначно определяет адрес. Но это справедливо только при наличии домашнего телефона. Если же его нет, то по адресу можно узнать об отсутствии телефона, а по отсутствующему номеру телефона узнать адрес нельзя. Поэтому из отношения TStudent надо выделить в отдельное отношение атрибут Дом_тел.

TObuchenie (ID_Ob, ID, ID_Gr)

TStudent (ID, ID_FIO, ID_DR, ID_Pol, №_паспорта, ID_DV, ID_Prop)

TFIO (ID_FIO, ФИО)

TDataRogd (ID_DR, Дата_рожд)

TPol (ID_Pol, Пол)

TDataVyd (ID_DV, Дата_выдачи)

TPropiska (ID_Prop, Прописка, ID_DT)

TDT(ID_DT, Дом_тел)

TGruppa (ID_Gr, Группа, ID_Fak)

TFakultet (ID_Fak, Факультет)

Для связи отношений в отношение TStudent поместим внешние ключи ID_FIO, ID_DR, ID_Pol и ID_DV, а в отношение TPropiskaID_DT. Аналогично в отношение TGruppa поместим внешний ключ ID_Fak. Следует прокомментировать полученные отношения. Из отношения TStudent мы убрали информацию о домашнем телефоне, т.к. атрибут Дом_тел определяется адресом, т.е. пропиской, а не именем студента.

Теперь все отношения в 3НФ.

Усиленная 3НФ или БКНФ: Отношение находится в БКНФ, если оно удовлетворяет 3НФ и в нем отсутствуют зависимости атрибутов составного первичного ключа от неключевых атрибутов.

У нас нет ни одного составного первичного ключа, следовательно, все наши отношения соответствуют БКНФ.

Обычно перевод отношения в БКНФ обеспечивает целостность данных в БД, и на этом можно остановиться. Но БКНФ все еще сохраняет высокую степень простого дублирования данных. В университете многие студенты родились в один день. А сколько студентов имеют прописку общежития?

4Нф: Отношение находится в 4нф, если оно удовлетворяет бкнф и примененная к отношениям полная декомпозиция является соединением ровно двух проекций.

Звучит мудрено, но на практике перевод отношения в 4НФ означает выделение из отношения дочерних отношений, в которых исключается дублирование данных. Анализ отношений показывает, что дублирования данных нет, т.е. они в 4НФ.

5Нф: Отношение находится в 5нф, если оно удовлетворяет 4нф и отношения, не имеющие полной декомпозиции, приводятся к ней посредством разделения структур данных, а одинаковые структуры объединяются.

Для исключения дублирования данных разобьем сложные структуры данных, имеющиеся в наших отношениях, и создадим для них дочерние отношения. Остальные отношения оставим без изменения. В нашем примере получились два отношения с одинаковой структурой – дата. Объединим их в одно отношение:

TData (ID_Data, Дата)

Получим следующую логическую модель БД:

TObuchenie (ID_Ob, ID, ID_Gr)

TStudent (ID, ID_Fam, ID_Im, ID_Otch, ID_DR, ID_Pol, №_паспорта, ID_DV, ID_Prop)

TFam (ID_Fam, Фамилия)

TImja (ID_Im, Имя)

TOtch (ID_Otch, Отчество)

TDataRogd (ID_DR, ID_Data)

TData (ID_Data, Data)

TPol (ID_Pol, Пол)

TDataVyd (ID_DV, ID_Data)

TPropiska (ID_Prop, ID_NP, ID_Ul, ID_Dom, ID_Kv, ID_DT)

TNP (ID_NP, Нас_пункт)

TUl (ID_Ul, Улица)

TDom (ID_Dom, ID_N)

TKv (ID_Kv, ID_N)

TNomer(ID_N, Номер)

TDT(ID_DT, Дом_тел)

TGruppa (ID_Gr, Группа, ID_Fak)

TFakultet (ID_Fak, Факультет)

В этой логической модели БД мы не стали выносить в отдельное отношение номер паспорта, т.к. они не повторяются, а кодировать одно целое число другим не имеет смысла. В полученных отношениях полностью исключено дублирование. Следует отметить, что такие данные, как номер (дома, квартиры) лучше задать не как число, а как строку символов, т.к. в этом случае при необходимости проще получить одну строку, содержащую адрес, путем «склеивания» строк символов, содержащих данные о населенном пункте, улице, доме и квартире.

Не всегда следует приводить отношения к 5НФ. Иногда это выгодно (при работе с задачами большой размерности), иногда эффект от этого незначительный или даже отрицательный. Например, в приведенной задаче, если пол студента будем указывать одной буквой «М» или «Ж», то нет смысла эти два значения выделять в отдельное отношение и кодировать эти буквы цифрами «1» и «2». Так мы только усложним структуру БД и при этом проиграем в объеме необходимой памяти. Если БД предусматривается небольшого объема, то вполне достаточно привести отношения к БКНФ.