- •7.7.6. Определить общее количество поставщиков
- •7.7.7. Определить в поставках максимальное
- •7.7.8. Для каждой поставляемой детали указать номер и общий объем поставки в штуках
- •7.7.9. Указать номера всех типов деталей, поставляемых более чем одним поставщиком
- •7.7.10. Определить имена поставщиков детали с номером т2'
- •7.7.11. Определить имена поставщиков по крайней мере одной красной детали
- •7.7.12. Указать номера поставщиков, статус которых меньше текущего максимального статуса
- •7.7.13. Указать имена поставщиков детали с номером 'р2'
- •7.7.14. Выбрать имена поставщиков, которые не поставляют деталь с номером 'р2'
- •7.7.15. Определить имена поставщиков всех типов деталей
- •7.7.16. Определить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 's2', либо и то, и другое
- •7.8. Резюме
- •8.2. Ограничения типа
- •8.3. Ограничения атрибута
- •8.4. Ограничения переменной-отношения
- •8.5. Ограничения баз данных
- •8.6. "Золотое правило"
- •8.7. Ограничения состояния и ограничения перехода
- •8.8. Ключи
- •3. Пусть r1 и r2 — ссылающаяся и ссылочная переменные-отношения соответственно.
- •8.9. Средства языка sql
- •8.10. Резюме
- •9.1. Введение
- •9.2. Для чего нужны представления
- •9.3. Выборка данных из представлений
- •9.4. Обновление данных в представлениях
- •9.5. Моментальные снимки
- •9.6. Поддержка представлений в языке sql
- •9.7. Резюме
- •Часть III
- •10.1. Введение
- •10.2. Основные определения
- •10.3. Тривиальные и нетривиальные зависимости
- •10.4. Замыкание множества зависимостей
- •10.5. Замыкание множества атрибутов
- •10.6. Неприводимые множества зависимостей
- •10.7. Резюме
- •Глава 1 1
- •I Переменные-отношения в знф I
- •11.2. Декомпозиция без потерь
- •11.3. Первая, вторая и третья нормальные формы
- •11.4. Сохранение зависимостей
- •11.5. Нормальная форма Бойса-Кодда
- •11.6. Замечание по поводу атрибутов, содержащих в качестве значений отношения
- •11.7. Резюме
- •12.1. Введение
- •12.2. Многозначные зависимости и четвертая нормальная форма
- •12.3. Зависимости соединения и пятая нормальная форма
- •Соединение по комбинации атрибутов j#,s#
- •Исходное состояние spj
- •12.4. Общая схема процедуры нормализации
- •12.5. Денормализация
- •12.6. Ортогональное проектирование (небольшое отступление от темы)
- •12.7. Другие нормальные формы
- •12.8. Резюме
- •12.3. Brosda V., Vossen g. Update and Retrieval Through a Universal Schema Interface // acm tods. — December, 1988. — 13, № 4.
- •12.5. Date c.J. Will the Real Fourth Normal Form Please Stand Up? // c. J. Date and Hugh Darwen. Relational Database Writings 1989-1991.— Reading, Mass.: Addison-Wesley, 1992.
- •12.20.Kent w. The Universal Relation Revisited // acm tods. — December, 1983. — 8, № 4.
- •12.22.Maier d., Ullman j.D. Fragments of Relations // Proc. 1983 sigmod Intern. Conf. On Management of Data. — San Jose, Calif. — May, 1983.
- •12.24.Maier d., Ullman j.D. Maximal Objects and the Semantics of Universal Relation Databases // acm tods. — March, 1983. — 8, № 1.
- •Глава 13
- •13.1. Введение
- •13.2. Общий подход
- •Каждыи экземпляр сущности ности «Произведение"
- •13.3. Модель "сущность/связь"
- •13.5. Проектирование базы данных с помощью метода er-моделирования
- •13.6. Краткий анализ er-модели
- •13.7. Резюме
10.1. Введение
В этой главе речь пойдет о концепции функциональной зависимости, которая если "не совсем фундаментальна, то очень близка к таковой" [10.7]. Эта концепция лежит в основе многих обсуждаемых в последующих главах тем, включая, в частности, теорию проектирования базы данных, описанную в главе 11.
По сути, функциональная зависимость (далее для ее обозначения часто будет использоваться аббревиатура ФЗ) является связью типа "многие к одному" между множествами атрибутов внутри данной переменной-отношения. Например, для переменной-отношения поставок SP существует функциональная зависимость между множествами атрибутов {Sf ,Р|} и {QTY}. Это означает, что для любого допустимого значения этой переменной-отношения справедливы следующие правила.
Для любой заданной пары значений атрибутов Si и Pt существует только одно соответствующее им значение атрибута QTY.
Многие разные пары значений атрибутов St и Pt могут иметь одно и то же соответствующее им значение атрибута QTY (в общем случае).
Обратите внимание, что в показанном на рис. 3.8 примере значения переменной-отношения SP удовлетворяют этим правилам.
В разделе 10.2 этой главы концепция функциональной зависимости определяется более точно, с разделением функциональных зависимостей на выполняемые лишь в некоторых частных случаях и выполняемые всегда. Как говорилось выше, функциональные зависимости представляют собой основу для применения научного подхода к решению нескольких практических задач, поскольку обладают богатым набором интересных формальных свойств, позволяющих формально и строго решить многие проблемы. Ниже, в разделах 10.3-10.6, будут подробно описаны некоторые из этих формальных свойств и даны объяснения по поводу их практического применения. В конце главы, в разделе 10.7, представлено краткое резюме.
Замечание. При первом чтении этой главы многие разделы можно пропустить, поскольку большая часть материала, необходимого для понимания проводимого в последующих главах обсуждения, содержится в разделах 10.2 и 10.3. Поэтому все остальные разделы можно лишь просмотреть, а затем вновь вернуться к ним, ознакомившись со остальными тремя главами этой части.
Небольшое замечание в отношении используемой терминологии. В англоязычной литературе одновременно употребляются два термина; functional dependence и functional dependency. Согласно нормам использования английского языка термин "dependence" следовало бы применять для обозначения самой функциональной зависимости, а термин "dependency" — для обозначения зависимых объектов. Однако термин "функциональная зависимость" часто приходится применять во множественном числе, а в таких случаях термин "dependencies" кажется более удобным для произношения, чем "dependences". Именно это и определяет смешанное использование обоих терминов.
10.2. Основные определения
Для демонстрации основных идей данного раздела используется несколько измененная версия переменной-отношения поставок, которая в дополнение к обычным атрибутам Si, Pi и QTY будет содержать также атрибут CITY, представляющий город соответствующего поставщика. Во избежание путаницы далее эту измененную переменную-отношение мы будем называть SCP. Она представлена на рис. 10.1 в виде таблицы.
|
s# |
CITY |
P# |
QTY |
|
SI |
London |
PI |
100 |
|
SI |
London |
P2 |
100 |
|
S2 |
Paris |
PI |
200 |
|
S2 |
Paris |
P2 |
200 |
|
S3 |
Paris |
P2 |
300 |
|
S4 |
London |
P2 |
400 |
|
S4 |
London |
P4 |
400 |
|
S4 |
London |
P5 |
400 |
Рис. 10.1. Пример значения переменной-отношения SCP
Следует четко различать а) значение переменной-отношения в определенный момент; б) набор всех возможных значений, которые переменная-отношение может принимать в различные моменты. Сначала дадим определение концепции функциональной зависимости для п. а, а затем — для п. б.
■ Пусть г является отношением, а X и Y — произвольными подмножествами множества атрибутов отношения г. Тогда Y функционально зависимо от X, что в символическом виде записывается как
X -> Y
(читается либо как "X функционально определяет Y", либо как "X стрелка Y") тогда и только тогда, когда каждое значение множества X отношения г связано в точности с одним значением множества Y отношения г. Иначе говоря, если два кортежа отношения г совпадают по значению X, они совпадают и по значению Y.
Например, отношение scp (см. рис. 10.1) удовлетворяет требованиям для приведенной ниже функциональной зависимости, поскольку все кортежи отношения scp с одинаковыми значениями атрибута s# имеют одно и то же значение атрибута city.
{ Si } -» { city }
На самом деле это отношение удовлетворяет требованиям сразу нескольких функциональных зависимостей.
{ Si, Pi } -» { qty }
{ Si, Pi } -4 { city }
{ Si, Pi } -» { city, qty }
{ Si, Pi } -» { Si }
{ Si, Pi } -> { si, Pi, city, qty }
{ Si } -> { qty } { qty } —> { Si }
Упражнение. Проверьте правильность этого утверждения.
Левая и правая части символической записи функциональной зависимости иногда называются детерминантом и зависимой частью соответственно. Как говорится в определении, детерминант и зависимая часть являются множествами атрибутов. Когда множество содержит только один атрибут, оно называется одноэлементным множеством, скобки опускаются и символическая запись принимает следующий вид.
Si -> city
Как уже было замечено, эти функциональные зависимости относятся к п. а, т.е. к отдельным значениям переменных-отношений. Однако при рассмотрении самих переменных-отношений, в частности базовых переменных-отношений, интерес представляют не столько функциональные зависимости в их существующих на некоторый момент конкретных значениях, сколько функциональные зависимости, выполняющиеся для всех возможных значений данной переменной-отношения. Например, в случае переменной-отношения scp функциональная зависимость
Si -» city
выполняется для всех возможных значений переменной-отношения scp, поскольку в любой момент одному поставщику соответствует в точности один город. По этой причине любые два кортежа переменной-отношения scp в один и тот же момент и с одним и тем же номером поставщика должны соответствовать одному и тому же городу. Практически утверждение, что данная функциональная зависимость выполняется "всегда" (т.е. для всех возможных значений scp), является ограничением целостности для переменной-отношения scp, поскольку при этом накладываются определенные ограничения на все ее допустимые значения. Вот формулировка этого ограничения, которая выполнена с использованием синтаксиса, введенного в главе 10.
constraint Si_city_fd
count ( scp { Si } ) = count { scp { Si, city } ) ;
Выражение s# —» city может расцениваться как сокращенный способ представления этой более длинной формулировки.
Ниже приведено определение концепции функциональной зависимости для п. б (расширения определения, данного для п. а, отмечены полужирным шрифтом).
■ Пусть R является переменной-отношением, а X и y — произвольными подмножествами множества атрибутов переменной-отношения r. Тогда y функционально зависимо от X, что в символическом виде записывается как
X —> y
(и читается либо как "X функционально определяет y", либо как "X стрелка y") тогда и только тогда, когда для любого допустимого значения переменной-отношения r каждое значение множества X отношения r связано в точности с одним значением множества y отношения r. Иначе говоря, для любого допустимого значения переменной-отношения r, если два кортежа переменной-отношения r совпадают по значению X, они также совпадают и по значению y.
Следовательно, далее термин "функциональная зависимость" будет использоваться в последнем безотносительном ко времени смысле (за исключением особо оговоренных случаев).
Ниже перечислено несколько безотносительных ко времени функциональных зависимостей, выполняющихся для переменной-отношения scp.
{ St, Pi } -> qty
{ si, Pi } -» city
{ Si, Pi } -» { city, qty }
{ si, Pi } -» si
{ si, Pi } -> { Si, Pi, cm, qty }
{ Si } -4 city
Обратите внимание, в частности, на функциональные зависимости, которые выполняются для отношения, представленного на рис. 10.1, но не выполняются "всегда" для переменной-отношения scp.
Si -> qty qty -» Si
Иначе говоря, такое утверждение, как "число деталей для каждой поставки данного поставщика одинаково", истинно для конкретных значений, присутствующих в отношении на рис. 10.1, но ложно для всех возможных допустимых значений переменной-отношения scp.
Следует отметить, что если X является потенциальным ключом переменной-отношения r, то все атрибуты y переменной-отношения r должны обязательно быть функционально зависимы от X (этот факт упоминается в разделе 8.8 и непосредственно следует из определения потенциального ключа). Аналогично в переменной-отношении деталей р необходимо, чтобы всегда выполнялась следующая зависимость.
р# -»{ р#, pname, color, weight, city }
Действительно, если переменная-отношение R удовлетворяет функциональной зависимости А —» В и А не является потенциальным ключом1, то R будет характеризоваться некоторой избыточностью. Например, если обратиться к переменной-отношению SCP, наличие в ней функциональной зависимости St —» CITY приведет к тому, что сведения о месте расположения поставщика в определенном городе повторятся много раз (это хорошо видно на рис. 10.1). Подробнее данный вопрос обсуждается в следующей главе.
Теперь, даже если ограничиться рассмотрением функциональных зависимостей, которые имеют место в любой момент, полный набор функциональных зависимостей, выполняющихся для всех допустимых значений заданной переменной-отношения, может быть все еще очень большим, что можно видеть на примере переменной-отношения SCP. (Упражнение. Попробуйте записать полное множество функциональных зависимостей, существующих в переменной-отношении SCP.) Большая часть оставшегося в этой главе материала посвящена поискам методов сокращения обширного множества функциональных зависимостей до некоторых допустимых размеров.
Почему эта цель столь важна? Как уже отмечалось, одна из причин состоит в том, что функциональные зависимости являются ограничениями целостности, поэтому при каждом обновлении данных в базе СУБД вынуждена будет проверять соблюдение всех этих ограничений. Следовательно, для каждого заданного множества функциональных зависимостей S желательно найти такое множество Т, которое (в идеальной ситуации) было бы существенно меньше множества S и при этом каждая функциональная зависимость в множестве S могла бы быть заменена функциональной зависимостью из множества Т. Если бы такое множество Т было найдено, то СУБД достаточно было бы контролировать выполнение функциональных зависимостей из множества Т, что автоматически подразумевало бы соблюдение всех функциональных зависимостей из множества S. Именно поэтому задача поиска подходящего множества Т представляет большой практический интерес.
