Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными (пособие).pdf
Скачиваний:
280
Добавлен:
21.05.2015
Размер:
5.42 Mб
Скачать

10. Проектирование базы данных

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

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

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

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

110

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

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

10.1. Функциональная зависимость

Функциональная зависимость (Functional Dependency) является связью типа многие-к-одному между множествами значений атрибутов внутри отношения. Отношение, при этом понимается в смысле переменной отношения, что подразумевает, что такого рода зависимость между значениями атрибутов имеет место при любых конкретных состояниях данного отношения.

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

Более строгая формулировка определения функциональной зависимости имеет следующий вид.

Пусть R является переменной отношения, а X и Y – произвольными подмножествами множества атрибутов отношения R. Говорят, что значение Y функционально зависит от значения X, тогда и только тогда, когда для любого допустимого значения отношения R каждое значение X связано в точности с одними значением Y.

Символически функциональная зависимость обозначается XY. Эта запись читается, как X функционально определяет Y или Y функционально зависит от X.

111

При этом атрибуты X называют детерминантом, а атрибуты Y зависимой частью функциональной зависимости.

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

В конкретном отношении обычно присутствует не одна, а множество функциональных зависимостей. Например, в отношении, представленном на рис. 10.1, ключом которого является составной атрибут {КОД_СТУД, ДИСЦИПЛИНА}, имеют место несколько функциональных зависимостей.

УСПЕВАЕМОСТЬ

КОД_СТУД

ИМЯ_СТУД

ДИСЦИПЛИНА

ОЦЕНКА

С2

Иванов

Физика

5

С2

Иванов

Математика

4

С2

Иванов

История

4

С2

Иванов

Информатика

5

С6

Смирнов

Физика

3

С6

Смирнов

Математика

4

С6

Смирнов

Информатика

3

С1

Попова

Математика

5

С1

Попова

Информатика

5

С1

Попова

Химия

4

С9

Иванов

Физика

5

С9

Иванов

Информатика

4

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

{КОД_СТУД, {КОД_СТУД, {КОД_СТУД, {КОД_СТУД, {КОД_СТУД, {КОД_СТУД,

ДИСЦИПЛИНА}{ИМЯ_СТУД} ДИСЦИПЛИНА}{ОЦЕНКА} ДИСЦИПЛИНА}{ИМЯ_СТУД, ОЦЕНКА} ДИСЦИПЛИНА, ИМЯ_СТУД}{ОЦЕНКА} ДИСЦИПЛИНА}{КОД_СТУД} ДИСЦИПЛИНА, ИМЯ_СТУД}{ДИСЦИПЛИНА}

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

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

Таким образом, в приведенном выше примере зависимости

{КОД_СТУД, ДИСЦИПЛИНА}{КОД_СТУД} и

112

{КОД_СТУД, ДИСЦИПЛИНА, ИМЯ_СТУД}{ДИСЦИПЛИНА}

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

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

{КОД_СТУД, ДИСЦИПЛИНА}{ИМЯ_СТУД, ОЦЕНКА}

следует из зависимостей

{КОД_СТУД, ДИСЦИПЛИНА}{ИМЯ_СТУД} и {КОД_СТУД, ДИСЦИПЛИНА}{ОЦЕНКА}.

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

Множество всех функциональных зависимостей, которые задаются данным множеством функциональных зависимостей S, т.е. могут быть выведены из этих зависимостей, называется замыканием (closure) множества зависимостей S и обозначается S+.

Правила, позволяющие из данного множества зависимостей S вывести его замыкание S+, называемые правилами Армстронга, имеют следующий вид.

Пусть A, B, C и D произвольные подмножества множества атрибутов заданного отношения R, тогда для них имеют место следующие правила.

Рефлексивность: если B является подмножеством A, то AB, т.е. ABA, BCB (это на самом деле тривиальная зависимость).

Дополнение: если AB, то ACBC. Транзитивность: если AB и BC, то AC.

Эти три правила являются полным набором, позволяющим вывести все зависимости, составляющие замыкание S+ множества зависимостей S. Из этих правил для упрощения задачи практического вычисления замыкания S+ можно вывести несколько следствий.

Самоопределение: AA.

Декомпозиция: если ABC, то AB и AC.

Объединение: если AB и AC, то ABC

Композиция: если AB и CD, то ACBD.