Базы данных. Нормализация. Функциональные зависимости атрибутов. Примеры. Построение схем функциональных зависимостей

Нормализация. Функциональные зависимости атрибутов. Примеры. Построение схем функциональных зависимостей

Перед изучением данной темы рекомендуется ознакомиться с темой:

 


Содержание


Поиск на других ресурсах:




1. Понятие функциональной зависимости. Определение. Примеры

После того, как таблица приведена к первой нормальной форме 1НФ, нужно определить функциональную зависимость между атрибутами (полями, столбцами) таблицы. Это необходимо для обеспечения максимально-возможной рациональности в построении таблиц базы данных.

Функциональная зависимость — это связь, которая может возникнуть между сущностями, хранящимися в базе данных. Если сущность A функционально определяет сущность B, то такую зависимость принято обозначать следующим образом:

A → B

здесь

  • A – детерминант отношения;
  • B – зависимая часть.

Пример 1. Пусть дано отношение, которое определяет должностные оклады работников некоторого предприятия.

Базы данных. Таблица должностных окладов

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

Должность → Оклад

здесь Должность – детерминант, Оклад – зависимая часть.

Пример 2. Демонстрируется зависимость атрибута от составного (композитного) ключа. На рисунке 1 изображена таблица выпуска различных моделей автомобилей в разные годы.

Ключом отношения являются атрибуты МаркаМодельГод выпуска. Атрибут «Количество выпущенных моделей» зависит от ключа.

Базы данных. Функциональная зависимость атрибута от ключа

Рисунок 1. Функциональная зависимость атрибута «Количество выпущенных моделей» от ключа

 

2. Степени функциональной зависимости. Классификация

Различают следующие степени функциональной зависимости между атрибутами:

  • частичная зависимость. Эта зависимость может возникать в случаях, когда таблица содержит составной ключ. Составной ключ — это ключ таблицы, который состоит из нескольких атрибутов. Если ключ состоит из одного атрибута, то этот ключ является простым. При частичной зависимости один атрибут таблицы является зависимым от части ключа, то есть от отдельного атрибута, входящего в ключ отношения;
  • полная зависимость. Это случай, когда между атрибутами существует зависимость друг от друга;
  • транзитивная зависимость. Это зависимость, когда два атрибута связаны между собой через третий атрибут. Этот третий атрибут выступает посредником;
  • многозначная зависимость. Это случай, когда одному значению одного атрибута соответствует несколько значений другого атрибута.

 

3. Частичная зависимость. Примеры

Пример 1. Пусть дана следующая таблица.

Базы данных. Частичная зависимость. Таблица окладов сотрудников

Пусть в таблице первичным ключом выбрано комбинацию атрибутов Номер работникаДолжность. Этот ключ является составным. Между составным ключом Номер работникаДолжность и атрибутом Оклад существует функциональная зависимость. Это объясняется тем, что оклад работника зависит от занимаемой должности. Символически такую зависимость можно обозначить так: ДолжностьОклад.

Поскольку атрибут Оклад зависит только от части ключа (атрибута Должность) а не от всего ключа (Номер работникаДолжность), то эта функциональная зависимость является частичной.

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

Рисунок 2 схематически отображает частичную зависимость.

Базы данных. Частичная функциональная зависимость. Пример

Рисунок 2. Частичная зависимость атрибута Оклад от ключа отношения

Пример 2. Пусть дана таблица учета проведенных занятий в учебном заведении.

Базы данных. Частичная зависимость. Пример

Для обеспечения уникальности, ключом отношения выбрано атрибуты «Номер аудитории» — «Номер занятия» — «Дата» — «Преподаватель«. Поскольку, за преподавателем закреплена конкретная дисциплина, то атрибут Дисциплина является зависимым от атрибута Преподаватель. Это значит, что атрибут Дисциплина зависим от части ключа отношения, так как атрибут Преподаватель является частью ключа отношения. На рисунке 3 показана эта зависимость.

Базы данных. Нормализация. Частичная зависимость атрибута от ключа отношения

Рисунок 3. Частичная зависимость атрибута Дисциплина от ключа отношения

 

4. Полная функциональная зависимость. Примеры

Полная функциональная зависимость между двумя атрибутами — это случай, когда между двумя атрибутами A и B является прямая (AB) и обратная (BA) зависимость. При полной функциональной зависимости одному значению атрибута A соответствует только одно значение атрибута B. И, наоборот, одному значению атрибута B соответствует значение атрибута A.
Полная функциональная зависимость между двумя атрибутами A и B обозначается AB.

Пример 1. Пусть дана база данных учета учебного процесса, таблица которой содержит атрибуты

  • Год — учебный год;
  • Курс — курс обучения, на котором учится некоторый студент (группа).

Фрагмент таблицы базы данных следующий

Базы данных. Нормализация. Полная функциональная зависимость. Пример

Между этими атрибутами существует полная зависимость. Это означает, что за учебным годом можно определить курс, на котором учится студент. И, наоборот, по курсу обучения можно определить учебный год (при условии, что студент успешно сдал все сессии и не имеет задолженности по дисциплине «Организация баз данных и знаний» 🙂.

На схеме зависимостей такая связь обозначается следующим образом

Базы данных. Нормализация. Полная функциональная зависимость между атрибутами

Рисунок 4. Полная зависимость между атрибутами Год и Курс

Пример 2. Связь между идентификационным номером и именем гражданина. По имени гражданина можно определить идентификационный номер. И, наоборот, по идентификационному номеру можно определить имя гражданина.

 

5. Примеры транзитивной зависимости

Пример 1. Задана база данных, содержащая информацию о ходе учебного процесса в учебном заведении. В отношении (таблице) используются атрибуты (поля), имеющие транзитивные зависимости.

Базы данных. Нормализация. Транзитивная зависимость

Между атрибутами Преподаватель и Группа существует транзитивная зависимость (рисунок 5).

Базы данных. Нормализация. Транзитивная зависимость между атрибутами

Рисунок 5. Транзитивная зависимость между атрибутами Преподаватель и Группа

Рассуждения. За каждым преподавателем закреплена дисциплина. То есть атрибут Дисциплина функционально зависим от атрибута Преподаватель. Согласно учебному плану, каждая группа имеет перечень дисциплин, которые она должна изучить. По дисциплине можно определить группу (или несколько групп), в которых эта дисциплина преподается. Например, дисциплины компьютерного цикла (Базы данных) будут изучать группы компьютерных специальностей. Поэтому, между дисциплиной и группой также существует функциональная зависимость.

Поскольку, за каждой дисциплиной закреплен конкретный преподаватель, то между атрибутами Преподаватель и Группа существует транзитивная зависимость (Преподаватель преподает дисциплину в группе).

Пример 2. Пусть задана таблица начислений стипендии для студентов некоторой группы. Студенты могут учиться на госзаказе (бюджет) или по контракту.

Базы данных. Функциональные зависимости. Исходная таблица

От студента зависит вид договора на обучение: бюджет или контракт. Поэтому возникает функциональная зависимость между атрибутами Студент и Вид договора (рисунок 6).

Базы данных. Функциональная зависимость между атрибутами. Пример

Рисунок 6. Функциональная зависимость между атрибутами Студент и Вид договора

Вид договора влияет на размер стипендии. Если студент учится по контракту, то стипендия не начисляется. По размеру стипендии нельзя определить вид договора, поскольку студент может учиться на бюджете и не получать стипендию в связи с плохой успеваемостью. Поэтому, между атрибутами Вид договора и Стипендия существует следующая функциональная зависимость (рисунок 7).

Базы данных. Нормализация. Функциональная зависимость между атрибутами

Рисунок 7. Функциональная зависимость между атрибутами Вид договора и Стипендия

Значит между атрибутами Студент и Стипендия существует транзитивная зависимость (рисунок 8).

Базы данных. Нормализация. Пример транзитивной зависимости

Рисунок 8. Транзитивная зависимость между атрибутами Студент и Стипендия

 

6. Примеры многозначной зависимости

Пример 1. В учебном заведении преподаватель может преподавать не одну а несколько родственных дисциплин.

Базы данных. Нормализация. Многозначная зависимость. Исходная таблица

Между атрибутами Преподаватель и Дисциплина существует многозначная зависимость, потому что одному значению атрибута Преподаватель соответствует несколько значений атрибута Дисциплина. В данном примере принимается договоренность что одну дисциплину не может преподавать несколько преподавателей.

Пример 2. Задана таблица стоимости новых автомобилей.

Базы данных. Функциональные зависимости. Таблица стоимости автомобилей

Между атрибутами Марка и Модель существует многозначная зависимость. Это объясняется тем, что для одной марки (Renault) может существовать несколько значений моделей (Logan, Megane, Koleos).

 

7. Задача. Построить схему функциональных зависимостей между атрибутами отношения

Условие задачи. Задана таблица базы данных «Учет товаров в автомагазине», которая приведена к первой нормальной форме 1НФ. Таблица определяет товары, поступающие на склад и имеет следующую структуру

Базы данных. Построение форм функциональных зависимостей. Исходная таблица

Нужно построить схему зависимостей между атрибутами.

Решение. Схема зависимостей между атрибутами таблицы учета поступивших товаров на складе изображена на рисунке 9.

Базы данных. Нормализация. Построение схем зависимостей

Рисунок 9. Схема зависимостей между атрибутами

 

8. Задача. Построить схему функциональных зависимостей между атрибутами отношения

Задано таблицу базы данных магазина, которая отображает учет автозапчастей (товаров). Структура таблицы следующая

Базы данных. Построение схем функциональных зависимостей. Исходная таблица

Атрибуты Код, Товар, Группа, Номер и Дата определяют ключ отношения. Поскольку товар с тем же кодом может быть получен несколько раз (в разные даты и в разные номера заказов), то выбор ключа с одним атрибутом Код нецелесообразен.

Последовательность рассуждений при построении схемы функциональных зависимостей следующая.
Товар поступает в магазин на основании заказа для которого фиксируется номер и дата. Каждый поступивший товар идентифицируется кодом и названием поступления. Значит, имеем зависимость атрибутов Код, Товар от атрибутов Номер, Дата.
Товары группируются в группы (категории). Например, для магазина автозапчастей такими категориями товаров могут быть Шины, Аккумуляторы, Трансмиссия и тому подобное. Следовательно, возникает функциональная зависимость ГруппаНазвание.
Полученный товар поступает в определенном количестве и имеет стоимость. Значит, атрибуты Количество и Стоимость функционально зависимы от заказанного товара (пары атрибутов КодТовар).
С учетом изложенных соображений, схема функциональных зависимостей изображена на рисунке 10.

Базы данных. Нормализация. Схема функциональных зависимостей. Пример

Рисунок 10. Схема функциональных зависимостей. Учет автозапчастей в магазине

 

9. Понятие независимых атрибутов. Примеры

Между отдельными атрибутами базы данных могут отсутствовать какие-либо функциональные зависимости. Такие атрибуты называются независимыми друг от друга.

Пример. Задана таблица с данными о преподавателе.

Базы данных. Функциональные зависимости. Независимые атрибуты

В вышеприведенной таблице нет функциональной зависимости между следующими атрибутами:

  • Стаж и Дисциплина. Обозначается как Стаж ¬= Дисциплина;
  • АдресДисципліна. Обозначается Адрес ¬= Дисциплина;
  • СтажАдрес. Обозначается Стаж ¬= Адрес.

 


Связанные темы