Проверка качества модели данных с помощью ERwin Examiner
Моделирование данных представляет собой сложную и ответственную задачу, поскольку от качества модели данных зависят в конечном счете эффективность и производительность информационной системы. На рынке CASE-средств давно известен инструмент моделирования данных ERwin ERX. Это средство позволяет значительно облегчить процесс моделирования за счет построения графической модели данных и автоматической генерации схемы данных для выбранной СУБД. Однако ERwin ERX не в состоянии обеспечить автоматический процесс поверки качества данных, хотя графическое представление данных и облегчает такую проверку.
В октябре 2000 года компания Computer Associates выпустила новый программный продукт серии ERwin — ERwin Examiner. Этот основанный на базе знаний инструмент позволяет анализировать структуру баз данных с целью выявления недочетов и ошибок проектирования. ERwin Examiner расширяет функциональность ERwin ERX, автоматизируя трудоемкую задачу поиска и исправления ошибок и одновременно повышая квалификацию специалистов по моделированию данных благодаря встроенной системе обучения. Принципиальная схема работы ERwin Examiner показана на рис. 1.
ERwin Examiner может использовать в качестве источника метаданных готовую модель ERwin ERX, DDL-скрипт или провести обратное проектирование базы данных. Выбор источника метаданных можно сделать в диалоге Select Project Type (рис. 2), который появляется при создании нового проекта.
ERwin Examiner поддерживает работу со следующими СУБД:
ORACLE 7 и 8 (SQL*NET или NET 8).
DB2 версии DB2 for OS390 версий 4 и 5 (DB2 Connect).
DB2 Universal Database версий 4, 5 и 6.
Microsoft SQL Server версий 6 и 7 (32-разрядный ODBC-драйвер).
Sybase версий 10 и 11 (32-разрядный ODBC-драйвер).
ERwin Examiner позволяет анализировать модели, полученные из разных источников или разработанные вручную в среде ERwin Examiner.
Для визуального представления импортированной модели ERwin Examiner имеет несколько окон. В левой части главного окна находится три закладки: Tables, Relationships и Diagnostics.
Закладка Tables содержит иерархический список (рис. 3), первый уровень которого содержит список открытых в ERwin Examiner моделей, второй — список таблиц, остальные — список колонок и первичных ключей. Кнопка «i» слева от имени колонки вызывает диалог с подробной информацией об объекте.
Закладка Relationships содержит информацию о связях (рис. 4). Первый уровень списка на закладке Tables содержит список моделей, второй — список таблиц, третий — связей «один-ко-многим» (Parent to Child), четвертый — список ключей и связей нижнего уровня.
Закладка Diagnostics содержит информацию об ошибках и недостатках модели данных (рис. 5). Первый уровень списка на закладке Tables содержит список моделей, второй — список категорий ошибок. Подробное описание ошибки можно получить, щелкнув левой кнопкой мыши по кнопке «i» слева от имени ошибки.
Ошибки объединены в четыре категории. В первую категорию (Columns) входят ошибки проектирования колонок. Ниже приведен фрагмент списка ошибок этой категории:
- Inconsistent Definition. Название колонки встречается в различных таблицах, но при этом колонки (или их синонимы) имеют разные определения. Это может привести к сохранению неверных данных.
- Groups with Inconsistent Definition. Группа колонок, нарушающих первую нормальную форму или имеющих противоречивое взаимное определение.
- Duplicate Table. Имя таблицы не уникально в модели.
- Table with No Columns. Таблица не имеет колонок.
- Data Names Conflict with SQL Keywords. Имя является зарезервированным словом.
Вторая категория объединяет ошибки проектирования индексов и ограничений (Indexes and Constraints). В эту группу входят следующие ошибки:
- Incorrectly Defined Foreign Keys. Некорректное определение внешнего ключа, не обеспечивающее соблюдения правил ссылочной целостности.
- Candidate Keys with All Nullable Columns. Уникальные индексы или/и первичные ключи содержат колонки, позволяющие иметь пустые (null) значения, что может привести к дублированию строк.
- Improperly Defined Indexes. По меньшей мере один индекс имеет аномалии.
- Undefined Alternate Keys. Таблица имеет суррогатный первичный ключ и не имеет альтернативного ключа.
- Different CHECK Constraints. Несколько колонок определены в разных таблицах, но имеют разные ограничения CHECK.
- Tables without a Candidate Key. Таблица не имеет ограничений, гарантирующих уникальность записи (Primary Key, Unique Constraint или Unique Index).
- Disabled Constraints. Неверное ограничение.
- Tables with No Clustered Index. Таблица должна иметь кластеризованный индекс.
- Primary Key with Columns Allowing Decimals. Колонка первичного ключа содержит числовую колонку с десятичными знаками, например типа REAL.
- Unnecessary CHECK Constraints. Ненужные ограничения, например ограничения на внешнем ключе дочерней таблицы вместо ограничения на первичном ключе родительской.
- Unnecessary Indexes. Ненужные индексы.
- Unnecessary Foreign Keys. Ненужные внешние ключи, например в случае, если целостность уже поддерживается другими внешними ключами.
- Missing Indexes. Отсутствие индексов, например, на внешнем ключе.
- Tables with Too Many Indexes. Таблица содержит слишком много индексов.
- Indexes with Too Many Columns. Индекс содержит слишком много колонок.
- Primary Keys with Too Many Columns. Первичный ключ содержит слишком много колонок.
- Indexes with Variable Length Columns. Индекс содержит колонки переменной длины VARCHAR (только для DB2).
- Conflicting Indexes. Конфликтующие индексы.
- Tables with No Relationships. Таблица не имеет связей.
- Delete Cascade/Restrict Conflicts. Ограничение ссылочной целостности для внешнего ключа определено как ON DELETE CASCADE, а дочерняя таблица имеет по крайней мере один внешний ключ без этой опции, поэтому автоматическая ссылочная целостность не может поддерживаться для «внучатой» таблицы.
Третья категория объединяет ошибки нормализации (Normalization). Находятся некорректно определенные функциональные зависимости и ошибки первой, второй и третьей нормальной формы.
В четвертую категорию входят ошибки связей (Relationships):
- Incorrect Recursive Relationships. Некорректно определенная рекурсивная связь. Внешний ключ рекурсивной связи должен включать по крайней мере одну колонку NULL, в противном случае возникает коллизия при вставке.
- Disabled Relationships. Недоступная связь — ссылочный ключ связи недоступен.
- Non-Enforceable Relationships. Связи, не имеющие определения внешнего ключа.
- Mismatched Foreign Keys. Имеются аномалии во внешних ключах.
- Infinite Loops. Бесконечные циклы — ситуация, когда таблица является одновременно предком и потомком другой таблицы. Существует циклическая связь между таблицами, и внешние ключи не имеют свойства NULL. Вставка данных при этом невозможна.
- Tables with Too Many Relationships. Таблица имеет слишком много связей, что может привести к потере производительности.
- Cross Linked Relationships. Между несколькими таблицами существует циклическая связь, и внешние ключи не имеют свойства NULL. Вставка данных при этом невозможна.
- Incompatible Relationships. Связь, основанная на колонке с разными типами или определениями.
В правом окне ERwin Examiner отображаются отчеты, в том числе отчет по ошибкам модели или графическое представление модели (рис. 6).
По умолчанию связи таблиц показываются нетрадиционным образом в виде ссылок (рис. 6), однако существует возможность представления связей более привычным способом — в виде линий. Ссылки на диаграмме служат для навигации — щелчок по ссылке переключает окно на дочернюю или родительскую таблицу. Диаграмма таблиц весьма информативна: в графическом виде показываются не только таблицы и колонки, но и ограничения, индексы, найденные ошибки. Из контекстного меню (Legend) можно легко вызвать справку по системе обозначений диаграммы (рис. 7).
Результатом диагностики ошибок может стать отчет или SQL-скрипт, корректирующий ошибки моделирования. Ниже приведен фрагмент корректирующего кода, сгенерированного для Oracle:
Corrective Oracle SQL Scripts for model: ORADEMO --Including implied foreign keys. --Sat Oct 28 14:59:07 2000 -- Enable disabled constraint in table ITEM ALTER TABLE ITEM ENABLE CONSTRAINT ENOUGH_STOCK; -- Create secondary index in table EMPLOYEE -- to achieve better performance in joins with EMPLOYEE CREATE INDEX IX1EMPLOYEE_EMPLOYEE ON EMPLOYEE ( MANAGER_ID ); -- Create secondary index in table SALESMAN -- to achieve better performance in joins with STATE CREATE INDEX IX1SALESMAN_STATE ON SALESMAN ( COUNTRY_ID, ASSIGNED_STATE ); -- Create secondary index in table SALESMAN -- to achieve better performance in joins with EMPLOYEE CREATE INDEX IX1SALESMAN_EMPLOYEE ON SALESMAN ( EMPLOYEE_ID );
Ключевой функцией ERwin Examiner является возможность обучения специалистов по моделированию данных. При вызове описания ошибки (кнопка «i» слева от имени ошибки в закладке Diagnostics) появляется диалог с описанием ошибки, содержащий кнопку Teach Me. Щелчком на этой кнопке вызывается справка по данной проблеме, включающая примеры и описание путей решения проблемы. Таким образом, пользователи ERwin Examiner обучаются в первую очередь тем темам, которые они плохо знают.
Помимо выявления ошибок ERwin Examiner позволяет сравнивать и объединять модели данных. Для работы с большими моделями предусмотрена удобная навигация по модели и работа с подмоделями, причем диагностика может быть проведена в рамках отдельной подмодели.
В целом применение ERwin Examiner для моделирования данных позволяет решить следующие задачи:
- Предельно сократить время обучения специалистов по моделированию данных.
- Минимизировать или устранить проблемы целостности данных.
- Повысить общую производительность информационной системы.
- Улучшить взаимодействие разработчиков, входящих в рабочую группу.
- Уменьшить время разработки и повысить качество приложений.
- Уменьшить стоимость разработки и сопровождения базы данных.
Текущая версия ERwin Examiner 1.0 совместима с операционными системами, Windows 95/98/2000/NT.
КомпьютерПресс 1'2001