Автор: Malcolm Chisholm
Дата публикации оригинала: 2008-07-09
Источник: сайт B-Eye-Network

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

Следует сказать, что значение нормализации построения баз данных хорошо понимают специалисты по управлению данными – по меньшей мере, в третьей нормальной форме. Уже многие базы данных создаются в третьей или выше нормальной форме только для того, чтобы наполняться справочными данными, которые являются хаотичными и нестандартными. Это может иметь негативное влияние, перекрывающее основное преимущество построения нормализованных баз данных, которое состоит в том, что дизайн базы данных должен меняться только в том случае, если бизнес-сфера поддерживает такие изменения. Необходимо обратить внимание, что наборы значений справочных данных должны «нормализоваться» таким образом, который является подходящим для справочных данных, чтобы база данных приносила максимальный возврат на инвестиции.

«Нормализация» в общем, означает стандартизацию и обычно заключается в соответствии одному или нескольким правилам для достижения стандартизации.

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

Это определение означает, что таблицы справочных данных являются тем, что обычно называется «справочными таблицами» или «значениями домена». Это обычно таблицы с ключевым столбцом, содержащим код, и другим столбцом, содержащим описание. Иногда таблицы справочных данных могут иметь дополнительные столбцы, которые могут включать в себя внешние ключи других таблиц справочных данных. Примеры таблиц справочных данных включают в себя таблицы Страна, Валюта, Тип клиента и Тип продукта.

Почему важны справочные данные?

Справочные данные очень важны потому, что они связывают метаданные в соответствии со значимостью показателей значений частных данных. Коды имеют определения, а не только соответствующие описания. Эти определения могут не выражаться формально, но их необходимо понимать для использования таблиц справочных данных. Например, справочные данные используются для контроля за бизнес-правилами: если бизнес-правило включает в себя значение фактических данных, это практически всегда будут справочные данные (например, код). Семантика значения кода отслеживает логику бизнес-правила. Коды также важны в иерархиях отчётности, когда пользователи должны понять, что означает каждая категория в отчёте.

Таким образом, справочные данные в определенном смысле действуют как метаданные, но они не обрабатываются как метаданные. Специалисты в области IT, кажется, рассматривают базу данных как IT-задачу, но заполняют ее такими данными, как, например, сведения о работе корпоративных пользователей. С этой точки зрения, за значения справочных данных ответственность несут пользователи. Однако на самом деле таблицы справочных данных заполняются задолго до того, как появится приложение, даже еще до тестирования, поэтому эта задача частично выполняется самими специалистами в области IT. В итоге, мало внимания уделяется заполнению значений справочных данных. Однако таблицы справочных данных обычно составляют от 20% до 50% базы данных в зависимости от количества таблиц. Поэтому в базе данных, которая структурируется в третьей нормальной форме, может быть до половины таблиц, заполненных хаотическим образом.

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

Определение всех необходимых таблиц справочных данных

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

Поэтому важно определить отдельные таблицы справочных данных для поддержки всех справочных данных, используемых в базе данных. Не должно быть «сиротливых» столбцов с кодами, не имеющих связанных таблиц со справочными данными.

Надлежащий уровень абстракции справочных данных

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

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

Чрезмерная абстракция справочных данных может представлять собой не что иное, как таблицу базы данных, контекст которой не подходит для ее определений, в результате возникает ситуация, известная как «семантическая дезинтеграция». Особенность таблиц справочных данных в том, что они зачастую определяются такими неопределенными терминами (например, чрезмерно абстрагированными), которым может удовлетворять практически любое значение данных. Этой проблемы можно избежать, если проводить более строгий анализ таблиц справочных данных и быть готовым к внедрению при необходимости новых таблиц справочных данных. Необходимо прилагать все усилия для придания соответствия таблицы справочных данных и допустимого уровня абстракции, что выражается определением таблицы.

Разрешение проблемы перекрывания значений справочных данных

Справочные данные отличаются от других типов данных тем, что обычно отдельные значения требуют определений. К сожалению, это представлено в редких случаях, и одной из проблем, которые могут возникать, является перекрытие значений данных. Например, таблица Код страны должна содержать одно значение для «Китайской Народной Республики» и другое для «Гонконга». С политической точки зрения Китайская Народная Республика объединена с Гонконгом, таким образом, здесь должна быть только одна запись, если только предприятие, использующее эту таблицу, не хочет иметь отдельную отчётность для своей деятельности в Гонконге. В этом случае в определении, относящемся к записи «Китайская Народная Республика», должно быть явно указано, что Гонконг к ней не относится.

Исключение разрывов в таблицах справочных данных

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

Обычно для смягчения этой проблемы необходимо иметь одно или более значений в таблице справочных данных, называемых, например, как «Прочее», «Неопределенное», «Разное» или «Неизвестное». Все что не соответствует определенным значениям в таблице, относится к одной из этих категорий. В действительности, эти категории являются возможностью отойти от управления справочными данными и обычно со временем все более разрастаются, что может потребовать полного пересмотра таблицы справочных данных.

Устранение проблемы различных уровней справочных данных

После проверки содержимого таблицы справочных данных иногда выясняется, что некоторые записи отражают более низкий уровень детализации, чем другие. Например, таблица Код страны, отражающая различные страны, имеет отдельную запись для «Великобритании». Однако, таблица Код страны, используемая для отражения налоговой юрисдикции должна иметь определения «Великобритания», «остров Мэн», «остров Джерси», «остров Сарк», «остров Олдерни». Последние четыре из этих значений обозначают острова, которые управляются Великобританией, но имеют свое особое налоговое законодательство. Если единственная таблица Код страны, которая включает налоговые гавани, используется также для целей отражения только «фактических» стран, например, для отчёта о деловой деятельности, то в этом случае могут возникнуть различные проблемы.

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

Избежание серьезных проблем

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


Для удобства отслеживания новых публикаций рекомендуем подписаться на рассылку или на канал RSS.

Читайте также: