- •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. Резюме
Часть III
Проектирование базы данных
В этой части книги речь пойдет о проектировании базы данных, точнее — о проектировании реляционной базы данных. В общем эта задача формулируется следующим образом: выбрать подходящую логическую структуру для заданного массива данных, которые требуется поместить в базу данных. Иначе говоря, нужно решить вопрос, какие необходимы базовые переменные-отношения и какой набор атрибутов они должны включать. Совершенно очевидно, что решение этой задачи имеет большое практическое значение.
Прежде чем приступить к подробному изложению данной темы, сделаем несколько предварительных замечаний.
■ Следует заметить, что речь здесь пойдет о логическом (или концептуальном) проектировании, а не о разработке физического проекта. Это вовсе не значит, что физическое проектирование не имеет большого значения. Наоборот, создание физического проекта играет очень важную роль. Тем не менее необходимо сделать следующие оговорки.
а) Физическое проектирование может рассматриваться как отдельный последую- щий этап. Иначе говоря, для "правильного" проектирования базы данных преж- де всего необходимо создать ее приемлемый логический (т.е. реляционный) проект. И лишь затем как отдельный этап разработки выполнить отображение этого логического проекта на определенные физические структуры, поддержи- ваемые конкретной СУБД. (Иначе говоря, как уже отмечалось в главе 2, физи- ческий проект создается на базе логического и никак иначе.)
б) Физическое проектирование по определению является зависимым от специфи- ки конкретной целевой СУБД. Однако эта тема выходит за рамки учебника об- щего плана, к которым следует отнести настоящую книгу. Логический макет, наоборот, совершенно независим от СУБД, и для его реализации могут исполь- зоваться некоторые строгие теоретические принципы. Безусловно, именно эти принципы и должны описываться в книге подобного толка.
К сожалению, мы живем в несовершенном мире и на практике часто случается так, что решения, принятые в процессе физической реализации проекта, могут оказывать существенное обратное влияние на его логический уровень. (Если говорить точнее, то это имеет место, в основном, из-за того (как уже несколько раз отмечалось в этой книге), что в современных СУБД обычно поддерживаются только относительно простые средства
отображения между логическим и физическим уровнями.) Иначе говоря, для достижения компромисса может потребоваться выполнение нескольких итераций цикла "логическое проектирование— физическое проектирование". Тем не менее изложение материала в этой части ведется исходя из того, что предварительно необходимо создать логический проект без учета особенностей его будущей физической реализации (например, без учета требований к определенному уровню производительности). Таким образом, материал этой части книги, в основном, нацелен на решение задачи предварительного создания логического проекта базы данных.
Хотя, как отмечалось ранее, речь пойдет, главным образом, о проекте реляционной системы, представленные здесь идеи в равной степени относятся и к нереляционным базам данных. Иначе говоря, мы считаем, что правильный способ создания проекта нереляционной системы состоит в предварительной разработке ее корректного реляционного проекта с его последующим отображением (в виде отдельного этапа) на любые нереляционные структуры (например, иерархии), поддерживаемые в целевой СУБД.
После всего сказанного следует подчеркнуть, что проектирование базы данных — это скорее искусство, чем наука. Конечно, здесь снова следует повторить, что существуют некоторые научные принципы такого проектирования, которые будут изложены в следующих четырех главах. Однако при проектировании базы данных возникает множество других проблем, которые не всегда можно решить, руководствуясь этими принципами. В результате теоретики и практики в области создания баз данных разработали множество методологий1 проектирования. Среди них есть как достаточно точные и строгие, так и не относящиеся к таковым. Однако все они в той или иной степени специализированы и предназначены для решения именно той проблемы, которая считалась неразрешимой на момент создания конкретной методики. Иными словами, они предназначались для поиска такого варианта логического проекта, который был бы, бесспорно, лучшим в данной ситуации. Поскольку все эти методологии являются в большей или меньшей степени специализированными, существует мало объективных критериев для предпочтения одной из них. Все же, несмотря на это в главе 13 будет описан один широкоизвестный подход, менее специализированный, чем другие. Там же вы кратко ознакомитесь и с другими подходами, получившими коммерческую поддержку.
■ Следует отметить некоторые допущения, используемые в дальнейшем изложении.
а) Проектирование базы данных заключается не только в создании правильной структуры данных. Другой и, вероятно, более важной задачей является обеспе- чение целостности данных. Это замечание будет неоднократно повторено и усилено в тексте последующих глав,
' Термин "методология" изначально означал изучение методов, но со временем стал использоваться и для обозначения "системы методов и правил, которые применяются для исследований или выполнения работы в некоторой области науки или искусства" (см. Chambers Twentieth Century Dictionary*.
б) Далее в большинстве случаев проектирование рассматривается независимо от приложения. Иначе говоря, интерес представляют сами данные, а не то, как они будут использоваться. Независимость от приложения в этом смысле желательна
по той простой причине, что в момент проектирования базы данных обычно еще неизвестны все возможные способы использования ее данных. Таким образом, необходимо, чтобы созданный проект был стабильным, т.е. оставался работоспособным даже при возникновении в приложениях новых (т.е. неизвестных на момент создания исходного макета) требований к данным. Следуя этим допущениям (и используя терминологию из главы 2), можно сказать, что в этой части книги обсуждается создание концептуальной схемы, т.е. абстрактного логического макета, не зависящего от аппаратного обеспечения, операционной системы, целевой СУБД, языка программирования, пользователей и т.д. В частности, как указывалось ранее, здесь нас не интересуют компромиссные решения, принимаемые, например, в целях достижения требуемой производительности.
■ Как отмечалось выше, задача проектирования базы данных заключается в том, чтобы решить, какие базовые переменные-отношения и с каким набором атрибутов следует использовать. Фактически для этого также необходимо выяснить, какие следует использовать домены или типы. На момент создания книги этой теме было посвящено совсем немного публикаций, поэтому освещение данного вопроса будет очень кратким (исключениями являются лишь публикации [13.11], [13.39]).
Данная часть имеет следующую структуру. В главе 10 описаны некоторые теоретические основы, а в главах 11 и 12 — основные идеи дальнейшей нормализации, построенные на этих теоретических принципах и позволяющие придать смысл неформальным утверждениям о преимуществах того или иного проекта. Затем в главе 13 рассматривается семантическое моделирование, в частности описываются концепции построения модели "сущность/связь" (или ER-модели) и демонстрируется, как их можно использовать на практике для нисходящего проектирования систем (начиная с сущностей реального мира и заканчивая формальным реляционным проектом базы данных).
Глава
Функциональные зависимости