- •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.4. Сохранение зависимостей
|
CITY | ||
1 |
| ||
s# |
|
|
|
1 |
|
STATUS | |
|
В разделе 11.3 отмечалось, что аномалии обновления, сопровождающие переменную-отношение SECOND, можно преодолеть посредством ее декомпозиции с последующей заменой двумя проекциями в ЗНФ. Рис. 11.11. Функциональные
зависимости в пере-
SC { St, CITY } менной-отношении
CS { CITY, STATUS } SECOND
Назовем эту декомпозицию просто "декомпозиция А", имея в виду, что существует альтернативный вариант декомпозиции (декомпозиция В).
SC { Si, CITY } SS { Si, STATUS }
При этом проекции SC одинаковы и для варианта А, и для варианта В. Декомпозиция В также выполняется без потери информации, и обе ее проекции находятся в ЗНФ. Однако по некоторым причинам декомпозиция В менее желательна, чем декомпозиция А. Например, после выполнения декомпозиции В по-прежнему будет невозможно ввести информацию о том, что некоторый город имеет определенный статус, не указав конкретного поставщика из этого города.
Рассмотрим этот пример подробнее. Прежде всего заметим, что зависимости, использованные для создания проекций в декомпозиции А, соответствуют сплошными стрелкам (см. рис. 11.11), тогда как одна из зависимостей, использованная для создания проекций в декомпозиции В, отмечена пунктирной стрелкой. В декомпозиции А обе проекции независимы одна от другой в том смысле, что обновления в каждой из них могут выполняться совершенно независимо9. Если гарантируется, что выполняемые обновления будут допустимы в контексте данной проекции (т.е. уникальность ее первичного ключа не нарушается), то соединение этих двух проекций после обновления всегда будет иметь результатом допустимое значение переменной-отношения SECOND. Это следует понимать так, что при соединении не будут нарушаться ограничения, наложенные на функциональные зависимости в переменной-отношении SECOND. Однако в случае декомпозиции В вносимые в любую из двух проекций обновления должны тщательно контролироваться, чтобы исключить возможные нарушения функциональной зависимости CITY —» STATUS. (Нарушения могут иметь место, если два и более поставщиков находятся в одном и том же городе; в этом случае они должны иметь один статус. В качестве примера разберите случай, когда в декомпозиции В поставщик с номером ' S1' перемещается из Лондона в Париж.) Иначе говоря, две проекции декомпозиции В не являются независимыми одна от другой.
Основная проблема заключается в том, что в декомпозиции В функциональная зависимость CITY —> STATUS превращается (в соответствии с терминологией главы 8) в ограничение базы данных, охватывающее две переменные-отношения. (Следует отметить, что во многих современных программных продуктах подобные ограничения поддерживаются с помощью собственных пользовательских процедур.) В противоположность этому в декомпозиции А ограничением базы данных является транзитивная зависимость Si —» STATUS, которая автоматически выполняется в случае выполнения двух ограничений переменных-отношений: Si —> STATUS и CITY —> STATUS. Реализовать эти ограничения очень просто, поскольку по сути они представляют собой требования поддержки уникальности значений первичных ключей в соответствующих переменных-отношениях.
9
Конечно, за исключением соблюдения
ограничения целостности, установленного
для переменных-отношений SC
и
CS
предпочтительнее вариантов, в которых проекции будут зависимы. Риссанен (Rissanen) [11.6] показал, что проекции R1 и R2 переменной-отношения R будут независимы в упомянутом выше смысле тогда и только тогда, когда:
каждая функциональная зависимость в переменной-отношении R является логическим следствием функциональных зависимостей в ее проекциях R1 и R2;
общие атрибуты проекций R1 и R2 образуют потенциальный ключ по крайней мере для одной из этих проекций.
Рассмотрим заданные выше декомпозиции А и В. В декомпозиции А обе проекции независимы, поскольку их общий атрибут CITY является первичным ключом для переменной-отношения CS и каждая функциональная зависимость переменной-отношения SECOND либо представлена в одной из проекций, либо является логическим следствием других имеющихся в них ФЗ. В декомпозиции В, наоборот, две составляющие ее проекции не являются независимыми, поскольку функциональная зависимость CITY -> STATUS не может быть выведена из ФЗ, существующих в этих проекциях, даже несмотря на то, что их общий атрибут St является потенциальным ключом для обеих проекций.
Замечание. Третий вариант декомпозиции с заменой переменной-отношения SECOND проекциями {Si, STATUS} и {CITY, STATUS} не является допустимой декомпозицией, поскольку сопровождается потерей информации. (Упражнение. Докажите это утверждение.)
Переменная-отношение, которая не может быть подвергнута декомпозиции с получением независимых проекций, называется атомарной [11.6]. Однако это вовсе не означает, что каждую неатомарную (в указанном смысле) переменную-отношение следует непременно разбить на атомарные компоненты. Например, переменные-отношения S и Р из упоминавшейся выше базы данных поставщиков и деталей не являются атомарными, однако дальнейшая их декомпозиция имела бы мало смысла. Переменная-отношение SP, наоборот, является атомарной.
Идея о том, что нормализация всегда должна предусматривать декомпозицию переменных-отношений на независимые проекции (в определенном Риссаненом смысле) получила название требования сохранения зависимостей. В заключение приведем несколько более строгих замечаний по поводу этой концепции.
Пусть дана переменная-отношение R, которая после выполнения всех этапов нормализации заменяется множеством переменных-отношений Rl, R2, Rn (конечно, все они являются проекциями переменной-отношения R).
Пусть также задано множество функциональных зависимостей S, имеющих место в исходной переменной-отношении R, и множество функциональных зависимостей SI, S2, Sri, выполняющихся в переменных-отношениях Rl, R2, Rn.
Каждая функциональная зависимость в множестве Si будет иметь отношение только к атрибутам проекции Ri (где i=l, 2, 3, п). В результате реализация ограничений (устанавливаемых существующими ФЗ) для любого данного множества Si представляется достаточно простой задачей. Однако в действительности необходимо реализовать все ограничения, определяемые исходным множеством функциональных зависимостей S. Следовательно, целесообразно выбрать такой вариант
декомпозиции исходной переменной-отношения на проекции Rl, R2, Rn, при котором совместный эффект от реализации ограничений для отдельных множеств SI, S2, Sn будет эквивалентен реализации всех ограничений для исходного множества функциональных зависимостей S. Иначе говоря, декомпозиция должна выполняться с сохранением зависимостей.
Пусть S' является объединением множеств зависимостей SI, S2, Sn. Обратите внимание на то, что в общем случае равенство S'=S не выполняется. Для декомпозиции с сохранением зависимостей достаточно, чтобы были равны замыкания множеств S и S' (понятие замыкания множества функциональных зависимостей рассматривалось в разделе 10.4).
В общем случае не существует эффективного метода вычисления замыкания S+ для заданного множества функциональных зависимостей, поэтому на практике вычисление и сравнение двух необходимых замыканий осуществить сложно. Тем не менее существует эффективный метод проверки, будет ли декомпозиция выполняться с сохранением зависимостей. Описание подробностей этого алгоритма выходит за рамки данной книги, однако заинтересованный читатель сможет найти его в книге Ульмана (Ullman) [7.13].
Замечание. В ответе к упр. 11.3 приведен алгоритм выполнения декомпозиции без потерь (и с сохранением существующих функциональных зависимостей) для произвольной переменной-отношения, позволяющий разбить ее на некоторое множество проекций в ЗНФ.