Нормализация моделей

Как правило, объектный подход приводит к формированию нормализованной модели базы данных до третьей нормальной формы или выше, и поВперед нормализация не требуется. Тем не менее, модель необходимо проверить на корректность ее представления в соответствии с анализом предметной области, выявлением некоторых аномалий и их разрешения. Из предыдущих примеров осталось три ситуации, которые не позволяют говорить о точном соответствии модели базы данных с предметной областью.

Первая ситуация заключается в том, что сущность "Клиент", с учетом разделения клиентов на физических лиц и организации, не была рассмотрена и корректным образом смоделирована. Конечно, если бы на предыдущих этапах были рассмотрены все функции предметной области, то разработчик мог получить три варианта решения.

1. Нормализованная модель клиента с разделением на два вида с применением связи категоризации, что не потребует дальнейшей нормализации.

2. Модель с наличием классификатора "Тип клиента", связанного с сущностью "Клиент", но различные характеристические атрибуты в зависимости от типа клиента приведут к необходимости нормализации.

3. Модель, где в сущности "Заказ" появится три атрибута "ИДФ клиент" от трех разных сущностей — "Клиент", "Физическое лицо" и "Организация", что потребует дополнительной нормализации.

Вторая ситуация отражается в необходимости вычисления стоимости позиции товара, используя атрибуты "Цена товара" и "Количество". Эти атрибуты размещены в разных сущностях, и автоматический расчет по формуле будет невозможен без использования специальных механизмов автоматической обработки данных (триггеры).

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

Нормализация сущности "Клиент". По требованиям предметной области клиентами магазина могут быть физические лица и организации, характеризующиеся различными атрибутами. Предположим, что данная

сущность ранее не рассматривалась, и нормализация требует корректного представления этой сущности (рис. 4.33).

Рис. 4.УЗ. Исходная сущность "Клиент"


Указанный атрибут "Наименование клиента" является не совсем корректным, хотя и сформирован на основе анализа документа "Заказ", но рассмотрение других документов и понимание различий разных клиентов требуют более глубокого рассмотрения этой сущности, что приводит к расширению ее атрибутивного состава.

Заменив атрибут "Наименование клиента" на два атрибута — "Физическое лицо" и "Организация", — сформировали указание на возможное существование двух различных типов клиентов, что потребует разделения, поскольку каждый из вариантов является самостоятельным структурным элементом (рис. 4.34).

Рис. 434. Модифицированное отношение "Клиент"


Еще стоит обратить внимание на одно свойство, которое также требует нормализации сущности, — это возможность хранения пустого значения (табл. 4.18). Поскольку клиент не может быть одновременно физическим лицом и организацией[1], то один из атрибутов должен иметь возможность хранить пустое значение, но выявить, какой это должен быть атрибут, невозможно, поэтому указанное свойство устанавливается на оба атрибута, что приводит к ситуации, когда клиент будет создан, а его данные не будут определены, что невозможно ввиду необходимости указания наименования клиента в документах.

Таблица 4.18

Описание сущности "Клиент"

п/п

Сущность

Атрибут

Тип данных

Алгоритм

Умолчание

Ограничение

NULL

1

Клиент

ИДФ клиента

Ц

-

-

>0

-

2

Физическое лицо

Структурный

-

-

-

О

3

Организация

То же

-

-

-

о



Чтобы понимать, к какому типу относится каждый конкретный клиент, можно добавить техническую сущность, не ассоциированную с объектами предметной области, с названием "Тип клиента" (рис. 4.35).

Рис. 435. Добавление сущности "Тип клиента"


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

Дальнейшее рассмотрение структурных атрибутов требует провести выделение этих элементов в самостоятельные сущности, исключая необходимость хранить много пустых значений по атрибутам соответствующих структурных элементов и позволяя разрешить некоторые аномалии обновления, которые были ранее рассмотрены в части одновременного отсутствия данных по обоим типам клиентов.

В результате нормализации были выделены две сущности-категории (рис. 4.36), соответствующие типам организации, с определением совокупности атрибутов, которыми они характеризуются. Эти сущности могли быть выделены при рассмотрении функций предметной области, и их соединение с сущностью "Клиент" могло быть оптимизационным действием, разрешая проблему существования связи сущности "Заказ" с тремя сущностями, описывающими клиентов.

Рис. 436. Выделение сущностей-категорий


В ходе применения различных правил нормализации (рис. 4.37) для сущности "Клиент" и ее производных сущностей-категорий "Физи-

чсское лицо" и "Организация" были сформированы производные сущности — "Организационно-правовая форма" и "Банк", — структурное наполнение которых определено, исходя из анализа предметной области и атрибутивного состава документов, где применяются соответствующие значения.

Рис. 437. Нормализованная модель клиента


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

Таблица 4.19

Описание ключевых групп

п/п

Атрибут

Тип ключа

Тип

данных

Уникальность

Дополнительно

1

Организация. ИДФ клиента

Первичный/

Внешний

ц

Суррогатный

2

Организация. Наименование организации

Альтернативный

С(150)

Индекс

3

Организация. Расчетный счет

То же

С (25)

Ограничение

4

Организация. ИДФ организационно- правовой формы

Внешний

ц

5

Организация. ИДФ банка

То же

ц




п/п

Атрибут

Тип ключа

Тип

данных

Уникальность

Дополнительно

6

Организационно правовая форма. ИДФ организационно-правовой формы

Первичный

Ц(+0

Суррогатный

7

Организационно-правовая форма. Наименование организационно правовой формы

Альтернативный

С (100)

Индекс

8

Организационно правовая форма. Код организационно-правовой формы

То же

С (2)

Ограничение

9

Банк. ИДФ банка

Первичный

Ц(+1)

-

Суррогатный

10

Банк. Наименование банка

Альтернативный

С(150)

Ограничение

-

11

Банк. БИК банка

То же

С (7)

Индекс

-

12

Банк. Корреспондентский счет

- " -

С (25)

Ограничение

-

13

Физическое лицо. ИДФ клиента

Первичный/

Внешний

ц

-

Суррогатный


Как очевидно из таблицы, некоторые ключевые атрибуты представляются суррогатными, но не вычисляются автоматически, поскольку они являются производными от ключа сущности-общности, где уже реализуется авто вычисление значения первичного ключа. Именно поэтому в сущностях-категориях атрибуты обладают целочисленным типом без авто вычисления. Некоторые альтернативные ключи обладают различными правилами соблюдения уникальности. Объясняется это необходимостью выполнять операции поиска и сортировки данных но этим атрибутам. Такие атрибуты характеризуются проверкой уникальности на основе индексов.

В результате проведения всех нормализационных операций будет сформирована общая модель базы данных (рис. 4.38). Ввиду достаточно небольшой предметной области и рассмотренных функций общая модель представлена в приемлемо удобном виде.

Однако, как ранее говорилось, при наличии большого количества сущностей и сложной предметной области общая модель базы данных может быть достаточно объемной и сложной, что будет мешать ориентироваться в ней, соответственно данное неудобство разрешается с помощью функционализмами, которая была использована в рамках объектного подхода.


Рис. 4.38. Итоговая модель после нормализации