- •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. Резюме
8.3. Ограничения атрибута
Ограничение атрибута по своей сути является простым объявлением о том, что определенный атрибут имеет определенный тип. В качестве примера еще раз обратимся к определению переменной-отношения поставщиков.
VAR S BASE RELATION { SI St,
SNAME NAME, STATUS INTEGER, CITY CHAR } ... ;
В этой переменной-отношении значения атрибутов Si, SNAME, STATUS и CITY ограничены типами St, NAME, INTEGER и CHAR соответственно. Другими словами, ограничения атрибутов являются частью определения этих атрибутов и могут быть идентифицированы по соответствующим именам атрибутов. Отсюда следует, что ограничение атрибута может быть устранено только путем удаления самого атрибута (что на практике чаще всего означает удаление переменной-отношения, включающей данный атрибут).
Замечание. В принципе, любая попытка ввести в базу данных значение атрибута, имеющее тип, отличный от того, который был установлен для данного атрибута, будет отвергнута. Однако на практике такие ситуации никогда не должны возникать, если только в системе применяются ограничения типа, описанные в предыдущем разделе.
8.4. Ограничения переменной-отношения
Ограничение переменной-отношения — это ограничение для некоторой отдельной переменной-отношения (оно выражается лишь через рассматриваемую переменную-отношение, хотя, с другой стороны, может быть сколь угодно сложным). Вот несколько примеров.
CONSTRAINT SC5
IS_EMPTY { S WHERE CITY = 'London' AND STATUS * 20 ) ;
J Иначе говоря (и несмотря на то, что мы явно не ссылались на главу 5), псевдопеременные THE не являются логически необходимыми! Любое присвоение значения псевдопеременной THE всегда логически эквивалентно (и фактически было определено просто как сокращенная запись) присвоению обычной переменной результата вызова определенного оператора выбора.
Смысл: "Поставщики в Лондоне должны обладать статусом, равным 20".
CONSTRAINT PC4
IS_EMPTY ( P WHERE COLOR = COLOR { 'Red' ) ) AND CITY Ф 'London' ) ;
Смысл: "Красные детали должны храниться в Лондоне".
CONSTRAINT SCK
COUNT ( S ) = COUNT ( S { Si } ) ;
Смысл: "Номера поставщиков должны быть уникальны" или, более формально, "Ключ {St} — это потенциальный ключ отношения поставщиков" (раздел 8.8).
CONSTRAINT РС7
IF NOT ( IS_EMPTY ( P ) ) THEN
COUNT ( P WHERE COLOR = COLOR ( 'Red' ) ) > 0 END IF ;
Смысл: "Если детали вообще имеются, то одна из них должна быть красной". Отметим, кстати, что этот пример отличается от всех рассмотренных ранее, поскольку данное ограничение может быть нарушено и при выполнении операции DELETE.
Ограничения переменных-отношений всегда проверяются немедленно (фактически как часть процедуры выполнения любого оператора, способного нарушить данное ограничение). Таким образом, любой оператор, в котором предпринимается попытка присвоить данной переменной-отношению значение, нарушающее одно из установленных для нее ограничений, будет просто отвергнут.
8.5. Ограничения баз данных
Ограничение базы данных — это ограничение, устанавливающее взаимосвязь между различными переменными-отношениями. Приведем несколько примеров.
CONSTRAINT DBC1
IS EMPTY ( ( S JOIN SP )
WHERE STATUS < 20 AND QTY > QTY ( 500 ) ) ;
Смысл: "Поставщики со статусом, меньшим 20, не могут поставлять детали в количестве свыше 500 штук".
Упражнение. Какие операции должны отслеживаться СУБД для приведения ограничения DBC1в действие?
CONSTRAINT DBC2 SP { St } < S { Si } ;
Смысл: "Каждый номер поставщика в переменной-отношении поставок должен присутствовать и в переменной-отношении поставщиков". (Напомним, что, как указывалось в главе 6, знак "й" здесь означает "подмножество".) Поскольку атрибут Si в переменной-отношении S составляет потенциальный ключ, по сути, это ограничение является ссылочным ограничением для поставок в отношении поставщиков (т.е. ключ {Si} в переменной-отношении SP является внешним ключом, посредством которого сведения о поставках связываются с соответствующими поставщиками). Обсуждение этого вопроса будет продолжено в разделе 8.8.
CONSTRAINT DBC3 SP { Pi } = Р { Pi } ;
Смысл: "Каждая деталь должна быть поставлена хотя бы один раз".
Замечание, Конечно, возможен случай, когда каждая поставка включает точно одну деталь, как следствие того факта, что ключ {Pi} в переменной-отношении Р является потенциальным ключом для деталей и существует ссылочное ограничение в отношении поставок и деталей. Однако мы не будем приводить это ограничение здесь, а обсуждение данного вопроса продолжим, опять же, в разделе 8.8.
Последние два примера показывают, что (в общем случае) проверка ограничений базы данных не может быть выполнена немедленно, а должна быть отложена до конца транзакции, т.е. до момента выполнения оператора COMMIT (при необходимости уточнить какие-либо сведения относительно оператора COMMIT; см. главу 3). Для доказательства этого утверждения допустим противное и предположим, что проверка должна выполняться немедленно. Пусть в данный момент вообще отсутствуют сведения о каких-либо поставках и деталях. Тогда добавление сведений о любой детали будет ошибочным, поскольку при этом будет нарушено ограничение DBC3. Аналогично любая попытка ввести сведения о поставке также приведет к ошибке, поскольку в этом случае будет нарушено ограничение DBC24.
Если во время выполнения оператора COMMIT будет обнаружено нарушение ограничения базы данных, это вызовет откат данной транзакции.
