
- •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.2. Ограничения типа
По существу, ограничение типа является перечнем (или логическим эквивалентом перечня) допустимых значений типа. Вот простой пример ограничения типа для типа WEIGHT (Вес).
TYPE WEIGHT P0SSREP ( RATIONAL )
CONSTRAINT THE_WEIGHT ( WEIGHT ) > 0.0 ;
Мы принимаем очевидное соглашение, по которому в ограничении типа можно использовать подходящее имя типа, призванное обозначить произвольное значение рассматриваемого типа. В данном случае допустимы только такие значения веса детали, которые могут быть представлены рациональным числом, большим нуля. Любое выражение, в котором предполагается определение веса, но в результате вычисления которого получается значение, не удовлетворяющее приведенному выше ограничению, будет отвергнуто.
Замечание. Если вам необходимо восстановить в памяти назначение операторов POSSREP и THE , возвратитесь к главе 5.
Напомним, что ограничение типа является, в общем, просто перечнем значений, которые составляют данный тип. Следовательно, в языке Tutorial D мы связываем такие ограничения с определениями соответствующих типов и идентифицируем их посредством соответствующего имени типа. (Поэтому ограничение типа может быть упразднено лишь в том случае, если будет исключен сам тип.)
Таким образом, совершенно ясно, что единственный способ, с помощью которого в результате вычисления произвольного выражения может быть получено значение типа WEIGHT, состоит в обращении к некоторому оператору выбора значений типа WEIGHT. Поэтому любое выражение лишь в том случае не сможет нарушить ограничения для типа WEIGHT, если нарушение этих ограничений будет проверяться используемым в выражении оператором выбора. Следовательно, можно считать (по крайней мере, концептуально), что в любом случае соблюдение ограничений типа контролируется именно во время выполнения некоторым оператором выбора. Дополнительно можно сказать, что ограничения типа всегда проверяются немедленно, а значит, ни одна переменная-отношение не может получить значение какого-либо атрибута в каком-либо кортеже, который не соответствовал бы требуемому типу (конечно, в такой системе, где имеется поддержка ограничений типов).
Вот еще один пример ограничения типа.
TYPE POINT POSSREP CARTESIAN ( X RATIONAL, Y RATIONAL ) CONSTRAINT ABS ( THE X (POINT) ) < 100.0 AND ABS ( THE~Y (POINT) ) < 100.0 ;
Здесь контроль типа осуществляется (концептуально) в результате обращения к оператору выбора CARTESIAN. Обратите внимание на применение определенного пользователем оператора ABS (см. раздел 5.2 главы 5).
Приведем более сложный пример — определение типа компонентов эллипса.
TYPE ELLIPSE POSSREP ( A LENGTH, В LENGTH, CTR POINT ) CONSTRAINT THE_A ( ELLIPSE ) > THE_B ( ELLIPSE ) ;
Здесь представлены возможные компоненты, а именно — А, В и CTR, которые соответствуют длине большой полуоси а, длине малой полуоси b и точке центра ctr рассматриваемого эллипса. Предположим, что скалярная переменная Е объявлена с типом ELLIPSE, ее текущее значение длины большой полуоси равно 5, а значение длины малой полуоси равно 4. Теперь рассмотрим следующее присвоение.
ТНЕ_В ( Е ) := LENGTH ( 6.0 ) ;
Замечание. В этом примере скалярная переменная и операция скалярного присвоения используются исключительно из соображений упрощения, поэтому вместо них с тем же успехом можно было использовать, скажем, переменную-отношение и операцию реляционного присвоения.
Это присвоение, как и следует ожидать, будет отвергнуто, однако ошибочным является не само присвоение как таковое. Ошибка будет зафиксирована, опять же, при выполнении оператора выбора (хотя никакого прямого вызова подобного оператора в при
своении не видно), поскольку в действительности данное присвоение является сокращением следующего выражения3.
Е := ELLIPSE { ТНЕ_А ( Е ), LENGTH ( 6.0 ), THE_CTR ( Е ) ) ;
Здесь в правой части операции присвоения явно показано обращение к оператору выбора, при выполнении которого и будет зафиксирована ошибка.