Задачи:Что такое денормализация и методы ее реализации;
Выполнить горизонтальное секционирование таблицы;
Выполнить вертикальное секционирование таблицы;
Выполнить объединение таблиц;
Выполнить денормализацию колонки.
Определения
Денормализацией называется процесс размещения одних и тех же данных в различных объектах БД с целью увеличить производительность обработки запросов.
Индикаторы на деномализацию:Критические запросы, обращающиеся к данным более, чем одной таблицы;
Вычисления на колонках одной таблицы;
Различные пользователи обращаются к таблицам по разным схемам доступа;
Частота использования колонок в запросах.
Методы денормализации
Горизонтальное секционирование используется для разделения таблицы на несколько таблиц с теми же колонками, но меньшим числом строк.
Вертикальное секционирование используется для разделения таблицы на несколько таблиц с одинаковым числом строк, но с различным набором колонок.
Объединение таблиц используется для исключения соединений между таблицами путем объединения таблиц в одну.
Денормализация колонки используется для исключения соединений между таблицами путем дублирования колонки в этих таблицах.
Горизонтальное секционирование
Предположим, что маркетинговая служба анализирует постоянно продажи текущего года, а по годам анализ продаж выполняется один раз в году. Тогда целесообразно с целью увеличения производительности запросов выполнить горизонтальное секционирование таблицы фактов "Продажи" (Sale) по годам.
Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.
Модель ХД

Горизонтальное секционирование
Для этого введем в таблицу фактов Sales атрибут "Год продажи" (Sale_year) в качестве ключа секционирования.
Для того, чтобы выполнить горизонтальное секционирования таблицы фактов "Продажи" (Sale) можно щелкнуть правой кнопкой мыши на таблице фактов и из всплывающего меню выбрать пункт "Горизонтальное секционирование" (Horizontal Partitioning).
Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.
Ключ для горизонтального секционирования

Горизонтальное секционирование
На экране появится диалоговое окно "Выбор таблицы для секционирования" (Partitioned Table Selection). Выбрав таблицу "Продажи" (Sale), нажмите на кнопку "Далее".
На экране появится диалоговое окно "Определение секций" (Partition Definitions), в котором необходимо определить имена секций (пусть это будут имена Sale_CurYear, Sale_2009 и Sale_2008) и нажать на кнопку "Далее".
Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.
Выбор таблицы для горизонтального секционирования

Определение имен секций

Горизонтальное секционирование
На экране появится диалоговое окно "Выбор дискриминантной колонки" (Discriminant Column Selection). Дисериминантная колонка – этого колонка таблицы, которая входит в критерий секционирования, поэтому ее не обязательно хранить в секциях.
Щелкнув левой кнопкой мыши на пиктограмме "Добавить строку", вы активизируете диалоговое окно "Выбор" (Selection). Выберем в списке колонок колонку "Год продажи" (SALE_YEAR), по которой будет выполняться секционирование и нажмем кнопки "ОК" и "Далее".
Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.
Выбор дискриминантной колонки

Выбор дискриминантной колонки

Выбор дискриминантной колонки

Горизонтальное секционирование
На экране появится диалоговое окно "Информация о секционировании" (Partitioning Information).
Далее нажмем кнопку "Готово". После расстановки на рабочем пространстве секций получим многомерную модель данных с секционированной таблицей "Продажи" (Sale).
Чтобы удалить секционирование, выберите пункт меню Model->Transformations и в появившемся диалоговом окне List of Transformations удалите определение секционирования таблицы.
Секции таблицы становятся независимыми и их нужно будет удалить через пункт меню Model->Table в диалоговом окне List of Tables.
Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.
Определение секционирования

Модель ХД с секционированной таблицей фактов

Удаление секционирования

Удаление секций

Ключ секционирования удаляется автоматически

Вертикальное секционирование
Вертикальное секционирование состоит в сегментации исходной таблицы с одним и темже первичным ключом, но с различными колонками.
Выполним вертикальное секционирование таблицы измерения Customer.
Для этого сначала в таблицу Customer добавим данные о кредитах покупателя Credit_Card_Number и Amount_Number. В этом случае имеет смысл отделить данные о кредитах от других данных таблицы.
Вертикальное секционирование
Активизируйте таблицу Customer. В всплывающем по правой кнопке меню пвыберите вертикальное секционирование. Нажмите кнопку "Далее".
В появившемся диалоговом окне присвойте имя объекту. Нажмите кнопку "Далее".
В появившемся диалоговом окне Partition Column Selection растащите колонки по таблицам. Нажмите кнопку "Готово".
Вы получили вертикальное разбиение таблицы.
Вертикальное секционирование

Вертикальное секционирование

Вертикальное секционирование

Вертикальное секционирование

Вертикальное секционирование

Объединение таблиц
Для того, чтобы продемонстрировать объединение таблиц добавим в исходную модель таблицу Order, связанную с таблицей измерения Customer.
Для такой модификации модели ХД целесообразно объединить таблицы Customer и Order в одну, чтобы оптимизировать соединения.
Выберите пункт меню Tools-"Denormalization-"Table Collapsing.
В появившемся диалоговом окне Table Collapsing Target определите имя новой таблицы. Нажмите кнопку "Далее".
В появившемся диалоговом окне выберите для объединения. Нажмите кнопку "Далее".
Нажмите кнопку "Готово".
Объединение таблиц: расширение модели

Объединение таблиц

Объединение таблиц

Объединение таблиц

Объединение таблиц

Объединение таблиц

Денормализация колонки
Для демонстрации метода денормализации колонки расширим исходную модель данных.
Добавим в исходную модель две таблицы Devision (Отдел) и PaySlip (Платежная расписка).
Допустим, что мы хотим, чтобы наименование отдела появлялось в платежной расписке при печати. Тогда, чтобы сократить число соединений мы можем выполнить денормализацию колонки Div_Name.
Денормализация колонки

Денормализация колонки
Выберите пункт меню Tools-"Denormalization-"Column Denormalization. Появится Column Denormalization Wizard.
Выберите таблицу в которую нужно дублировать колонку. Нажмите ОК и кнопку "Далее".
Выберите колонку для дублирования и нажмите кнопку "Готово".
Денормализация колонки выполнена.
Денормализация колонки

Денормализация колонки

Денормализация колонки

Денормализация колонки

Выводы
Вы научились для повышения производительности обработки запросов:Выполнять горизонтальное секционирование таблицы модели ХД;
Выполнять вертикальное секционирование таблицы модели ХД;
Выполнять объединение таблиц модели ХД;
Выполнять денормализацию колонки модели ХД.