- •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.5. Денормализация
До сих пор в этой (и предыдущей) главе принималось на веру утверждение, что полную нормализацию желательно выполнять вплоть до 5НФ. На практике, однако, часто можно слышать утверждения, что для достижения высокой производительности системы требуется выполнить денормализацию. При этом используются аргументы, подобные перечисленным ниже.
1. Полная нормализация означает наличие большого количества логически независимых переменных-отношений (предполагается, что рассматриваемые переменные-отношения являются базовыми).
Большое количество логически независимых переменных-отношений означает наличие большого количества физически отдельно хранимых файлов.
Большое количество физически отдельно хранимых файлов означает большое количество операций ввода-вывода.
Строго говоря, эти аргументы, конечно же, неверны, потому что (как многократно отмечалось в данной книге) нигде в определении реляционной модели не утверждается, что базовые переменные-отношения должны находиться во взаимно однозначном соответствии с хранимыми файлами. Поэтому денормализацию в случае необходимости следует выполнять на уровне хранимых файлов, но не на уровне базовых переменных-отношений. Однако в некотором отношении эти аргументы все же верны для современных SQL-продуктов, поскольку именно в них эти уровни не разделены в требуемой степени. В данном разделе понятие "денормализация" будет рассмотрено более подробно.
Замечание. Материал этого раздела в значительной степени основан на работе [12.6].
Что такое денормализация
Кратко говоря, нормализация переменной-отношения R означает ее замену таким множеством проекций R1, Rn для всех возможных значений г переменной-
отношения R, что результатом обратного соединения значений rl, ..., rn проекций Rl, ..., Rn обязательно будет значение г. Конечной целью нормализации является сокращение уровня избыточности данных за счет приведения проекций R1, Rn к максимально высокому уровню нормализации (т.е. к 5НФ).
Теперь можно перейти к определению понятия денормализации. Пусть R1, Rn является множеством переменных-отношений. Тогда денормализацией этих переменных-отношений называется такая замена переменных-отношений их соединением R, что для всех возможных значений rl, rn переменных-отношений Rl, Rn операция проекции значения г переменной-отношения R по атрибутам Ri обязательно снова приводит к созданию значений ri (где i = 1, п). Конечной целью денормализации является увеличение уровня избыточности данных за счет приведения переменной-отношения R к более низкому уровню нормализации, чем исходные переменные-отношения R1, Rn. Точнее, преследуется цель сократить количество соединений, которые потребуется выполнять во время работы приложений, за счет предварительного создания этих соединений на одном из этапов проектирования базы данных.
В качестве примера рассмотрим денормализацию переменных-отношений деталей и поставок для получения переменной-отношения PSQ, представленной на рис. 12.б6. Следует отметить, что переменная-отношение PSQ находится в 1НФ, а не в 2НФ.
|
р# |
PNAME |
COLOR |
WEIGHT |
CITY |
S# |
QTY |
|
PI |
Nut |
Red |
12.0 |
London |
Si |
300 |
|
PI |
Nut |
Red |
12.0 |
London |
S2 |
300 |
|
P2 |
Bolt |
Green |
17.0 |
Paris |
Si |
200 |
|
|P6 |
Cog |
Red |
19.0 |
London |
81 |
100 |
Рис. 12.6. Денормалюованные данные о товарах и поставках
Другие проблемы
Использование концепции денормализации связано с некоторыми вполне очевидными проблемами. Одна из них заключается в том, что, начиная денормализацию, трудно сказать, когда ее следует прекратить. В случае выполнения нормализации существуют ясные логические причины ее продолжения до тех пор, пока не будет достигнута самая высокая из возможных нормальных форм. Следует ли при выполнении денормализации стремиться к тому, чтобы достичь самой низкой из возможных нормальных форм? Конечно, нет, хотя никаких логических критериев точного определения момента прекращения этого процесса не существует. Иначе говоря, в случае денормализации наша прежняя позиция, построенная на основании строгой научной и логической теории, заменяется позицией чисто прагматической и субъективной.
Второе очевидное затруднение связано с проблемами избыточности и аномалиями обновления, которые возникают из-за того, что приходится иметь дело с не полностью нормализованными переменными-отношениями. Эти проблемы достаточно подробно обсуждались выше. Однако менее очевидной является проблема извлечения данных, т.е. денормализация может существенно усложнить выполнение некоторых запросов. Рассмотрим в качестве примера следующий запрос: "Найти средний вес всех деталей определенного цвета". При использовании обычного нормализованного макета наиболее подходящая формулировка данного запроса будет выглядеть так.
SUMMARIZE Р PER Р { COLOR } ADD AVG j WEIGHT ) AS AVWT
Однако при использовании переменной-отношения PSQ, показанной на рис. 12.6, формулировка будет выглядеть несколько сложнее (не говоря уже о том, что в такой ситуации предполагается наличие по крайней мере одной поставки для каждой детали, что в общем случае неверно).
SUMMARIZE PSQ { Pi, COLOR, WEIGHT } PER PSQ { COLOR }
ADD AVG ( WEIGHT ) AS AVWT
(Обратите внимание на то, что во второй формулировке запрос, вероятно, будет выполнить сложнее.) Иначе говоря, общепринятое мнение о том, что денормализация "хороша для извлечения, но плоха для обновления", вообще говоря, неверно как по соображениям практичности, так и по соображениям производительности.
Третья, и самая главная, проблема формулируется следующим образом. (Это высказывание относится к "истинной" денормализации, т.е. к денормализации, которая выполняется только на физическом уровне, а также к тому типу денормализации, которую иногда приходится осуществлять в современных SQL-продуктах.) Когда мы говорим, что
денормализация "способствует достижению высокой производительности", фактически подразумевается, что она способствует достижению высокой производительности некоторых конкретных приложений. Любая выбранная физическая структура, которая прекрасно подходит для одних приложений с точки зрения их производительности, может оказаться совершенно непригодной для других. Например, предположим, что каждая базовая переменная-отношение отображается на один физический хранимый файл, а каждый хранимый файл состоит из физически смежного набора хранимых записей, по одной для каждого кортежа соответствующей переменной-отношения. Тогда в отношении данной структуры можно сделать следующие замечания.
Допустим, что соединение отношений поставщиков, поставок и деталей представлено в виде одной переменной-отношения, а значит, в виде одного хранимого файла. Тогда запрос "Получить сведения обо всех поставщиках красных деталей" благодаря выбранной физической структуре будет, по-видимому, выполняться достаточно эффективно.
Однако запрос "Получить сведения о поставщиках из Лондона" при такой физической структуре будет выполняться менее эффективно по сравнению со структурой, состоящей из трех отдельных переменных-отношений, каждая из которых отображена на физически отдельный хранимый файл. Дело в том, что в первом случае данные будут распределены на большем участке устройства хранения и для их извлечения потребуется существенно больше операций ввода-вывода. Аналогичные замечания можно высказать по отношению ко всем запросам, в которых доступ осуществляется только к данным о поставщиках, деталях или поставках по отдельности (без выполнения операции соединения).
