Лабораторная работа №7. Денормализация модели ХД.

 

·                  Задачи:

o        Что такое денормализация и методы ее реализации;

o        Выполнить горизонтальное секционирование таблицы;

o        Выполнить вертикальное секционирование таблицы;

o        Выполнить объединение таблиц;

o        Выполнить денормализацию колонки.

Определения

·                  Денормализацией называется процесс размещения одних и тех же данных в различных объектах БД с целью увеличить производительность обработки запросов.

·                  Индикаторы на деномализацию:

o        Критические запросы, обращающиеся к данным более, чем одной таблицы;

o        Вычисления на колонках одной таблицы;

o        Различные пользователи обращаются к таблицам по разным схемам доступа;

o        Частота использования колонок в запросах.

Методы денормализации

·                  Горизонтальное секционирование используется для разделения таблицы на несколько таблиц с теми же колонками, но меньшим числом строк.

·                  Вертикальное секционирование используется для разделения таблицы на несколько таблиц с одинаковым числом строк, но с различным набором колонок.

·                  Объединение таблиц используется для исключения соединений между таблицами путем объединения таблиц в одну.

·                  Денормализация колонки используется для исключения соединений между таблицами путем дублирования колонки в этих таблицах.

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

·                  Предположим, что маркетинговая служба анализирует постоянно продажи текущего года, а по годам анализ продаж выполняется один раз в году. Тогда целесообразно с целью увеличения производительности запросов выполнить горизонтальное секционирование таблицыфактов "Продажи" (Sale) по годам.

Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.

Модель ХД

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_01.jpg

 

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

·                  Для этого введем в таблицу фактов Sales атрибут "Год продажи" (Sale_year) в качестве ключа секционирования.

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

Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.

Ключ для горизонтального секционирования

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_02.jpg

 

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

·                  На экране появится диалоговое окно "Выбор таблицы для секционирования" (Partitioned Table Selection). Выбрав таблицу "Продажи" (Sale), нажмите на кнопку "Далее".

·                  На экране появится диалоговое окно "Определение секций" (Partition Definitions), в котором необходимо определить имена секций (пусть это будут имена Sale_CurYear, Sale_2009 и Sale_2008) и нажать на кнопку "Далее".

Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.

Выбор таблицы для горизонтального секционирования

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_03.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_04.jpg

 

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

·                  На экране появится диалоговое окно "Выбор дискриминантной колонки" (Discriminant Column Selection). Дисериминантная колонка – этого колонка таблицы, которая входит в критерий секционирования, поэтому ее не обязательно хранить в секциях.

·                  Щелкнув левой кнопкой мыши на пиктограмме "Добавить строку", вы активизируете диалоговое окно "Выбор" (Selection). Выберем в списке колонок колонку "Год продажи" (SALE_YEAR), по которой будет выполняться секционирование и нажмем кнопки "ОК" и "Далее".

Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_05.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_06.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_07.jpg

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

·                  На экране появится диалоговое окно "Информация о секционировании" (Partitioning Information).

·                  Далее нажмем кнопку "Готово". После расстановки на рабочем пространстве секций получим многомерную модель данных с секционированной таблицей "Продажи" (Sale).

·                  Чтобы удалить секционирование, выберите пункт меню Model->Transformations и в появившемся диалоговом окне List of Transformations удалите определение секционирования таблицы.

·                  Секции таблицы становятся независимыми и их нужно будет удалить через пункт меню Model->Table в диалоговом окне List of Tables.

Рассмотрим, как CASE средства помогают проектировщику данных выполнять секционирование таблиц многомерной модели данных.

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_08.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_09.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_10.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_11.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_12.jpg

 

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

·                  Вертикальное секционирование состоит в сегментации исходной таблицы с одним и темже первичным ключом, но с различными колонками.

·                  Выполним вертикальное секционирование таблицы измерения Customer.

·                  Для этого сначала в таблицу Customer добавим данные о кредитах покупателя Credit_Card_Number и Amount_Number. В этом случае имеет смысл отделить данные о кредитах от других данных таблицы.

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

·                  Активизируйте таблицу Customer. В всплывающем по правой кнопке меню пвыберите вертикальное секционирование. Нажмите кнопку "Далее".

·                  В появившемся диалоговом окне присвойте имя объекту. Нажмите кнопку "Далее".

·                  В появившемся диалоговом окне Partition Column Selection растащите колонки по таблицам. Нажмите кнопку "Готово".

·                  Вы получили вертикальное разбиение таблицы.

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_13.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_14.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_15.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_16.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_17.jpg

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

·                  Для того, чтобы продемонстрировать объединение таблиц добавим в исходную модель таблицу Order, связанную с таблицей измерения Customer.

·                  Для такой модификации модели ХД целесообразно объединить таблицы Customer и Order в одну, чтобы оптимизировать соединения.

·                  Выберитепунктменю Tools-"Denormalization-"Table Collapsing.

·                  В появившемся диалоговом окне Table Collapsing Target определите имя новой таблицы. Нажмите кнопку "Далее".

·                  В появившемся диалоговом окне выберите для объединения. Нажмите кнопку "Далее".

·                  Нажмите кнопку "Готово".

Объединение таблиц: расширение модели

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_18.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_19.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_20.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_21.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_22.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_23.jpg

 

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

·                  Для демонстрации метода денормализации колонки расширим исходную модель данных.

·                  Добавим в исходную модель две таблицы Devision (Отдел) и PaySlip (Платежная расписка).

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

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_24.jpg

 

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

·                  Выберитепунктменю Tools-"Denormalization-"Column Denormalization. Появится Column Denormalization Wizard.

·                  Выберите таблицу в которую нужно дублировать колонку. Нажмите ОК и кнопку "Далее".

·                  Выберите колонку для дублирования и нажмите кнопку "Готово".

·                  Денормализация колонки выполнена.

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_25.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_26.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_27.jpg

 

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

https://www.intuit.ru/EDI/29_01_18_1/1517178111-20683/tutorial/632/objects/21/files/p4_28.jpg

 

Выводы

·                  Вы научились для повышения производительности обработки запросов:

o        Выполнять горизонтальное секционирование таблицы модели ХД;

o        Выполнять вертикальное секционирование таблицы модели ХД;

o        Выполнять объединение таблиц модели ХД;

o        Выполнять денормализацию колонки модели ХД.

 

Контрольные вопросы

1.         Как выполняется горизонтальное секционирование таблицы модели ХД?

2.         Как выполняется вертикальное секционирование таблицы модели ХД?

3.         Как выполняется объединение таблиц модели ХД?