- •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.6. Ортогональное проектирование (небольшое отступление от темы)
В этом разделе мы кратко рассмотрим другой принцип проектирования баз данных, который напрямую не связан с дальнейшей нормализацией, но очень похож на нее тем, что также является научным. Он называется принципом ортогонального проектирования (principle of orthogonal design). Обратимся к рис. 12.7, на котором представлена безусловно плохая, но вполне допустимая структура представления данных о поставщиках. Здесь переменная-отношение SA соответствует поставщикам, которые находятся в Париже, а переменная-отношение SB соответствует поставщикам, которые либо не находятся в Париже, либо имеют статус выше 30 (т.е. предикаты этих переменных-отношений имеют именно такой смысл). Как следует из рисунка, подобная структура характеризуется некоторой избыточностью, точнее говоря, в ней дважды представлен кортеж для поставщика с номером 'S3' (по одному в каждой переменной-отношении).
Отметим, что данный кортеж должен находиться в обеих переменных-отношениях. Допустим обратное, т.е. что он находится в переменной-отношении SB, но отсутствует в переменной-отношении SA. Применив допущение замкнутости мира к переменной-отношению SA, можно сделать вывод, что поставщик с номером ' S3' не находится в Париже. Однако данные в переменной-отношении SB свидетельствуют об обратном, т.е. о том, что он находится в Париже. Иначе говоря, мы получили противоречие и, следовательно, база данных находится в противоречивом состоянии.
SB
Рис. 12.7. Плохая, но вполне допустимая структура представления данных о поставщиках
Недостаток показанной на рис. 12.7 структуры данных очевиден: один и тот же кортеж может дублироваться в каждой из двух переменных-отношений. Иначе говоря, две переменные-отношения имеют перекрывающееся смысловое значение и это приводит к тому, что один и тот же кортеж может удовлетворять предикатам обеих переменных-отношений. Поэтому достаточно очевидным является следующее правило.
■ Принцип ортогонального проектирования (исходная версия). Никакие две переменные-отношения в базе данных не должны иметь перекрывающихся смысловых значений.
Здесь можно сделать следующие дополнительные замечания.
Как говорилось в главе 9, с точки зрения пользователя, все переменные-отношения являются базовыми (за исключением тех представлений, которые определяются им для упрощения записи запросов). Иначе говоря, этот принцип применим для проектирования всех "выражаемых", а не только "реальных" баз данных. Здесь нам вновь приходится иметь дело с принципом относительности баз данных. (Безусловно, аналогичные замечания применимы и к принципам нормализации.)
Обратите внимание, что две переменные-отношения могут иметь перекрывающееся смысловое значение только в том случае, если они имеют одинаковые типы (т.е. одинаковые заголовки).
Использование принципа ортогонального проектирования подразумевает, что вставка кортежа рассматривается как операция вставки кортежа в базу данных, а не в какую-то конкретную переменную-отношение, поскольку существует не более одной переменной-отношения, предикату которой этот кортеж удовлетворяет.
Однако в настоящее время при вставке кортежа обычно требуется указывать имя той переменной-отношения R, в которую кортеж вставляется. Но это нисколько не противоречит предыдущему высказыванию, так как, по сути, имя R является всего
лишь сокращением для соответствующего предиката (например, PR). Действительно, команда выглядит так: INSERT кортеж t, где t должно удовлетворять предикату PR. Более того, переменная-отношение R может быть представлением, определенным, например, с помощью выражения типа A ONION В. Как говорилось в главе 9, очень желательно, чтобы системе было известно, куда вставлять новый кортеж: только в переменную-отношение А, только в переменную-отношение В или одновременно в обе эти переменные-отношения.
На самом деле замечания, аналогичные приведенным выше, относятся ко всем типам операций, а не только к операциям INSERT. Во всех этих случаях указываемые имена переменных-отношений в действительности являются лишь сокращениями для их предикатов. Это замечание вряд ли можно выразить более строго, если просто сказать, что семантика данных представлена именно предикатами переменных-отношений, а не их именами.
SX
s# |
SNAME |
STATUS |
SY |
s# |
SNAME |
CITY |
SI |
Smith |
20 |
|
SI |
Smith |
London |
S2 |
Jones |
10 |
|
S2 |
Jones |
Paris |
S3 |
Blake |
30 |
|
S3 |
Blake |
Paris |
S4 |
Clarck |
20 |
|
S4 |
Clarck |
London |
S5 |
Adams |
30 |
|
S5 |
Adams |
Athens |
Puc. 12.8. Еще один неудачный, но вполне допустимый вариант представления данных о поставщиках
■ Принцип ортогонального проектирования (окончательная версия). Пусть А и В являются двумя базовыми переменными-отношениями в некоторой базе данных. Тогда для переменных-отношений А и В не должно существовать декомпозиций без потерь на такие проекции А1, Am и В1, Вт соответственно, что некоторая проекция Ai в множестве проекций А1, ..., Am и некоторая проекция Bj в множестве проекций В1, ..., Вт будут обладать перекрывающимися смысловыми значениями.
При этом необходимо сделать следующие дополнительные замечания.
1. Здесь термин "декомпозиция без потерь" означает в точности то, что он означает всегда, а именно — декомпозицию на множество таких проекций, которые обла- дают следующими свойствами:
исходная переменная-отношение может быть восстановлена за счет обратной операции соединения проекций;
ни одна из проекций не является избыточной в процессе восстановления.
2. Данная версия принципа ортогонального проектирования подразумевает предыду- щую версию, поскольку единственная декомпозиция без потерь, которая всегда существует для любой переменной-отношения R, является идентичной проекцией для R (т.е. проекций по всем ее атрибутам).
Замечания
1. Предположим, что нашу традиционную переменную-отношение S с данными о по- ставщиках для улучшения структуры информации решено разделить на несколько фрагментов. Тогда в соответствии с принципом ортогонального проектирования не- обходимо обеспечить, чтобы полученные фрагменты не пересекались, в том смысле, что каждый кортеж с данными о некотором поставщике может появиться не более чем в одном из фрагментов. Назовем такое разбиение ортогональной декомпозицией.
Замечание. Термин ортогональность выбран, исходя из тех соображений, что данный принцип проектирования на самом деле декларирует полную взаимную независимость базовых переменных-отношений (т.е. отсутствие перекрытия их смысловых значений). Безусловно, этот принцип отражает очевидные соображения здравого смысла, но позволяет выразить их в формальном виде (подобно принципам нормализации).
Общее назначение ортогонального проектирования заключается в сокращении избыточности и, следовательно, в исключении аномалий обновления (вновь аналогия с принципами нормализации). По сути, ортогональное проектирование дополняет нормализацию в том смысле, что, выражаясь нестрого, нормализация сокращает избыточность данных внутри переменных-отношений, тогда как ортогональное проектирование сокращает избыточность данных между переменными-отношениями.
Несмотря на то что принципы ортогональности очевидны с точки зрения здравого смысла, они часто игнорируются на практике (причем иногда их даже рекомендуется игнорировать). Например, приведенный ниже пример структуры данных весьма распространен в финансовых базах данных.
ACTIVITIES 1997 { ENTRY!, DESCRIPTION, AMOUNT, NEW BAL }
ACTIVITIES~1998 { ENTRY*, DESCRIPTION, AMOUNT, NEW~BAL }
ACTIVITIES~1999 { ENTRY*, DESCRIPTION, AMOUNT, NEW~BAL }
ACTIVITIES~2000 { ENTRY*, DESCRIPTION, AMOUNT, NEW~BAL }
ACTIVITIES~2001 { ENTRY*, DESCRIPTION, AMOUNT, NEW~BAL }
По сути, внесение смыслового значения в имена переменных-отношений или других объектов нарушает принцип информации, который гласит, что вся информация в базе данных должна быть явно представлена в виде значений данных и никак иначе.
4. Если А и В являются базовыми отношениями одного типа, то следование принципам ортогонального проектирования будет означать следующее.
A UNION В
A INTERSECT В
A MINUS В
Всегда является непересекающимся объединением Всегда является пустым множеством Всегда равно А