- •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. Резюме
11.5. Нормальная форма Бойса-Кодда
В этом разделе отбрасывается применявшееся выше допущение о том, что каждая переменная-отношение имеет только один потенциальный ключ (а именно — первичный ключ), и рассматривается более общий случай. Дело в том, что первоначальное определение, данное Коддом для ЗНФ [10.4], не во всех случаях оказывается удовлетворительным. В частности, оно неадекватно при выполнении следующих условий.
Переменная-отношение имеет два (или более) потенциальных ключа.
Эти потенциальные ключи являются составными.
Два или более потенциальных ключей перекрываются (т.е. имеют по крайней мере один общий атрибут).
Поэтому впоследствии исходное определение ЗНФ было заменено более строгим определением Бойса-Кодда (Boyce/Codd) [11.2], для которого было установлено собственное название — нормальная форма Бойса-Кодда (или НФБК)10.
На
самом деле строгое определение "третьей"
нормальной формы, эквивалентное
определению нормальной формы
Бойса-Кодда, впервые было дано Хитом
(Heath)
в
1971 году [11.4] и эту форму следовало бы
назвать "нормальная форма Хита ".
Для объяснения концепции НФБК необходимо воспользоваться понятием детерминанта, введенным в главе 10 для ссылок на левую часть описания некоторой функциональной зависимости, а также понятием тривиальной функциональной зависимости, обозначающим такую ФЗ, левая часть которой является супермножеством правой части. Дадим определение НФБК.
■ Переменная-отношение находится в нормальной форме Бойса-Кодда тогда и только тогда, когда каждая ее нетривиальная и неприводимая слева функциональная зависимость имеет в качестве детерминанта некоторый потенциальный ключ.
Можно дать и другой, менее формальный вариант определения.
■ Переменная-отношение находится в нормальной форме Бойса-Кодда тогда и только тогда, когда детерминанты всех ее ФЗ являются потенциальными ключами.
Иначе говоря, на диаграмме функциональных зависимостей стрелки будут начинаться только с элементов, представляющих потенциальные ключи. Согласно данному выше определению никакие другие стрелки не допускаются и, следовательно, никакие стрелки не могут быть исключены с помощью описанной выше процедуры нормализации.
Замечание. Различие между двумя приведенными определениями НФБК состоит в том, что в менее формальном из них неявно подразумевается, что детерминанты "не слишком велики" и все ФЗ нетривиальны. Для простоты изложения далее в этой главе будут использованы такие же допущения, за исключением особо оговоренных случаев.
Стоит также отметить, что определение НФБК концептуально проще, чем данное ранее определение ЗНФ, поскольку в нем нет явных ссылок на первую и вторую нормальные формы, а также не используется концепция транзитивной зависимости. Кроме того, хотя (как отмечалось выше) определение НФБК является существенно более строгим, чем определение ЗНФ, любая переменная-отношение может быть подвергнута декомпозиции без потерь информации на некоторый эквивалентный набор переменных-отношений в НФБК.
Прежде чем рассматривать примеры переменных-отношений с несколькими потенциальными ключами, убедимся, что переменные-отношения FIRST и SECOND, которые не находятся в ЗНФ, также не находятся в НФБК. Кроме того, убедимся, что переменные-отношения SP, SC и CS, которые находятся в ЗНФ, также находятся в НФБК. Переменная-отношение FIRST содержит три детерминанта, а именно— St, CITY и {St, Pi}, из которых только {Si, Pi} является ее потенциальным ключом. Поэтому переменная-отношение FIRST не находится в НФБК. Аналогичное утверждение верно для переменной-отношения SECOND, поскольку детерминант CITY не является ее потенциальным ключом. С другой стороны, переменные-отношения SP, SC и CS находятся в НФБК, поскольку в каждом случае единственный потенциальный ключ является единственным детерминантом для данной переменной-отношения.
Теперь рассмотрим пример, содержащий два неперекрывающихся потенциальных ключа. Допустим, что в переменной-отношении поставщиков S с атрибутами {St, SNAME, STATUS, CITY} атрибуты St и SNAME являются ее потенциальными ключами (т.е. в этом случае каждый поставщик имеет уникальный номер и уникальное имя). Также предположим (как, впрочем, и всюду в этой книге), что атрибуты STATUS и CITY являются независимыми, т.е. введенная выше для некоторых частных целей функциональная зависимость CITY —> STATUS больше не имеет места. Тогда диаграмма функциональных зависимостей будет иметь вид, представленный на рис. 11.12.
s#
Рис. 11.12. Диаграмма функциональных зависимостей в переменной-отношении S для случая, когда атрибут SNAME является ее потенциальным ключом (и зависимость CITY -> STATUS не выполняется)
Данная переменная-отношение S находится в НФБК. Хотя ее диаграмма ФЗ существенно "сложнее" диаграммы ФЗ для переменной-отношения в ЗНФ, в этом случае все детерминанты являются потенциальными ключами, а все стрелки начинаются с потенциальных ключей. Таким образом, из данного примера можно сделать вывод, что наличие нескольких потенциальных ключей не так уж и плохо. (Однако весьма желательно, чтобы атрибут SNAME был описан как потенциальный ключ еще при определении базы данных, что позволит СУБД обеспечить строгую уникальность его значений.)
Теперь рассмотрим несколько примеров, в которых потенциальные ключи перекрываются. Потенциальные ключи перекрываются, если они содержат по два или более атрибутов и имеют хотя бы один общий атрибут.
Замечание. В соответствии с доводами, которые приводились в главе 8, в примерах этой главы из имеющихся потенциальных ключей первичный ключ выбираться не будет. Поэтому в представленных ниже таблицах никакие столбцы не будут выделяться с помощью двойной линии.
В первом примере рассмотрим переменную-отношение, в которой предполагается, что имена поставщиков уникальны.
SSP { SI, SNAME, Pt, QTY }
Потенциальными ключами в ней являются пары атрибутов {St, Pt} и {SNAME, Pt}. Однако эта переменная-отношение не находится в НФБК, так как она содержит два детерминанта, St и SNAME, которые не являются ее потенциальными ключами (St и SNAME — детерминанты, поскольку они определяют друг друга). Пример значений данных для переменной-отношения SSP показан на рис. 11.13.
SSP
s# |
SNAME |
P# |
QTY | |
SI |
|
Smith |
PI |
300 |
SI |
|
Smith |
P2 |
200 |
SI |
|
Smith |
P3 |
400 |
SI |
|
Smith |
P4 |
200 |
Рис. 11.13. Часть примера набора данных для переменной-отношения SSP
Как можно видеть, переменной-отношению SSP свойственна некоторая доля избыточности, присутствовавшей в переменной-отношении SCP (см. раздел 11.3) ив переменных-отношениях FIRST и SECOND (см. раздел 11.1), поэтому она характеризуется такими же аномалиями обновления. Например, изменение имени поставщика с номером 'S1' либо потребует найти все относящиеся к нему кортежи, либо приведет к переходу базы
данных в противоречивое состояние. Тем не менее переменная-отношение SSP находится в ЗНФ, поскольку согласно старому определению не требуется, чтобы атрибут был неприводимо зависим от каждого потенциального ключа, если он сам является компонентом некоторого потенциального ключа данной переменной-отношения. В результате тот факт, что атрибут SNAME приводимо зависим от атрибутов {Si, Pi}, данным определением игнорируется.
Замечание. Под термином "ЗНФ" здесь подразумевается определение, данное Коддом в [10.4], а не упрощенное определение, данное нами в разделе 11.3.
Для решения указанной проблемы переменную-отношение SSP следует разбить на две проекции.
SS { Si, SNAME } SP { Si, Pi, QTY }
Однако можно выбрать и альтернативный вариант разбиения.
SS { Si, SNAME }
SP { SNAME, Pi, QTY }
Обратите внимание, что в этом примере существует два варианта декомпозиции, причем в одинаковой мере допустимых, поскольку все входящие в них проекции находятся в НФБК.
Здесь следует сделать небольшое отступление и пояснить, что же происходит "в действительности". Ясно, что исходный вариант, состоящий из одной переменной-отношения SSP, неудачен и возникающие в связи с этим проблемы вполне очевидны. Маловероятно, чтобы подобный проект предложил более или менее опытный разработчик баз данных, даже если он совершенно не знаком с концепцией НФБК (и т.д.). Простой здравый смысл подскажет нам, что вариант с двумя переменными-отношениями SS и SP, несомненно, лучше. Однако что в данном случае подразумевается под "здравым смыслом" и в соответствии с какими принципами разработчику следует отдать предпочтение варианту с переменными-отношениями SS и SP вместо варианта с переменной-отношением SSP?
Безусловно, ответ заключается в том, что это именно принципы функциональной зависимости и нормальная форма Бойса-Кодда. Иначе говоря, рассматриваемые нами концепции (ФЗ, НФБК и все прочие формальные идеи, изложенные в этой и следующей главах) являются не более и не менее чем соображениями здравого смысла, записанными в формальном виде. Сутью излагаемой здесь теории является поиск и формулирование этих принципов здравого смысла, что, конечно же, является весьма непростой задачей. Однако, если такая задача будет нами решена, найденные принципы могут быть положены в основу решений автоматизации, т.е. можно будет написать программу, позволяющую выполнять проектирование с помощью компьютера. Критики методов нормализации обычно упускают этот момент из виду, совершенно справедливо заявляя, что данные идеи, в основном, представляют собой всего лишь соображения здравого смысла. Однако при этом не принимается во внимание, что возможность формальной и строгой формулировки "соображений здравого смысла" уже сама по себе является значительным достижением.
Теперь вернемся к основной теме данного раздела и рассмотрим второй пример с перекрывающимися потенциальными ключами. Обратимся к переменной-отношению SJT с атрибутами S, J и Т, которые представляют студента, изучаемый предмет и преподавателя соответственно (следует предупредить, что это всего лишь пример, к тому же доста
точно экзотический). Смысл каждого кортежа {S:s, J: j, T:t} переменной-отношения SJT состоит в том, что некоторый студент s изучает некоторый предмет j у некоторого преподавателя t. При этом на информацию накладываются следующие два ограничения.
Каждый студент изучает определенный предмет только у одного преподавателя.
Каждый преподаватель ведет только один предмет, однако каждый предмет может преподаваться несколькими преподавателями.
На рис. 11.14 показан пример данных в переменной-отношении SJT.
SJT
S |
J |
T |
Smith |
Math |
Prof. White |
Smith |
Physics |
Prof. Green |
Jones |
Math |
Prof. White |
Jones |
Physics |
Prof. Brown |
Рис. 11.14. Пример данных в переменной-отношении SJT
Какие функциональные зависимости существуют в этой переменной-отношении? Из первого ограничения следует зависимость атрибута Т от комбинации атрибутов {S, J}, а из второго— зависимость атрибута J от атрибута Т. Следовательно, диаграмма функциональных зависимостей переменной-отношении SJT будет иметь вид, представленный на рис. 11.15.
|
|
| ||
|
|
S J |
|
|
1 1 | ||||
|
| |||
|
|
|
Рис. 11.15. Диаграмма функциональных зависимостей в переменной-отношении SJT
И вновь в рассматриваемом примере присутствуют два перекрывающихся потенциальных ключа, а именно: комбинация {S, J} и комбинация {S, Т}. Как и в первом примере, исходная переменная-отношение SJT находится в ЗНФ, но не в НФБК, в связи с чем для нее будут характерны некоторые аномалии обновления. Например, если потребуется удалить сведения о том, что студент Джонс ('Jones') изучает физику, этого нельзя будет сделать, не утратив одновременно информацию о том, что профессор Браун ('Prof. Brown') преподает этот предмет. Подобные трудности вызваны тем, что атрибут Т является детерминантом, но не является потенциальным ключом. И вновь для решения указанной проблемы исходную переменную-отношение SJT следует разбить на две проекции, каждая из которых будет находиться в НФБК.
ST { S, Т } TJ { Т, J }
В качестве упражнения читателю предлагается составить таблицы с данными этих двух переменных-отношений (исходя из набора данных, представленных на рис. 11.14), а также нарисовать соответствующую диаграмму ФЗ для проверки, действительно ли две созданные проекции находятся в НФБК (какие атрибуты являются их потенциальными ключами?). Кроме того, читателю рекомендуется проверить тот факт, что данная декомпозиция позволяет устранить все существовавшие ранее аномалии обновления.
Однако следует отметить, что все еще существует иная проблема. Суть ее в том, что декомпозиция исходного отношения на проекции ST и TJ позволила исключить одни аномалии, однако привела к появлению других. Причиной является тот факт, что проекции ST и TJ не являются независимыми в смысле Риссанена (подробности приводятся выше в данной главе). Точнее говоря, функциональная зависимость {S, J} —> Т не может быть выведена из той единственной функциональной зависимости, которая присутствует в двух данных проекциях (Т —> J).
В результате две полученные проекции не могут обновляться независимо. Например, попытка вставить в переменную-отношение ST кортеж для студента Смита ('Smith') и профессора Брауна ('Prof. Brown') должна быть отвергнута системой, поскольку профессор Браун преподает физику, а Смит уже обучается физике у профессора Грина ('Prof. Green'). Однако обнаружить этот факт, не проверив содержимое переменной-отношения TJ, система не может. Таким образом, мы пришли к неприятному выводу о том, что попытка достижения двух целей, а именно — декомпозиции исходной переменной-отношения на переменные-отношения, находящиеся в НФБК, и декомпозиции исходной переменной-отношения на независимые компоненты, в некоторых случаях может привести к конфликтной ситуации. Поэтому достичь обе цели одновременно не всегда возможно.
Замечание. В действительности переменная-отношение SJT является атомарной (см. раздел 11.4) даже несмотря на то, что она не находится в НФБК. Однако тот факт, что атомарная переменная-отношение не может быть подвергнута декомпозиции на независимые компоненты, отнюдь не означает, что она вообще не может быть подвергнута декомпозиции (здесь под "декомпозицией" понимается декомпозиция без потерь). "Атомарная переменная-отношение" — не совсем подходящий термин для данной концепции, по крайней мере с интуитивной точки зрения, поскольку подобная атомарность не является ни необходимым, ни достаточным условием создания хорошего проекта базы данных.
В качестве третьего и последнего примера переменной-отношения с перекрывающимися потенциальными ключами рассмотрим переменную-отношение EXAM с атрибутами S (студент), J (предмет) и Р (позиция). Каждый кортеж {S:s, J: j, Р:р) переменной-отношения EXAM отражает сведения о том, что некоторый студент s экзаменуется по определенному предмету j и занимает определенную позицию р в списке экзаменующихся. Дополнительно условимся, что в нашем примере имеет место следующее ограничение.
■ Никакие два студента не могут занимать одну и ту же позицию в списке экзаменующихся по одному и тому же предмету.
В этом случае диаграмма функциональных зависимостей будет иметь вид, представленный на рис. 11.16.
В этом примере вновь присутствуют два перекрывающихся потенциальных ключа, {S, J} и (J, Р}, поскольку для каждого студента и предмета существует точно одна занимаемая позиция в соответствующем списке, а в каждом списке экзаменующихся по некоторому предмету каждую позицию занимает только один соответствующий студент. Однако такая переменная-отношение находится в НФБК, поскольку указанные потенциальные ключи являются ее единственными детерминантами. Поэтому для данной переменной-отношения не характерны какие-либо аномалии обновления, подобные упоминавшимся ранее в настоящей главе. (Упражнение. Проверьте правильность этого утверждения.) Таким образом, наличие перекрывающихся потенциальных ключей не всегда приводит к появлению проблем подобного рода.
В заключение следует подчеркнуть, что концепция НФБК позволяет избавиться от проблем, которые присущи формам, соответствующим старому определению ЗНФ. Более того, новое определение концептуально проще старого, так как в нем не используются понятия IНФ, 2НФ, первичного ключа или транзитивной зависимости. Дополнительно понятие потенциального ключа может быть заменено ссылкой на более фундаментальное понятие функциональной зависимости (в определении, данном в [11.2], имеет место именно такая замена). С другой стороны, концепции первичного ключа, транзитивной зависимости и т.д. весьма полезны на практике, поскольку позволяют сформулировать идею некоторого пошагового процесса, выполняемого разработчиком для приведения произвольной переменной-отношения к эквивалентному набору переменных-отношений в НФБК.
Наконец заметим, что в ответе к упр. 11.3 приведен алгоритм, по которому произвольная переменная-отношение может быть подвергнута декомпозиции без потерь информации с ее преобразованием в набор проекций, находящихся в НФБК.