Неоднозначные зависимости столбцов таблицы
Заметим, что в отношениях между столбцами таблицы есть некоторые логические несоответствия.
«Курс» и «Оценка» — атрибуты ученика, а «Количество уроков» относится не к «Ученику», а к «Курсу».
Ученик | Курс | Количество уроков | Оценка |
Иванов Игорь | Базы данных, поток 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. Атрибуты (зависимости) курса, красным цветом выделены данные, которые зависят от ученика
Разные зависимости в рамках одной таблицы неизбежно приведут к дублированию (избыточности) данных — для всех записей с одинаковым курсом проставится то же самое значение количества уроков.
|
|
Транзитивные зависимости, избыточность данных
Проанализируем содержимое столбца «Курс». Мы видим, что название курса, номер потока и дата начала обучения — атрибуты ученика. Но в то же время название курса и дата начала занятий рассматриваются и как атрибуты потока. Следовательно, мы всегда можем узнать название курса и дату начала занятий, зная только номер потока.
Ученик > (Название курса, Номер потока, Дата начала обучения, Оценка) |
Название курса и дату начала обучения мы всегда узнаём по номеру потока:
Номер потока > (Название курса, Дата начала обучения) |
В итоге получим следующую структуру:
Ученик > (Номер потока > (Название курса, Дата начала обучения), Оценка) |
Возможность получить значения некоторых атрибутов на основе других называется транзитивной зависимостью. В этом случае мы получаем значения атрибутов «Название курса» и «Дата начала занятий» по значению атрибута «Номер потока», поэтому это транзитивная связь.
На практике наличие транзитивных зависимостей также приводит к дублированию данных. Текущее представление данных в столбце «Курс» наглядно, но избыточно. Так, в таблице достаточно представить номер потока, а для отображения атрибутов потоков потребуется создать другое отношение (таблицу).
Избыточность данных определяется наличием дублированных значений. Такое дублирование приведёт к неэффективному использованию пространства на носителях, а также к усложнению операций с данными — одни и те же данные придётся добавлять или изменять сразу в нескольких местах.
|
|