Лабораторная работа №7. Денормализация модели ХД.
·
Задачи:
o
Что такое денормализация и методы ее
реализации;
o
Выполнить горизонтальное секционирование
таблицы;
o
Выполнить вертикальное секционирование
таблицы;
o
Выполнить объединение таблиц;
o
Выполнить денормализацию колонки.
·
Денормализацией называется процесс размещения одних и тех
же данных в различных объектах БД с целью увеличить производительность
обработки запросов.
·
Индикаторы на деномализацию:
o
Критические запросы, обращающиеся к данным более, чем одной
таблицы;
o
Вычисления на колонках одной таблицы;
o
Различные пользователи обращаются к таблицам по разным схемам доступа;
o
Частота использования колонок в запросах.
·
Горизонтальное секционирование используется для разделения таблицы на несколько таблиц с теми же колонками,
но меньшим числом строк.
·
Вертикальное секционирование используется для разделения таблицы на несколько таблиц с одинаковым числом
строк, но с различным набором колонок.
·
Объединение таблиц используется для исключения соединений между таблицами путем
объединения таблиц в одну.
·
Денормализация колонки используется для исключения соединений
между таблицами путем дублирования колонки в этих таблицах.
·
Предположим, что маркетинговая служба анализирует постоянно
продажи текущего года, а по годам анализ продаж выполняется один раз в году.
Тогда целесообразно с целью увеличения производительности запросов выполнить
горизонтальное секционирование
таблицыфактов "Продажи" (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.
·
Выберите таблицу в которую нужно дублировать
колонку. Нажмите ОК и кнопку "Далее".
·
Выберите колонку для дублирования и нажмите кнопку
"Готово".
·
Денормализация колонки выполнена.
·
Вы научились для повышения производительности обработки запросов:
o
Выполнять горизонтальное секционирование
таблицы модели
ХД;
o
Выполнять вертикальное секционирование
таблицы модели
ХД;
o
Выполнять объединение таблиц модели ХД;
o
Выполнять денормализацию колонки модели ХД.
Контрольные вопросы
1.
Как выполняется горизонтальное секционирование
таблицы модели
ХД?
2.
Как выполняется вертикальное секционирование
таблицы модели
ХД?
3.
Как выполняется объединение таблиц модели ХД?