С.Д. Кузнецов - Основы баз данных (1121716), страница 56
Текст из файла (страница 56)
Предположим, например, что в отдел зачисляется новый служаший. Тогда нужно выполнить две операции: (а) вставить новую строку в таблицу емР и ((з) изменить соответствуюшую строку таблицы Оерт (прибавить единицу к значению столбца Оерт емр НО). Очевидно, что в каком бы порядке ни выполнялись эти операции, сразу после выполнения первой из них ограничение целостности будет нарушено, соответствующее действие будет отвергнуто, и мы никогда не сможем принять на работу нового служашего. Поскольку ограничения целостности, немедленная проверка которых бессмысленна, являются нужными и полезными, в язык зг )Е включены средства, позволяющие регулировать время проверки ограничений. Если говорить более точно, в контексте каждой выполняемой транзакции каждое ограничение целостности должно находиться в одном из двух режимов: режиме неагедленной проверки (гттегзгте) или режиме отложенной проверки (сгеуеггеф.
Все ограничения целостности, находящиеся в режиме немедленной проверки, проверяются при выполнении в транзакции любой операции, изменяюшей состояние базы данных. Если действие операции нарушает какое-либо немедленно проверяемое ограничение целостности, то это действие отвергается.* Ограничения целостности, находяшиеся в режиме отложенной проверки, проверяются при завершении транзакции (выполнении операции сомнут)**.
если действия этой транзакции нарушают какое-либо отложенно проверяемое ограничение цело- ' Конечно, а грамотных реализациях ЯОЕ при выполнении операции проверяются не асе немедленно проверяемые ограничения целостности, а только те, которые а принципе могут быть нарущсны данной операцией. *' Мы снопа аы нужде ны забегать вперед. Средства ЯОЕ для управления транзакциями более подробно обсуждаются а следующих лекциях. 260 Лекция 12 Средства определения базовых таблиц и ограничений целостности стности, то транзакция откатывается (операция соуьч1т трактуется как операция ВОЬЬВЛСК).* Для этого в качестве заключительной синтаксической конструкции к любому определению ограничения целостности (любого вида) может быть добавлена спецификация 1м111льь в следующей синтаксической форме: 1М1Т1ЛЬЬУ Г РЕГЕРЗЕР ~ 1ММЕР1АТЕ г ( ) МО ) РЕГЕВВАВЬЕ Эта спецификация указывает, в каком режиме должно находиться данное ограничение целостности в начале выполнения любой транзакции (1МТТТЛЬЬТ 1ММЕРЕЛТЕ означает, что в начале выполнения транзакции данное ограничение будет находиться в режиме немедленной проверки, а 1м1т1лььу Реееввео — что в начале любой транзакции ограничение будет находиться в режиме отложенной проверки), а также возможности смены режима этого ограничения при выполнении транзакции (Реееввлвье означает, что для данного ограничения может быть установлен режим отложенной проверки, а МОТ РЕЕЕВВЛВЬŠ— что не может**).
Комбинация 1м1т1лььу Реееввео мот Рееевклвье является недопустимой. Если в определении ограничения спецификация начачьного режима проверки отсутствует, то подразумевается наличие спецификации 1М1т1лььу 1м)жР1лте. При наличии явной или неявной спецификации 1м1т1лььу 1ЬЬЧЕРТЛТЕ и отсутствии явного указания возможности смены режима подразумевается наличие спецификации мот Реееввлвье. При наличии спецификации 1МТТТАЬЬУ РЕЕЕВВЕР и отсутствии явного указания возможности смены режима подразумевается наличие спецификации РЕЕЕВВЛВЬЕ. При выполнении транзакции можно изменить режим проверки некоторых или всех ограничений целостности для данной транзакции.
Для этого используется оператор ВЕТ СОМВТВЛТМТВ, задаваемый в следующем синтаксисе: БЕТ СОМЯТВА1)зТБ ( сопяггаьпг гаше солва11яг 1 АЬЬ ) РЕЕЕВЕЕР ~ 1ММЕР1АТЕ Если в операторе указывается список имен ограничений целостности, то все они должны быть РЕЕЕЕВЛВЬЕ; если хотя бы для одного ограни- ' Конечно, в срамотных реализациях ЯОЬ при завершении транзлкпии проверяются не все стложенно проверяемые ограничения целостности, а только те, которые в принципе могут быть нарушены данной транзакцией. "Для некоторых ограничений целостности режим отложенной проверки не имеет смысла.
К таким ограничениям относятся, например, огрвничения домена, ограничения нот гюьь и ограничения возможного ключа (хстя при их определении лопускается уклэлние оягуявлвья). Если же возможный ключ используется в некотором определении внешнего ключа, то в стандарте ЗОЬ требуется, чтобы ограничение этого возможного ключа бьшо нот овггдвлвьк 261 Основы бвз данных чения из списка это требование не выполняется, то операция абдт сонятвлтитя отвергается.
При указании ключевого слова лг,г, режим устанавливается для всех ограничений, в определении которых явно или неявно было указано РеуеяРАвг.е. Если в качестве желаемого режима проверки ограничений задано БегеядЕ0, то все указанные ограничения переводятся в режим отложенной проверки. Если в качестве желаемого режима проверки ограничений задано тимкптлтд, то все указанные ограничения переводятся в режим немедленной проверки. При этом если хотя бы одно из этих ограничений не удовлетворяется, то операция Бдт сОдэтвлтдтя отвергается, и все указанные ограничения остаются в предыдущем режиме. При выполнении операции соиктт неявно выполняется операция экт сонэтвлтнтз льь тиикптлтк.
Если эта операция отвергается, то союгт= срабатывает как коы.влек, Заключение В этой и предыдущей лекциях мы обсудили наиболее важные аспекты языка Я.п., связанные с определением схемы базы данных, — типы данных Я9Е, средства определения доменов, базовых таблиц и ограничений целостности. Кроме того, были рассмотрены средства Я)Е, позволяющие динамически изменять и удалять определения этих объектов. Язык Я)Е устроен таким образом, что практически невозможно изложить какую-либо его часть независимо от других частей. И хотя эти две лекции по смыслу должны быть первыми среди лекций, посвященных Я)Е (было бы странно обсуждать операторы выборки строк из таблиц, вставки, изменения и удаления строк до обсуждения средств создания таблиц и ограничений целостности), нам пришлось забежать вперед и воспользоваться материалом следующих лекций для объяснения средств определения ограничений целостности.
Надеюсь, что это не создало слишком больших неудобств для читателей, и отсутствие формальных определений удалось компенсировать наличием простых примеров. 262 Лекция 13 Характеристика оператора 8ЕсЕСТ и ссылки на таблицы раздела ЕИОМ Лекция 13. Язык баз данных ЗСПл общая характеристика оператора ЗЕЬЕСТ и организация списка ссылок на таблицы в разделе ГНОМ В этой и следующих трех лекциях рассматривается важнейший оиератор языка БС2Ь вЂ” оператор ВЕЬЕСТ, предназначенный для выборки давиых из $91 ориевтироваииой базы данных.
Этот оператор имеет довольно сложиую и развитую структуру, ио, цо вашему мнению, его необходимо знать любому специалисту, так или иначе связанному с использованием баз даииык; иоэтому в нашем курсе ему уделяется так много внимания. Первая лекция косит иодготовительиый характер. В ией мы рассматриваем виды скалярвых выражеиий, исиальзуемые, прежде всего, в конструкциях оператора БЕЬЕСТ, обсуждаем базовую семавтику выполнения этого оператора и аиклизируем принципы и разновидности указания таблтщ, из которых производится выборка давних.
Ключевые слова: скалярное выражение„первичное выражение, агрегатная функция, скалярный подзапрос, численное выражение, вызов функций с численным значением, выражения символьных и битовых строк, вызов функций, возвращающих строчные значения, выражения даты-времени, вызовы функций, возврашаюших значение дата- время, выражения со значениями типа временного интервала, булевские выражения, выражения с переключателем, выражение с поисковым переключателем, выражение с простым переключателем, выражение МЦККТК, выражение СОАККЗСК, оператор 3КККСт, семантика оператора выборки, раздел кком, раздел инккк, раздел скоцр вх, раздел нлттпы, раздел ккккст, раздел окккк вт, порождаемая таблица с горизонтальной связью, соединенная таблица, табличное выражение, спецификация запроса, выражение запросов, «теоретико-множественные» операции в б( )Ь, раздел хТтм выражения запросов, коиструктор значения-строки, конструктор значения-таблицы, ссылки на базовые и представляемые таблицы, ссылки на порождаемые таблицы, представляемые таблицы, или представления (ттткиЬ оператор скклтк тт1кх,операторккор цтки, Введение Несмотря на то, что язык б9Ь является полным языком баз данных, включающим множество разнообразных средств определения схемы, ограничения и поддержки целостности базы данных, поддержки администрирования, заполнения и модификации таблиц базы данных, поддержки разработки приложений и т.
д., для подавляющего большинства пользова- 263 Основы баа данных курс телей этот язык остается языком запросов, т. е, языком, позволяющим формулировать произвольно сложные и точные декларативные запросы к базе данных. Как отмечалось в конце предыдущей лекции, структура стандарта языка Я)1. фактически не позволяет описать одну часть языка (в частности, средства запросов) в отрыве от других частей. Тем не менее, полагая, что средства выборки данных составляют наиболее интересную и практически значимую часть языка, мы выделили для их рассмотрения несколько отдельных лекций. Напомним, что в этом курсе мы ограничиваемся базовым подмножеством К()1.:1999 и Я)1.:2003 («прямым Я)1.») и даже зто подмножество описываем не в полном объеме стандарта.