Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 9.2




Ограничения баз данных

Ограничение БД – ограничение, устанавливающее взаимосвязь между различными переменными-отношениями.

CONSTRAINT DBC1

IS_EMPTY((S JOIN SP)

WHERE STATUS < 20 AND QTY > 500)

Смысл: «Поставщики со статусом, меньшим 20, не могут поставлять детали в количестве свыше 500 штук».

CONSTRAINT DBC2 SP {P#} = P{P#}

Смысл: «Каждая деталь должна быть поставлена хотя бы один раз»

Приведенные примеры показывают, что проверка ограничений целостности БД не может быть выполнена немедленно, а должна быть отложена до конца транзакции, т.е. до момента выполнения оператора COMMIT. Для доказательства этого утверждения предположим обратное, что проверка должна быть выполнена немедленно. Пусть в данный момент отсутствуют сведения о каких-либо поставках и деталях. Тогда добавление сведений о какой-либо детали будет ошибочным, поскольку будет нарушено ограничение DBC2.

Если во время выполнения оператора COMMIT будет обнаружено нарушение ограничения БД, то это вызовет откат данной транзакции.

 

9.6 «Золотое правило»

Мы уже отмечали, что каждое отношение имеет связанный с ним предикат, а кортежи этого отношения выражают истинные высказывания, порождаемые данным предикатом. Так же для каждой переменной-отношения может быть составлен предикат, который для всех возможных допустимых значений переменной-отношения будет общим.

Предикат некоторой переменной-отношения является критерием приемлемости изменений для рассматриваемой переменной-отношения, т.е. он предписывает, будет ли допустима определенная операция (INSERT, DELETE, UPDATE) для переменной-отношения.

Следовательно, в идеальном случае СУБД должен быть известен и понятен предикат каждой переменной-отношения в БД, что позволит системе корректно обрабатывать всевозможные попытки внесения изменений. Но такая цель, конечно, недостижима. Например, не существует способа сформулировать для СУБД понятие о том, что определенный поставщик должен быть «в» определенном городе.

Все, что система может сделать при выполнении тех или иных операций с БД, это убедиться, что никаких нарушений известных ей ограничений целостности нет. Система примет кортеж для добавления в БД и будет в дальнейшем воспринимать его как истинное высказывание.

Итак, можем сделать вывод, что система «не знает и не понимает» предикат переменной-отношения полностью, однако ей известно достаточно хорошее приближение к этому предикату, а конкретнее – ей известны ограничения целостности, которые применимы к данным в БД. Следовательно, предикат переменной-отношения определяется как логическое умножение всех ограничений переменной-отношения, которые установлены для нее.

Отметим, что реально существуют два предиката, связанной с переменной-отношением: неформальный, или внешний предикат, который понятен пользователям, но не понятен системе, и формальный, или внутренний, который понятен и пользователям, и системе. Именно внутренний предикат используется системой, когда предпринимаются попытки изменить переменную отношение.

Тогда «золотое правило» можно сформулировать следующим образом:

Ни одна из операций изменения не имеет права переводить переменную-отношение в состояние, нарушающее ее собственный предикат.

Для всей базы данных также имеется связанный с ней предикат, предикат базы данных, который определяется как логическое умножение (логическая операция И) всех ограничений БД и всех ограничений переменных-отношений, которые установлены в ней. Другая формулировка «золотого правила» для БД:

Ни одна из операций изменения не имеет права переводить переменную-отношение в состояние, нарушающее ее собственный предикат. Аналогично ни одна из транзакций изменения не имеет права переводить БД в состояние, нарушающее ее собственный предикат.

 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 360; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.