|
Программирование >> Реляционные базы данных
Ь) При вставке ноного lOiacca корабля водоизмешеннем более 35 тыс. тонн содонзмешение заменяется на значе1Н1е 35 ООО. !с) При вставке кортеиса в отношение Ouicomes корабль и сражение из этого кортел;а должны е.уоднть в отношения Ships и Battles соответственно; в противном случае в оба эти отношения вставляются кортежи со значениями NULL и ге.х компонентах, в которых они необходимы. !d) Вставка в отношение Ships или изменение его атрибута class разрешается только в том случае, если ни одна из стран не имеет более 20 кораблей. !! е) При любых обстоягельствах ни один корабль не может участвовать в сражении, состоявшемся позже сражения, в котором он был потоплен. Любое изменение, нарушающее это ограничение, отвергается. ! Упрожнение й.6.4. Запнш1Гге перечисленные ниже триггеры, или утверждения. SQL3 для примера БД фильмов: Movie(litle, year, length, inColor. studioName, producerC#) Starsln(movieTitle. movieYear, starName) MovieStar(name, address, gender, birthdate) MovieExec(name, address, cert#, netWorth) Studro(name. address. presCS) Можете предположить, что условие должно выполняться перед попыткой любого изменения БД и что лучше изменить БД (даже еслн изменение означает всгавку кортежей со значениями по умолчаншо NULL), чем отвергать изменение. a) При любом появлении кинозвезды в отношении Starsln она должна появляться и в отношении MovieStar b) КаждьиЧ администратор должен быть президенюм киностудии или продюсером фильма, или тем и друшм одновременно. c) В каждом фнльмс должно участвовать по крайней мере по одной кинозвезде мужского н женского пола. d) Любая CTj-дия должна выпускать не более JOO фильмов год. e) Среднгш продолжительность фильмов, выпушенных за год, не должна превышать 120 минут. i Ыпражнсние 6.6.5. В примере 6.17 мы действовали не лучшим образом, выполняя сначала проверку, а затем изменения, если онн ие нарушают условия. Можно допустить изменение, а затем отменить, еслн оно нарушает условие. Запи Ш1гге этот триггер. 6.7 Итоги + Ограничения по кшчу. Атрибут 1ии множество ат1Н!бутов можно объявить кпючом, введя в описание реляционной схемы объявления UNIQUE или PRIMARY KEY. ♦ Ограничение ссылочной целостности. Вводя в речяционную схему ключевые сгюпе REFERENCES или FOREIGN KEY, можно потребовать, чтобы значение атрнбута или множества атрибутов одного отношения было также значением атрибутов первичного ключа в некотором кортеже другого спиошения. 6.8 Литература к главе 6 295 + Основанные на значении ограничения CHECK. Можно проверять ограничение на значение некоторого атрибута, лобавляя в реляционную схему после описания этого атрибута ключевое слово CHECK и условие, которое нужно проверять. Можно также задать область в качестве типа атрибута и п описании этой области задать условие, которое нужно проверять. ♦ Основанные не кортеже ограничения CHECK. Можно проверять условие, относяиюеся к любому компоненту или ко всем компонентам кортежей отношения, добавив ключевое слово CHECK и данное условие описание самого отношения. ♦ Утверждения. Утверждения можно описать как элемент схемы БД с ключевым словом CHECK и условием, которое необходимо проверять. Это условие может содержать одно или более отношеиий схемы БД, а также отношение в целом, например с агрегацией, и условия, касающиеся отдельных кортежей. + Активизация проверок. Утверждения активизируются, когда изменение одного из включенных в них отношений делает возможным нарушение ограничения, Основаштые на значении и на кортеже проверки активизируются, когда атрибут или отношение, к которому они относятся, изменяется пугем введения или модификации кортежей. Поэтому такие ограничения могут нарушаться, когда Б них есть подзапросы, содержащие другие отношения или кортежи одного и того же отношения. + Триггеры SQL3. Предполагаемый стандарт SQL3 включает в себя триггеры, определяющие конкретные события (например, вставку, удаление или изменение отдельного отношения), которые вводят эти триггеры в действие. Введенное в действие условие можно проверять, и, если оно истинно, выполняется определенная последовательность действий (SQL-предложений я виде запросов и изменений БД). + Утверждения SQL3. В стандарте SQL3 есть понятие утверждения, отличающееся от аналотчного понятия в SQL2. Подобно триггерам SQL3, эти утверждения вводятся в действие одним или несколькими событиями, такими как введение в отношение. При введении в действие утверждение SQL3 проверяет условие, касающееся отношений или кортежей, и отвергает изменения, если это условие не вылсчняется. 6.8 Литература к главе 6 Информация о получении документов по стандартам SQL2 и SQL3 дана перед списком литературы к главе 5. Книга [4] - источник информации по всем аспектам активных элементов систем БД. В книге [1] рассматриваются современные идеи об активных элементах SQL3 и будущих стандартах. В работах [2] и [3] o6c>ok-дается HiPAC, ранний прототип системы, содержащей активные элементы БД. \. Cochrane, R. J., Н. Pirahesh, and N. Mattos, Integrating triggers and declarative constraints in SQL database systems, Inli. Conf. on Very Large Database Systems, pp. 567-579, 1996. 2. Dayal, U., et al., The HiPAC project: combining active databases and timing constraints , SiCMOD Record 17:1, pp. 51-70. 1988. 3. McCarthy, D. R., and U. Dayal, The architecture of an active database management system, Proc. ACM SIGMOD Intl. Conf. on Management of Data, pp. 215-224, 1989. 4. Widom, J. and S. Ceri, Aciix-e Database Systems, Morgan-Kaufmann. San Francisco, 1996. Глава 7 Системные аспекты SQL Рассмотрим, как SQL вписывается а полную среду профаммирования. По всем затронутым далее вопросам мы будем следовать стандарту SQL2. В разделе 7.1 показано, как SQL обычно применяется в программах, написанных на стандартном языке программирования (типа С), SQL имеет ряд средств перемещения данных между собственными отношениями и переменными окружающего, или главного , языка. В разделе 7.2 содержится введение в транзакции атомарные единицы работы. Многие приложения БД, например банковские, требуют, чтобы операции с данными выглядели атомарными и неразделимыми, даже если при этом параллельно выполняется множество операций. В SQL есть средства определения транзакций и ме.ханизмы, обеспечивающие автоматическое их выполнение. В разделе 7.3 рассматриваются дополнительные вопросы, такие как поддержка модели вычисления клиент/сервер. В разделе 7.4 показано, как SQL контролирует неавторизованный доступ к данным и как определить в системе SQL авторизованный доступ. 7.1 SQL в среде программирования До сих пор в примерах использовался непосредственный язык SQL, т.е. предполагалось, что имеется интерпретатор SQL, принимающий и выполняющий запросы и команды SQL. Такой способ действия применяется редко. На практике большинство операторов SQL являются частью более крупной программы или множества функций. Правильнее считать, что существует программа в обычном главном языке типа С, но некоторые функции в этой програм.ме илн некоторые операторы внутри программ С в действительности являются операторами SQL. В этом разделе показано, как SQL может работать с обычной программой. Краткая схема лшичной системы программирования, содержащей операторы SQL, изображена на рнс. 7.1. Программист пишет программы на главном языке, но в них встраиваются специальные операторы SQL, не являющиеся частью главного языка. Вся программа посылается на препроцессор, заменяющий встроенные операторы SQL на осмысленные выражения главного языка. Представление SQL может быть таким же простым, как вызов функции, которая получает SQL-предложсние как аргумент, состоявши из строки символов, и выполняет это SQL-предложение. На рис. 7.1 показано, что программист может писать программу на главгюм языке, применяя такие вызовы функций по мере необходимости. Затем npoqjaMMa главного языка после препроцессора компилируется обычным способом. Поставщик СУБД обычно предоставляет библиотеку с определениями необходимых функций. Таким образом, можно выполнить функции, реализующие SQL, и вся программа будет работать как единое целое.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |