- •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. Резюме
12.20.Kent w. The Universal Relation Revisited // acm tods. — December, 1983. — 8, № 4.
12.21.Korth H.F. et al. System/U: A Database System Based on the Universal Relation Assumption // Ibid. — September, 1984. — 9, № 3.
Здесь приводится описание теории, языка определения данных DDL, языка управления данными DML, а также практического воплощения экспериментальной системы на основе "универсального отношения", созданной в Стэн-фордском университете.
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.23.Maier D., Ullman J.D., Vardi M.Y. On the Foundations of the Universal Relation Model // ACM TODS. — June, 1984. — 9, № 2. (Более ранняя версия этой статьи под заголовком "The Revenge of the JD" опубликована в Proc. 2nd ACM SIGFACT-SIGMOD Symposium on Principles of Database Systems. — Atlanta, Ga., March, 1983.)
12.24.Maier d., Ullman j.D. Maximal Objects and the Semantics of Universal Relation Databases // acm tods. — March, 1983. — 8, № 1.
Максимальные объекты представляют собой подход для разрешения проблемы двузначности, возникающей в универсальных реляционных системах, базовая структура которых не является ациклической (подробности приводятся в [12.16]). Максимальный объект соответствует предварительно объявленному подмножеству
атрибутов универсальной переменной-отношения, для которого базовая структура будет ациклической. Такие объекты затем используются для интерпретации запросов, которые в противном случае были бы двусмысленными. 12.25.Nicolas J.M. Mutual Dependencies and Some Results on Undecomposable Relations // Proc. 4th Intern. Conf. on Very Large Data Bases. — Berlin, FDR. — September, 1978. В работе вводится концепция взаимной зависимости, которая в действительности представляет собой частный случай зависимости соединения, не являющейся многозначной или функциональной зависимостью, и включает точно три проекции (как в примере с зависимостью соединения, упомянутой в разделе 12.3). Однако эта концепция не имеет ничего общего с понятием взаимной зависимости, описанным в главе 11.
12.26.0sborn S.L. Towards a Universal Relation Interface // Proc. 5th Intern. Conf. on Very Large Data Bases. — Rio de Janeiro, Brazil. — October, 1979.
В статье предполагается, что если две или более последовательностей соединений в системе на основе "универсального отношения" генерируют потенциальный ответ на заданный запрос, то желательным откликом будет соединение всех таких потенциальных ответов. Приводятся алгоритмы для генерации всех таких последовательностей соединений. 12.27.Parker D.S., Delobel С. Algorithmic Applications for a New Result on Multivalued Dependencies // Proc. 5th Intern. Conf. on Very Large Data Bases. — Rio de Janeiro, Brazil. —October, 1979.
Здесь описано применение результатов работы [12.12] для решения различных проблем, например для тестирования операции декомпозиции без потерь. 12.28.Sagiv Y., Delobel С, Parker D.S., Fagin R. An Equivalence between Relational Database Dependencies and a Subclass of Propositional Logic // JACM.— June,
1981. —28, №3.
Это комбинация работ [10.8] и [12.29]. 12.29.Sagiv Y., Fagin R. An Equivalence between Relational Database Dependencies and a
Subclass of Propositional Logic // IBM Research Report RJ2500. — March, 1979.
Здесь результаты работы [10.8], полученные для функциональных зависимостей,
расширены для многозначных зависимостей. 12.30.Sciore Е. A Complete Axiomatization of Full Join Dependencies // JACM.— April,
1982. —29, №2.
Здесь результаты работы [12.2], полученные для функциональных зависимостей, расширены для многозначных зависимостей. 12.31.Smith J.M. A Normal Form for Abstract Syntax // Proc. 4th Intern. Conf. on Very Large Data Bases. — Berlin, FDR. — September, 1978.
Здесь впервые представлено понятие нормальной формы типа (3,3)НФ. 12.32.Ullman J.D. On Kent's Consequences of Assuming a Universal Relation // ACM
TODS. — December, 1983. — 8, № 4. 12.33.Ullman J.D. The U.R. Strikes Back // Proc. 1st ACM SIGFACT-S1GMOD Symposium
on Principles of Database Systems. — Los Angeles, Calif. — March, 1982.
Ответы к упражнениям
12.1. Сначала приведем выражение для МЗЗ для переменной-отношения СТХ.
CONSTRAINT CTX_MVD "
WITH
(СТХ RENAME COURSE AS С, TEACHER AS T, TEXT AS X)
AS Tl,
(EXTEND Tl
ADD (CTX WHERE COURSE = С) {T} AS A)
AS T2,
(EXTEND T2
ADD (CTX WHERE COURSE = С AND TEXT = X) {T} AS B)
AS T3,
(T3 WHERE А Ф B) AS T4 : IS_EMPTY (T4) ;
Для нее существует, конечно, и более простое выражение.
CONSTRAINT CTX_MVD СТХ = СТХ {COURSE, TEACHER} JOIN
СТХ {COURSE, TEXT} ;
А вот выражение для зависимости соединения для переменной-отношения SPJ.
CONSTRAINT SPJ_JD SPJ = SPJ {St, Pf} JOIN
SPJ {Pt, Jf} JOIN SPJ {J#, S#} ;
12.2. Прежде всего обратите внимание, что переменная-отношение R содержит все воз- можные значения атрибута А в паре со всеми возможными значениями атрибута В. Более того, множество всех возможных значений атрибута А, например S, такое же, как и множество всех значений атрибута В. Следовательно, переменная-отношение R равносильна декартову произведению множества S с самим собой. Эквивалент- ная формулировка такова: переменная-отношение R равносильна декартову произ- ведению проекции переменной-отношения R по атрибуту А и проекции перемен- ной-отношения R по атрибуту В. Таким образом, переменная-отношение R удовле- творяет следующим многозначным зависимостям (которые не являются тривиаль- ными, поскольку не удовлетворяют всем двойным переменным-отношениям).
{ } —»-» А | В
Эквивалентно также утверждение, что переменная-отношение R удовлетворяет зависимости соединения *(А, В) (вспомните, что соединение без общих атрибутов вырождается в декартово произведение его операндов). Отсюда следует, что переменная-отношение R не находится в 4НФ и может быть подвергнута декомпозиции без потерь на две проекции по атрибутам А и В (причем тела этих проекций будут, безусловно, идентичны). Однако переменная-отношение R находится в НФБК (поскольку является полностью ключевой) и не удовлетворяет никаким нетривиальным функциональным зависимостям.
Замечание, Переменная-отношение R также удовлетворяет двум многозначным зависимостям.
А -—0 j ^ у В -*> А | { }
Однако они являются тривиальными, поскольку удовлетворяют любым двойным переменным-отношениям с атрибутами А и В.
12.3. Сначала введем три переменные-отношения, первичными ключами которых будут имена торговых агентов, названия регионов и названия товаров соответственно.
REP { REPf, ... } KEY { REPi }
AREA { AREAf, ... } KEY { AREAt }
PRODUCT { PRODf, ... } KEY { PRODI }
Затем представим связь между торговыми агентами и регионами с помощью следующей переменной-отношения.
RA { REPi, AREAt } KEY { REPi, AREAf }
Связь между торговыми агентами и продукцией представим с помощью переменной-отношения RP.
RP { REPf, PRODf } KEY { REPf, PRODf }
Обе эти переменные-отношения представляют связи типа "многие ко многим". Далее для описания того, что каждый вид продукции продается в каждом регионе, необходимо ввести следующую переменную-отношение.
АР { AREAf, PRODf } KEY { AREAf, PRODf }
Для представления связей, существующих между регионами и продукцией, установим ограничение (назовем его С).
АР = AREA { AREAf } TIMES PRODUCT { PRODf }
Обратите внимание на следующее: в ограничении С подразумевается, что переменная-отношение АР не находится в четвертой нормальной форме (см. упр. 12.2). На самом деле переменная-отношение АР не дает никакой дополнительной информации, которая не может быть получена из других переменных-отношений.
АР { AREAf } = AREA { AREAt } АР { PRODf } = PRODUCT { PRODf }
Тем не менее пока будем считать, что переменная-отношение АР включена в проект создаваемой базы данных.
Условие, что никаких два торговых агента не продают один и тот же вид продукции в одном и том же регионе, означает, что заданной комбинации атрибутов
{AREAi, PRODf} соответствует только одно значение номера торгового агента (атрибут REPi). Исходя из этого, можно ввести следующую переменную-отношение.
APR { AREA#, PRODI, REPf }
KEY { AREAt, PRODI } Здесь явным образом реализована следующая функциональная зависимость. { AREA!, PRODI } -> REPi
Безусловно, определение комбинации атрибутов {AREA!, PRODI} в качестве потенциального ключа переменной-отношения APR является достаточным условием для выражения этой функциональной зависимости. Однако теперь переменные-отношения RA, RP и АР оказались избыточными, поскольку они являются проекциями переменной-отношения APR, а потому могут быть опущены. Вместо ограничения С теперь необходимо ввести следующее ограничение С1.
APR { AREAi, PRODI } = AREA { AREA* } TIMES PRODUCT { PROD* }
Оно также должно быть задано отдельно и явным образом (поскольку оно не предполагается существующими потенциальными ключами).
Кроме того, поскольку каждый торговый агент продает весь свой набор товаров в каждом из обслуживаемых им регионов, для переменной-отношения APR необходимо установить дополнительное ограничение С2 (оно представляет нетривиальную МЗЗ, следовательно, переменная-отношение APR не находится в 4НФ).
REP* AREA* | PROD*
Таким образом, в окончательном виде проект базы данных состоит из переменных-отношений REPS, AREAS, PRODUCTS и APR вместе с заданными явным образом ограничениями С1 и С2. |
Это упражнение хорошо иллюстрирует тот факт, что в общем случае порядок нормализации адекватно представляет некоторые семантические аспекты заданной проблемы (в основном, зависимости, которые подразумеваются потенциальными ключами, где под "зависимостями" имеются в виду функциональные и многозначные зависимости, а также зависимости соединения). Однако может также потребоваться явное указание дополнительных зависимостей для некоторых особых аспектов, а отдельные аспекты могут быть и вовсе непредставимы с помощью подобных типов зависимостей. Это упражнение демонстрирует, что не всегда желательно "полностью" нормализовать некоторую переменную-отношение (в нашем примере переменная-отношение APR находится в НФБК, но не в 4НФ).
12.4. Все вносимые изменения достаточно просты — стоит лишь заменить упоминания функциональных зависимостей и НФБК понятиями многозначной зависимости и 4НФ. Тогда алгоритм декомпозиции будет следующим.
Зададим переменную-отношение R в качестве начального значения для декомпозиции D.
Для каждой переменной-отношения Т (которая не находится в 4НФ), входящей в состав декомпозиции D, выполним действия, которые перечислены в пп. 2 и 3.
Пусть зависимость X —н Y является многозначной зависимостью в переменной-отношении Т, которая не удовлетворяет требованиям 4НФ.
I 4. Заменим переменную-отношение Т в декомпозиции D двумя ее проекциями, а ч-'д»т ^ имеЧно.: одной по атрибутам X и Y, а другой — по всем атрибутам, за исключением атрибута Y.
12.5. Это пример "циклического ограничения", которому соответствует приведенная ниже реляционная структура.
REP { REPi, ... }
KEY { REPi } AREA { AREAt, ... }
KEY { AREAt }
PRODUCT { REPi, ... } KEY { PRODi }
RA { REPi, AREAt } KEY { REPi, AREAf }
AP { AREAt, PRODi } KEY { AREAt, PRODi }
PR { PRODi, REPi }
KEY { PRODi, REPi }
Кроме того, пользователя следует информировать о том, что соединение переменных-отношений RA, RP и АР не содержит никаких ловушек соединения.
( RA JOIN АР JOIN PR ) { REPf, AREAf } = RA AND ( RA JOIN AP JOIN PR ) { AREAt, PRODi } = AP AND ( RA JOIN AP JOIN PR ) { PRODi, REPf } = PR
