- •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. Резюме
12.4. Общая схема процедуры нормализации
До данного момента в этой (и предшествующей) главе описывалась технология декомпозиции без потерь, предназначенная для использования в процессе проектирования базы данных. Основная идея состоит в следующем. Пусть дана некоторая переменная-отношение R, представленная в ШФ, в совокупности с набором определенных для нее функциональных зависимостей, многозначных зависимостей и зависимостей соединения. Задача заключается в систематическом разбиении исходной переменной-отношения R на набор меньших (т.е. имеющих меньшую степень) переменных-отношений, который в некотором заданном смысле будет эквивалентен переменной-отношению R, но с определенной точки зрения будет более предпочтительным. (Исходная переменная-отношение R может быть получена за счет предварительного исключения тех атрибутов, которые принимают в качестве значений отношения, как было описано в разделе 12.2 или в ответе к упр. 11.3.) Каждый этап процесса нормализации заключается в разбиении на проекции переменных-отношений, полученных на предыдущем этапе. При этом на каждом этапе нормализации существующие ограничения используются для выбора тех проекций, которые будут получены в этот раз. Весь процесс можно неформально определить с помощью перечисленных ниже правил.
Переменную-отношение в ШФ следует разбить на такие проекции, которые позволят исключить все функциональные зависимости, не являющиеся неприводимыми. В результате будет получен набор переменных-отношений в 2НФ.
Полученные переменные-отношения в 2НФ следует разбить на такие проекции, которые позволят исключить все существующие транзитивные функциональные зависимости. В результате будет получен набор переменных-отношений в ЗНФ.
Полученные переменные-отношения в ЗНФ следует разбить на проекции, позволяющие исключить любые оставшиеся функциональные зависимости, в которых детерминанты не являются потенциальными ключами. В результате такого приведения будет получен набор переменных-отношений в НФБК.
Замечание. Правила 1-3 могут быть объединены в одно: "Исходную переменную-отношение следует разбить на проекции, позволяющие исключить все функциональные зависимости, в которых детерминанты не являются потенциальными ключами".
4. Полученные переменные-отношения в НФБК следует разбить на проекции, позво- ляющие исключить любые многозначные зависимости, которые не являются функ- циональными. В результате будет получен набор переменных-отношений в 4НФ.
Замечание. На практике такие многозначные зависимости обычно исключаются перед выполнением этапов 1-3 ("устранение независимых МЗЗ"), как упоминалось при рассмотрении примера с переменной-отношением СТХ в разделе 12.2.
5. Полученные переменные-отношения в 4НФ следует разбить на проекции, позво- ляющие исключить любые зависимости соединения, которые не подразумеваются потенциальными ключами (хотя в данном случае в определение следовало бы до- бавить фразу "если их удастся выявить"). В результате будет получен набор пере- менных-отношений в 5НФ.
По поводу приведенных выше правил можно сделать несколько дополнительных замечаний.
Процесс разбиения на проекции на каждом этапе должен быть выполнен без потерь и с сохранением зависимостей (там, где это возможно).
Обратите внимание, что (как было впервые отмечено Фейгином в [12.14]) существует довольно привлекательный набор следующих альтернативных определений НФБК, 4НФ и 5НФ.
■ Переменная-отношение R находится в НФБК тогда и только тогда, когда каждая функциональная зависимость подразумевается ее потенциальными ключами.
• Переменная-отношение R находится в 4НФ тогда и только тогда, когда каждая многозначная зависимость подразумевается ее потенциальными ключами.
■ Переменная-отношение R находится в 5НФ тогда и только тогда, когда каждая зависимость соединения подразумевается ее потенциальными ключами.
Аномалии обновления, обсуждавшиеся в главе 11 и в предыдущих разделах данной главы, были вызваны именно теми функциональными зависимостями, многозначными зависимостями или зависимостями соединения, которые не подразумевались потенциальными ключами.
3. Общее назначение процесса нормализации заключается в следующем:
исключение некоторых типов избыточности;
устранение некоторых аномалий обновления;
разработка проекта базы данных, который является достаточно "хорошим" представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения;
■ упрощение процедуры описания необходимых ограничений целостности. Последний пункт данного списка следует рассмотреть отдельно. Общая идея (как отмечалось ранее, в главах 8, 10 и др.) состоит в том, что одни ограничения целостности подразумевают другие ограничения, В качестве простейшего примера можно привести ограничение для суммы зарплаты, которая должна быть выше $10 ООО, а следовательно, выше нуля. Таким образом, если ограничение А подразумевает ограничение В, то после приведения в действие ограничения А будет автоматически задействовано также ограничение В (для этого даже не потребуется объявлять ограничение В явным образом, за исключением случаев, когда это будет сделано в виде комментария). Тогда приведение к 5НФ представляет собой простой путь наложения некоторых важных и весьма распространенных ограничений. Главное — обеспечить поддержку уникальности потенциальных ключей, после чего все зависимости соединения (а также все многозначные и функциональные зависимости) будут реализованы СУБД автоматически, поскольку все они подразумеваются потенциальными ключами.
4. Необходимо вновь подчеркнуть тот факт, что данные рекомендации по поводу нормализации являются всего лишь рекомендациями и, вероятно, могут сущест- вовать соображения, по которым нормализацию не следует выполнять предло- женным выше образом, причем "от начала и до конца". Классическим примером ситуации, когда полная нормализация не желательна, является переменная-
отношение типа "имя — адрес" NADDR (из упр. 11.7 главы 11), хотя следует признать, что этот пример не совсем убедителен. Как правило, нормализацию рекомендуется выполнять полностью.
Необходимо еще раз повторить сделанное в главе 11 замечание о том, что понятия зависимости и дальнейшей нормализации являются чисто семантическими, т.е. они связаны со смыслом данных, тогда как реляционная алгебра и реляционное исчисление, а также построенные на их основе языки наподобие SQL, наоборот, имеют дело со значениями данных и не требуют (да и не могут требовать) выполнения нормализации выше первого уровня. Рекомендации по выполнению дальнейшей нормализации должны рассматриваться, прежде всего, как некая упорядоченность, позволяющая разработчику базы данных (и, следовательно, ее пользователю) зафиксировать некую часть, пусть даже небольшую, семантики реального мира в простой и понятной форме.
Исходя из сказанного выше, необходимо отметить, что хотя идеи нормализации чрезвычайно полезны для проектирования баз данных, они вовсе не являются универсальным средством. Ниже перечислены некоторые причины подобного положения дел [12.9].
• Нормализация (как упоминалось выше, в главе 8) действительно позволяет реализовать (и в очень простой форме) определенные ограничения целостности, однако на практике, помимо зависимостей соединения, функциональных и многозначных зависимостей, существуют и другие типы ограничений.
Декомпозиция может быть неуникальной (как правило, имеется несколько способов приведения заданного набора переменных-отношений к 5НФ), однако существует очень мало критериев выбора наиболее предпочтительного варианта декомпозиции среди нескольких альтернативных.
Как упоминалось в разделе 11.5 (пример декомпозиции переменной-отношения SJT), преследование одновременно двух целей, т.е. приведение к НФБК и сохранение зависимостей, в некоторых случаях приводит к конфликтной ситуации.
Процедура нормализации позволяет избавиться от избыточности за счет разбиения на проекции, однако не всякую избыточность можно устранить таким образом ("проблема переменной-отношения CTXD", см. аннотацию к [12.13]).
Следует также отметить, что хорошие методики нисходящего проектирования позволяют тем или иным конкретным способом генерировать полностью нормализованный проект базы данных.