- •Е.И. Шедько
- •Избыточность данных и аномалии
- •Нормализация отношений
- •1Нф: Отношение находится в 1нф, если все его атрибуты являются простыми, т.Е. Имеют единственное значение, и в таблице отсутствуют повторяющиеся группы полей (строки).
- •2Нф: Отношение находится во 2нф, если оно удовлетворяет условию 1нф и каждый неключевой атрибут функционально полно зависит от первичного ключа.
- •3Нф: Отношение находится в 3нф, если оно удовлетворяет 2нф и ни одно из неключевых полей не идентифицируется однозначно значением другого неключевого поля.
- •4Нф: Отношение находится в 4нф, если оно удовлетворяет бкнф и примененная к отношениям полная декомпозиция является соединением ровно двух проекций.
- •5Нф: Отношение находится в 5нф, если оно удовлетворяет 4нф и отношения, не имеющие полной декомпозиции, приводятся к ней посредством разделения структур данных, а одинаковые структуры объединяются.
- •Задания
- •Этапы проектирования
- •Правила формирования отношений
- •Лабораторная работа № 4 Создание запросов с помощью sql
- •Сведения из теории
- •Порядок выполнения работы
- •Оглавление
Нормализация отношений
Рассмотрим процедуру нормализации отношения на примере. Пусть по требованию заказчика сформулирована следующая таблица:
TStudent (ФИО, Дата_рожд, Пол, №_паспорта, Дата_выдачи, Прописка, Дом_тел, Группа, Факультет)
В таком виде эта таблица не может использоваться как БД, т.к. будет содержать явно дублированные данные, одна и та же информация будет храниться в большом числе экземпляров. На первый взгляд дублирование в таблице не избыточное, оно допустимо в принципе, но нежелательно. Кроме того, возможны пустые ячейки в этой таблице, т.е. память для информации выделяется, а информации нет! Не исключены и указанные выше аномалии.
1Нф: Отношение находится в 1нф, если все его атрибуты являются простыми, т.Е. Имеют единственное значение, и в таблице отсутствуют повторяющиеся группы полей (строки).
Будем полагать, что студент имеет не более 1 ФИО, паспорта, прописки, домашнего телефона. Но студент может одновременно учиться в двух группах – получать дополнительное образование. Тогда приведенное отношение не удовлетворяет требованиям 1НФ. Поэтому выделим атрибуты Группа и Факультет в отдельное отношение TGruppa, а чтобы не утратить связь между студентом и группами, в которых он учится, создадим отношение TObuchenie.
TObuchenie (ФИО, Группа)
TStudent (ФИО, Дата_рожд, Пол, №_паспорта, Дата_выдачи, Прописка, Дом_тел)
TGruppa (Группа, Факультет)
Теперь отношения находятся в 1НФ.
2Нф: Отношение находится во 2нф, если оно удовлетворяет условию 1нф и каждый неключевой атрибут функционально полно зависит от первичного ключа.
Что можно выбрать в качестве первичного ключа? Напомню, что это атрибут (или группа атрибутов), однозначно определяющий кортеж отношения. Ключевые атрибуты не могут иметь значения Null (т.е. они должны быть обязательно определены) и не должны изменяться в ходе эксплуатации БД!
Таких атрибутов в отношении TStudent нет! У людей меняется все из указанного списка, кроме даты рождения, иногда даже пол! Но дата рождения не может однозначно идентифицировать кортеж отношения, поэтому дополнительно введем в отношение TStudent ключевой атрибут ID (идентификатор). В отношении TGruppa такой атрибут есть – это Группа. Можно его взять в качестве первичного ключа, но практический опыт проектировщиков БД рекомендует в качестве первичных ключей отношений выбирать только числовые поля–идентификаторы, заполняемые автоматически при вводе записей. Поэтому введем в отношение TGruppa такой атрибут ID_Gr. Аналогично в отношение TObuchenie введем ключевой атрибут ID_Ob. Получим следующие отношения:
TObuchenie (ID_Ob, ID, ID_Gr)
TStudent (ID, ФИО, Дата_рожд, Пол, №_паспорта, Дата_выдачи, Прописка, Дом_тел)
TGruppa (ID_Gr, Группа, Факультет)
В отношениях подчеркнуты первичные ключи.
Полная функциональная зависимость атрибута B от атрибута А означает, что каждому значению А соответствует ровно одно значение В (или ни одного).
Все неключевые поля удовлетворяют данному условию.
Эти отношения во 2НФ.