double arrow

Неоднозначные зависимости столбцов таблицы

Неоднозначные зависимости столбцов таблицы

Заметим, что в отношениях между столбцами таблицы есть некоторые логические несоответствия.

«Курс» и «Оценка» — атрибуты ученика, а «Количество уроков» относится не к «Ученику», а к «Курсу».

Ученик Курс Количество уроков Оценка
Иванов Игорь Базы данных, поток 54 от 12.11.2020   4.9
Павлова Анастасия Базы данных, поток 54 от 12.11.2020    
Иванов Игорь Linux. Рабочая станция, поток 48 от 02.10.2020    
Иванов Игорь Основы Python, поток 45 от 18.08.2020   4.9


Таблица 3. Атрибуты (зависимости) ученика. Красным цветом выделены данные, которые зависят от курса

Ученик Курс Количество уроков Оценка
Иванов Игорь Базы данных, поток 54 от 12.11.2020   4.9
Павлова Анастасия Базы данных, поток 54 от 12.11.2020    
Иванов Игорь Linux. Рабочая станция, поток 48 от 02.10.2020    
Иванов Игорь Основы Python, поток 45 от 18.08.2020   4.9


Таблица 4. Атрибуты (зависимости) курса, красным цветом выделены данные, которые зависят от ученика

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

Транзитивные зависимости, избыточность данных

Проанализируем содержимое столбца «Курс». Мы видим, что название курса, номер потока и дата начала обучения — атрибуты ученика. Но в то же время название курса и дата начала занятий рассматриваются и как атрибуты потока. Следовательно, мы всегда можем узнать название курса и дату начала занятий, зная только номер потока.

Ученик > (Название курса, Номер потока, Дата начала обучения, Оценка)

 

Название курса и дату начала обучения мы всегда узнаём по номеру потока:

Номер потока > (Название курса, Дата начала обучения)

 

В итоге получим следующую структуру:

Ученик > (Номер потока > (Название курса, Дата начала обучения), Оценка)

 

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

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

Избыточность данных определяется наличием дублированных значений. Такое дублирование приведёт к неэффективному использованию пространства на носителях, а также к усложнению операций с данными — одни и те же данные придётся добавлять или изменять сразу в нескольких местах.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: