Введение в системы БД (542480), страница 120
Текст из файла (страница 120)
приведение к НФБК и сохранение зависимостей, в некоторых случаях приводит к конфликтной ситуации. ° Процедура нормализации позволяет избавиться от избыточности за счет разбиения на проекции, однако не всякую избыточность можно устранить таким образом ("проблема переменной-отношения СТХР*', см. аннотацию к [!2.131). Следует также отметить, что хорошие методики нисходящего проектирования позволяют тем или иным конкретным способом генерировать полностью нормализованный проект базы данных. 12.5. Денормализация До сих пор в этой (и предыдущей) главе принималось на веру утверждение, что полную нормализацию желательно выполнять вплоть до 5НФ.
На практике, однако, часто можно слышать утверждения, что для достижения высокой производительности системы требуется выполнить денормализацию. При этом используются аргументы, подобные перечисленным ниже. 1. Полная нормализация означает наличие большого количества логически независимых переменных-отношений (предполагается, что рассматриваемые переменные- отношения являются базовыми). Глава 12. Дальнейшая нормализация: более выаояие нормальные формы 483 2. Большое количество логически независимых переменных-отношений означает наличие большого количества физически отдельно хранимых файлов. 3. Большое количество физически отдельно хранимых файлов означает большое количество операций ввода-вывода.
Строго говоря, эти аргументы, конечно же, неверны, потому что (как многократно отмечалось в данной книге) нигде в определении реляционной модели не утверждается, что базовые переменные-отношения должны находиться во взаимно однозначном соответствии с хранимыми файлами. Поэтому денормаеизацию в случае необходимоппи следует выполнять на уровне хранимых файлов, но пе на уровне базовых переменных-озиношений. Однако в некотором отношении эти аргументы все же верны для современных ЗЯ).-продуктов, поскольку именно в них эти уровни не разделены в требуемой степени.
В данном разделе понятие "денормализация" будет рассмотрено более подробно. Замечание. Материал этого раздела в значительной степени основан на работе 112.б1. Что такое денормализация Кратко говоря, нормализация переменной-отношения К означает ее замену таким множеством проекций К1, ..., Кп для всех возможных значений г переменной- отношения К, что результатом обратного соединения значений г1, ..., гл проекций К1, ..., Кп обязательно будет значение г. Конечной целью нормализации является сокращение уровня избыточности данных за счет приведения проекций К1, ..., Кп к максимально высокому уровню нормализации (т.е.
к 5НФ). Теперь можно перейти к определению понятия денормализации. Пусть К1, Кп является множеством переменных-отношений. Тогда денормализацией этих переменных-отношений называется такая замена переменных-отношений их соединением К, что для всех возможных значений г1, ..., гл переменных-отношений К1, Кл операция проекции значения г переменной-отношения К по атрибутам К1 обязательно снова приводит к созданию значений г1 (где 1 = 1, ..., л). Конечной целью денормализации является увеличение уровня избыточности данных за счет приведения переменной-отношения К к более низкому уровню нормализации, чем исходные переменные-отношения К1, ..., Кл.
Точнее, преследуется цель сократить количество соединений, которые потребуется выполнять во время работы приложений, за счет предварительного создания этих соединений на одном из этапов проектирования базы данных. В качестве примера рассмотрим денормализацию переменных-отношений деталей и поставок для получения переменной-отношения РЯ(), представленной на рис. 12.64.
Следует отметить, что переменная-отношение РБО находится в 1НФ, а не в 2НФ. При использовании нашего традиционного примера с переменнылзи-отношениями постввшиков и поставок в случае деиормализации может возникнуть проблел~а, связанная с тем, что в результате соединения будет утрачена информация о поставщике с номером зб5'.
По этой причине можно предпаюжить, что в процессе деиормализации следует использовать операции "внешних" соединений. Однако, как показано в главе 18, само по себе использование виешииз соединений также сопровождается возникновением определенных проблем. 484 Часть 111. Проектирование базы данных Рис. 12.6. Денормализоеанные данные о товарах и поставках Другие проблемы Использование концепции денормализации связано с некоторыми вполне очевидными проблемами. Одна из них заключается в том, что, начиная денормализацию, трудно сказать, когда ее следует прекратить. В случае выполнения нормализации существуют ясные логические причины ее продолжения до тех пор, пока не будет достигнута самая высокая из возможных нормальных форм.
Следует ли при выполнении денормализации стремиться к тому, чтобы достичь самой низкой из возможных нормальных форм? Конечно, нет, хотя никаких логических критериев точного определения момента прекращения этого процесса не существует. Иначе говоря, в случае денормализации наша прежняя позиция, построенная на основании строгой научной и логической теории, заменяется позицией чисто прагматической и субъективной. Второе очевидное затруднение связано с проблемами избыточности и аномалиями обновления, которые возникают из-за того, что приходится иметь дело с не полностью нормализованными переменными-отношениями.
Эти проблемы достаточно подробно обсуждались выше. Однако менее очевидной является проблема извлечения данных, т.е. денормализация может существенно усложнить выполнение некоторых запросов. Рассмотрим в качестве примера следующий запрос: "Найти средний вес всех деталей определенного цвета". При использовании обычного нормализованного макета наиболее подходящая формулировка данного запроса будет выглядеть так.
ЯОИИАН1ЕЕ Р РЕН Р ( СОЬОН ) АРР АЧО ( ИЕ1ЯНТ ) АЯ АЧЕМУ Однако при использовании переменной-отношения РЯО, показанной на рис. 12.6, формулировка будет выглядеть несколько сложнее (не говоря уже о том, что в такой ситуации предполагается наличие по крайней мере одной поставки для каждой детали, что в общем случае неверно). ЯОИИАН1ЕЕ РЯ() ( Р(), СОЬОН, ИЕХЯНТ ) РЕН РЯО ( СОЬОН ) АОО АЧЯ ( ИЕ1ОНТ ) АЯ АЧ(ЕР (Обратите внимание на то, что во второй формулировке запрос, вероятно, будет выполнить сложнее.) Иначе говоря, общепринятое мнение о том, что денормализация "хороша для извлечения, но плоха для обновления", вообще говоря, неверно как по соображениям практичности, так и по соображениям производительности.
Третья, и самая главная, проблема формулируется следующим образом.(Это высказывание относится к "истинной" денормализации, т.е, к денормализации, которая выполняется только на физическом уровне, а также к тому типу денормализации, которую иногда приходится осуществлять в современных БО):продуктах.) Когда мы говорим, что Глава 32. Дальнейшая нормализация: более высокие нормальные формы 485 денормализация "способствует достижению высокой производительности", фактически подразумевается, что она способствует достижению высокой производительности некоторых конкретных приложений. Любая выбранная физическая структура, которая прекрасно подходит для одних приложений с точки зрения их производительности, может оказаться совершенно непригодной для других.
Например, предположим, что каждая базовая переменная-отношение отображается на один физический хранимый файл, а каждый хранимый файл состоит из физически смежного набора хранимых записей, по одной для каждого кортежа соответствующей переменной-отношения. Тогда в отношении данной структуры можно сделать следующие замечания.
° Допустим, что соединение отношений поставщиков, поставок и деталей представлено в виде одной переменной-отношения, а значит, в виде одного хранимого файла. Тогда запрос "Получить сведения обо всех поставщиках красных деталей" благодаря выбранной физической структуре будет, по-видимому, выполняться достаточно эффективно.
° Однако запрос "Получить сведения о поставщиках из Лондона" при такой физической структуре будет выполняться менее эффективно по сравнению со структурой, состоящей из трех отдельных переменных-отношений, каждая из которых отображена на физически отдельный хранимый файл. Дело в том, что в первом случае данные будут распределены на большем участке устройства хранения и лля их извлечения потребуется существенно больше операций ввода-вывода. Аналогичные замечания можно высказать по отношению ко всем запросам, в которых доступ осуществляется только к данным о поставщиках, деталях или поставках по отдельности (без выполнения операции соединения).
12.6. Ортогональное проектирование (небольшое отступление от темы) В этом разделе мы кратко рассмотрим другой принцип проектирования баз данных, который напрямую не связан с дальнейшей нормализацией, но очень похож на нее тем. что также является научным. Он называется принципом ортогонального проектирования (рбпс1р!е оГ огг!зойопа! дез!Яп). Обратимся к рис.