Введение в системы БД (542480), страница 81
Текст из файла (страница 81)
Ке(егепйа[ 1п!ейгцу апс! гоге!Еп Кеуз. (в двух частях) 0 Ке1айопа! РагаЬазе 8.10 9!гг!1!п8з 1985-1989. — Кеайп„*, Маьвл А<И!зоп-'эЧез!еу, 1990. В первой части этой обширной статьи обсуждается история понятия ссылочной целостности, а также предлагается ряд основных определений (с пояснениями). Во второй части рассматриваются расширенные аргументы в пользу приведенных определений и даюзся некоторые практические рекомендации.
В частности, обсуждаются проблемы, вызванные перекрывающимися внешними ключами, значениями составных внешних ключей, частично представленными Ы()) ) -значениями, и смежные ссылочные пути (т.е. различные ссылочные пути, начальная и конечная точки которых совпадают). Замечание. Определенные позиции этой статьи несколько (не очень существенно) опровергаются аргументами статьи [8.13]. %г!!!п8я 1985 — 1989. — Кеайпй, Маза.. Аоо!яоп-)Чез!еу, ! 990. Цитата из резюме: "В этой статье прелпринята попытка наложить некоторую структуру на проблему [целостности] с помощью предлагаемой схемы классификации для ограничений целостности, использования этой схемы для объяснения основополагающих понятий целостности данных, краткого описания подхода к созданию конкретного языка формулирования ограничений целостности и определения некоторых областей для дальнейшего исследования". Эта глава частично ос- ззз Глава 11.
Целослгноеть данных 8.11. Раге Сдй А Соп!НЬцйоп го йе Я!цбу ог" РагаЬазе!псеЕН!у 0 Ке1айопа1 РасаЬазе новывается на материале данной статьи, но саму предлагаемую схему классифика- ции следует рассматривать как устаревшую и подлежащую замене пересмотренной версией, описанной в разделах 8.2-8.5 настоящей главы. Раге С.), !и!ейп!У 77 СЬаР!ег 11 о( Сьй Раге апд Со!ш Л. %Ь1ге. А ОцЫе го РВ2 (41Ь ей). — Кеайпй, Маваг Адд!зоп-Фез!еу, 1993.
Во время написания этой книги СУБД РВ2 корпорации 1ВМ обеспечивала дек- ларативную поддержку первичных и внешних ключей (одна из первых, если не 8.12. первая, СУБД орели всех коммерческих СУБД). Следует отметить, что в СУБД РВ2 упомянутая поддержка пострадала от введения в реализации нескольких ог- раничений, общее назначение которых состояло в обеспечении предсназуе.мага поведения системы. Приведем простой пример. Пусть переменная-отношение й содержит только 2 кортежа со значениями первичного ключа, равными 1 и 2 соответственно. Рассмотрим следующий запрос на обновление: "Удвоить каждое значение первичного ключа в переменной-отношении к". При правильном выполнении запроса новые значения первичных ключей в кортежах будут равны 2 и 4 соответственно. Если в СУБД РВ2 вначале будет обновляться значение 2 (оно заменяется значением 4), а затем — значение 1 (оно заменяется значением 2), то запрос будет выполнен успешно.
Но если вначале попьпаться обновить значение 1 (заменяя его значением 2), то будет утрачена уникальность значений первичного ключа и запрос не будет выполнен (база данных останется неизменной). Итак, мы видим, что результат выполнения запроса непредсказуем. Чтобы избежать подобной непредсказуемости, в СУБД РВ2 просто запрещены ситуации, в которых она может возникнуть. Однако, к сожалению, некоторые из этих ограничений довольно жесткие (8.17).
Обратите внимание, что в предыдущем примере система выполняет "немедленную проверку", т.е. правила целостности применяются лля каждого кортежа непосред- отвеина в.момент ега обновления. Такой способ проверки логически неоправдан (операции обновления обсуждались в разделе 5.4 главы 5) и осуществляется лишь в целях повышения производительности. Раге Сай ТЬе Рппзасу оГ Рпгпагу Кеуз: Ап 1пчезбйабоп 77 йе!абопа1 РагаЬазе %пг1пйз 1991 — 1994.
— Кеад!п8, Мазах Адйзоп-'чуев!еу, 1995. Здесь представлены аргументы в поддержку позиции, которая в некоторых случаях не совсем правильна: сдела~ь один из потенциальных ключей ~аким, чтобы он был "больше остальных либо равным остальным". 8.13 !978 АСМ Б!ОМОР 1п!егп, Сопй оп Мапайегпепг ог" Раса. — Ацзг!и, Техаз, Мау/)цпе, 1978.
В статье схематически представлен алгоритм генерации процедур проверки целостности (для соответствующих ограничений целостности), которые будут более эффективны, чем очевидный метод "грубой силы" с простой оценкой установленных ограничений после полного выполнения операции обновления. Данные проверки вставляются в объектный код транзакции на этапе компиляции. В некоторых случаях удается обнаружить, что во время выполнения проверки не нужны.
И даже если в них возникнет необходимость, часто можно различными способами значительно сократить количество операций доступа к базе данных. 334 Часть П. Реляционная модель 8.14. Напнпег М.М., Бапп Б.К. Е%с!епг Мопйоппй ог" РагаЬазе Аьвегбопз П Ргос. 8.18. Ногоидгг В. М. А Кип-Т]ше Ехесшюп Моде! бог Кебегепйа] !пге8П!у Ма!пгепапсе // Ргос. 81Ь! пгегп, Рага Епй]пеег!пй Сопб — Р1юеп!х, Апх., РеЬгиагу, ! 992. Хорошо известно, что определенные комбинации 1, ссылочных структур (т.е.
наборов переменных-отношений, связанных между собой с помощью ссылочных ограничений); 2. правил удаления и обновления внешних ключей; 3. реальных значений данных в базе данных могут привести к возникновению некоторых конфликтных ситуаций и потенциально стать причиной непредсказуемого поведения в части реализации (см. (8.10], где можно найти подробные объяснения).
Существует три общих подхода к решению подобных проблем. а) Оставить все это пользователю. б) Заставить систему выявлять и запрещать попытки определения структур, потенциально способных привести к конфликтам во время выполнения. в) Заставить систему выявлять и отклонять конфликты, действительно возникающие во время выполнения. Первый подход не стоит рассматривать„а второй часто приводит к чрезмерным ограничениям [8.12], (8.17].
Поэтому автор предлагает остановиться на третьем подходе. В статье приведен набор правил осуществления подобных действий во время выполнения и доказана их корректность. Однако отметим, что вопрос о производительности таких динамических проверок не рассматривается. Автор статьи г-и Хорвиц (Негев]гх) был активным членом комитета, задачей которого было определение стандарта Я'>Ы/92. Высказанные в этой статье предложения действительно были учтены в соответствующих разделах стандарта, связанных со ссылоч ной целостностью.
8.16. Маг!спич!я Ч. М. Ке(егепг1а1 !пгейп!у Кек!з]гед: Ап ОЬ]есг-Ог]епгед Регзресггке р Ргос. !бгй !пгегп. Сопб оп Чету 1.агйе Раза Вазеж — ВпвЬапе, Аиыга! 1а, Аийизг, 1990. Название статьи, "Объектно-ориентированная перспектива", действительно отражает открытую позицию автора, состоящую в том, что "ссылочная целостность лежит в основе реляционного представления объектно-ориентированных структур". Однако сама статья посвящена вовсе не обсуждению объектно-ориентированных систем. На самом деле в ней представлен алгоритм, генерирующий на основе диаграммы "сущность-связь" (глава 13) определение реляционной базы данных, в которой не возникае~ некоторых проблем, указанных в (8.10] (перекрывающиеся внешние ключи). В статье также обсуждаются три коммерческих продукта (СУБД РВ2, ЯУВАБЕ и 1Ь]ОКЕБ по состоянию на 1990 год) с точки зрения обеспечения ссылочной целостности.
СУБД РВ2, предоставляющая декларативную поддержку, показана чрезмерно ограниченной; системы БУВАЙТЕ и!Ь]ОКЕБ, предоставляющие процедурную поддержку (с помощью "триггеров" и "правил" соответственно), показаны менее ограниченными, чем СУБД РВ2, однако громоздкими и сложными в использовании (хотя и сказано, что процедурная поддержка СУБД !ЫОКЕБ "технически превосходит" поддержку ссылочной целостности в системе БУВАБЕ). Глава 8. Целостность данньог 335 8.17. 8.18.
8.19. 8.20 Маг)соэчссг Ч. М. Яа(е Кегегепссас 1ще8гйу Ясгцссцгез ш Ке!асюпа! РасаЬазез П Ргос. 171Ь!псегп. СопЕ оп Чету! аг е Раса Вазез. — Вагзе!опа, Яра!и, ЯерсегпЬег, 1991. В статье предлагаются два формальных условия безопасности", гарантирующих, что определенные проблемные ситуации, описанные, например, в [8.10[, [8.15), не воз- никнут. В ней также обсуждается, что именно предоставляешься в целях удовлетворения этих условий в коммерческих СУБД РВ2, БЧВАЯЕ и ПчбКЕЯ (опять же, на ! 990 год). Применительно к СУБД РВ2 показано, что одни реализованные ограничения, налагаемые в целях безопасности [8.12), логически излишни, хотя другие в то же время явно недостаточны (т.е.
в системах с СУБД РВ2 возможно возникновение некоторых небезопасных ситуаций). Относительно систем ЯЧВАЯЕ и ПЧОКЕЯ отмечено, что реализованная в них процедурная поддержка не предоставляет возможности обнаружения опасных (и даже некорректных!) ссылочных спецификаций.