- •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. Резюме
3. Пусть r1 и r2 — ссылающаяся и ссылочная переменные-отношения соответственно.
R2 ) R1
И пусть для этого ссылочного ограничения установлено правило удаления CASCADE. Тогда удаление некоторого кортежа из переменной-отношения R1 в общем случае повлечет за собой удаление определенных кортежей переменной-отношения R2. Теперь предположим, что на переменную-отношение R2, в свою очередь, ссылается некоторая переменная-отношение R3.
R3 > R2 > R1
Тогда результат неявного удаления кортежей из переменной-отношения R2 по сути ничем не будет отличаться от попытки непосредственного удаления этих кортежей явно заданной операцией удаления. Иначе говоря, выполнение неявного удаления требует соблюдения правила удаления, установленного как ограничение ссылочной целостности между переменными-отношениями R3 и R2. Если в результате требуемое удаление выполнено не будет (согласно установленному правилу удаления для ссылочной зависимости между переменными-отношениями R3 и R2 или же по какой-либо другой причине), то должно быть отменено и выполнение всей операции в целом, а база данных сохранена в неизменном состоянии. И так далее рекурсивно для любого количества уровней.
Аналогичные замечания можно сделать в отношении правил каскадного обновления, потребовав распространения необходимых изменений, если внешний ключ в переменной-отношении R2 имеет какие-либо общие атрибуты с потенциальным ключом той переменной-отношения, на которую ссылается внешний ключ в переменной-отношении R3.
4. Из сказанного выше следует, что с логической точки зрения операции обновления базы данных всегда атомарны (все или ничего), даже в том случае, когда из-за ус- тановленного правила каскадного распространения изменений они неявно выпол- няют несколько обновлений в нескольких переменных-отношениях.
Триггерные процедуры
В предыдущем подразделе в качестве одного из возможных решений проблемы поддержки ссылочной целостности предлагалось применять пользовательские процедуры. У читателя, по-видимому, нет никаких сомнений в том, что в общем концепция ссылочных действий относится, скорее всего, не к ограничениям целостности как таковым, а к области триггерных процедур. Триггерные процедуры, которые в литературе часто называют просто триггерами, автоматически вызываются, как только происходит некоторое событие (или условие запуска). Обычно условием запуска является выполнение некоторой операции обновления базы данных, но это может быть и определенная исключи
тельная ситуация (в частности, нарушение некоторого установленного ограничения целостности) или истечение заданного времени. Простейшим примером триггерной процедуры могут служить ссылочные действия, выполняемые при указании спецификатора CASCADE (заметьте, при декларативном указании!).
В общем случае триггерные процедуры могут применяться и для решения более широкого круга проблем, а не только для рассматриваемых в этом разделе вопросов обеспечения ссылочной целостности. (С перечнем таких применений можно ознакомиться в [8.1].) Однако это большая самостоятельная тема, которая выходит далеко за рамки данной книги. (Заинтересованный читатель может обратиться к [8.22], где эти вопросы излагаются подробно.) Хотелось бы отметить, что, несмотря на то что использование триг-герных процедур может быть чрезвычайно полезным для достижения самых различных целей, его не следует считать хорошим подходом для обеспечения целостности базы данных по очевидным причинам: декларативный подход, если он только возможен, всегда предпочтительнее.
Замечание. Последнее высказывание не означает, что использование ссылочных операций — это плохая идея. По крайней мере (как уже отмечалось выше), когда для реализации ссылочных действий потребуется использовать некоторые процедуры, это должно указываться декларативно.
