- •Глава 1 Внешние модели данных
- •1.1. Общие положения
- •1.2. Иерархическая модель
- •1.3. Целостность иерархической модели
- •Уникальность
- •Обязательность и множественность
- •Кортежи
- •Виртуальные атрибуты
- •Правила активности
- •1.4. Построение иерархических моделей
- •Ориентация модели
- •Выбор ключевых атрибутов
- •3 Посвященному пользователю этот набор цифр — номер зачетной книжки — тоже может сказать кое-что; например, первые две цифры — о годе поступления студента.
- •1.5. Модель «гиперкуб данных»
Правила активности
Правила активности или правила активного поведения — это действия, которые должны автоматически выполняться в базе данных при наступлении определенных событий. Правила активности связаны со свойством активности базы данных.
Активная база данных (Active Database) — это база данных, в которой некоторые заранее определенные процессы, изменяющие состояние базы данных, запускаются на выполнение (активизируются) не по инициативе пользователей (приложений), как это делается в традиционных пассивных базах данных, а системными механизмами самой базы данных (точнее, ее СУБД) в ответ на возникновение некоторых заранее определенных условий (событий). Таким образом, в активных базах данных фрагменты логики приложений1, не требующие участия (принятия решений) пользователей, вычленяются из приложений и переносятся, встраиваются в саму базу данных (рис. 1.12). На этапе концептуального проектирования необходимо определить правила активности, т. е. какие действия и при наступлении каких событий будут выполняться автоматически; на последующих этапах проектирования нужно будет реализовать правила активности средствами используемой СУБД2.
Правило «событие-условие-действие» (Event-Condition-Action Rule) или ЕСА-правило — распространенная форма задания правила активности. Смысл правила заключается в том, что при наступлении заданного события проверяется заданное в правиле условие; в случае, если оно выполняется, то выполняется и заданное действие.
В качестве событий могут выступать операции вставки, удаления или изменения экземпляра сущности или многозначного агрегата, наступление заданного момента времени и др. В качестве действий выступают процедуры генерации или вычисления новых значений атрибутов, копирование, удаление значений и др. Ниже рассматриваются некоторые характерные примеры правил активности.
Значения по умолчанию. Выше (на с. 18) уже говорилось о значениях по умолчанию, которые автоматически присваиваются атрибутам в тех случаях, когда они не заданы явным образом. Очевидно, что этот механизм можно представить как ЕСА-правило, исходным событием для которого является операция занесения нового экземпляра сущности в базу данных или изменение какого-либо существующего экземпляра, условием — наличие атрибута, для которого не задано значение и, вместе с тем, определено значение по умолчанию, а действием — подстановка значения по умолчанию на место отсутствующего значения.
Автоматическая генерация значения ключа. Значения некоторых ключевых атрибутов (идентификаторов) могут определяться правилами, позволяющими формировать их автоматически3. В отличие от таких идентификаторов как «номер паспорта» или «номер свидетельства о рождении», значения которых поступают в базу данных из предметной области (если только это не база данных паспортного стола или загса, где «рождаются» эти значения), рассматриваемые значения могут генерироваться в базе данных и подставляться в новый экземпляр сущности при его занесении в базу данных аналогично значениям по умолчанию.
Пример. При зачислении нового студента ему присваивается уникальный код — номер зачетной книжки, — который сопровождает его в течение всего времени учебы в университете. Этот код может генерироваться при занесении нового экземпляра сущности «Студент» в базу данных университета про правилу: первые две цифры — год зачисления, третья — код факультета, четвертая-шестая — трехзначное число, уникальное для уже зачисленных в том же году на тот же факультет студентов4. Впоследствии код, сгенерированный базой данных, работник канцелярии вписывает черной тушью в студенческий билет и зачетную книжку студента.
Обеспечение непрерывности значений. Выше (на с. 25) уже говорилось о непрерывности значений как частном случае требования согласованности значений атрибутов. Атрибуты типа «нпп» — «номер по порядку» — часто предполагают пересчет своих значений при добавлении или удалении экземпляров сущностей или агрегатов, нарушающих согласованность. Такой пересчет может быть реализован средствами активной базы данных.
Пример. Выше на рис. 1.5, с. 13 использовался атрибут «нпп», означавший номер по порядку студента в студенческой группе. Пусть студенты в группе нумеруются в алфавитном порядке атрибута «фио»5 . Тогда при отчислении студента или переводе его в другую группу может образоваться «дыра» в последовательности значений «нпп», если только удаленный студент не являлся последним в списке. При добавлении нового студента в группу он в соответствии со своим «фио» может попасть куда-то в середину списка, что потребует пересчета «нпп» у тех студентов, которые будут следовать за ним. В соответствии с этими требованиями можно сформулировать следующие ЕСА-правила:
событие — удаление некоторого экземпляра сущности «Студент»; условие — удаляемый студент — не последний в списке группы, т.е. атрибут «нпп» удаляемого экземпляра имеет значение, не являющееся последним (максимальным) в списке экземпляров с одинаковыми значениями атрибутов «спец» и «группа»; действие — уменьшение на единицу значения «нпп» у тех студентов той же студенческой группы, у которых «нпп» больше, чем у удаляемого студента;
событие — вставка нового экземпляра сущности «Студент»; условие — новый студент попадает не в конец списка группы, т. е атрибут «фио» добавляемого экземпляра имеет значение, не являющееся последним по алфавиту среди экземпляров, относящихся к той же студенческой группе; действие — присвоение атрибуту «нпп» нового студента значения в соответствии со значением «фио» и увеличение на единицу значения «нпп» у тех студентов той же студенческой группы, у которых «нпп» равно или больше, чем у нового студента.
Специальный аудит. В многопользовательских базах данных администратору или руководителю нередко требуется контролировать определенные изменения, которые производятся в базе данных с определенными категориями объектов. Например, ответственный работник деканата берет на контроль успеваемость некоторых категорий студентов и нуждается в оперативной информации о получаемых ими оценках. Другой пример — контроль «подозрительных транзакций»6 («С какой это стати студенту N неудовлетворительная оценка была исправлена на отличную в середине семестра да еще в 2 часа ночи?»). Один из возможных путей решения этих задач основан на создании правил активного поведения, обеспечивающих занесение интересующей информации об определенных событиях в виде экземпляров в предусмотренные для этого сущности-журналы7.
Автоматическое формирование архива. Эта задача похожа на предыдущую с той разницей, что в специальные сущности-архивы заносятся экземпляры с историческими данными, отражающими уже состоявшиеся факты. Необходимость этого возникает при разделении общей базы данных на операциональную базу данных, отражающую текущее состояние моделируемого процесса (см. примечание о OLTP на с. 7), и архивную базу данных или базу данных поддержки принятия решений (хранилище данных), отражающую сведения о прошлых состояниях моделируемого процесса (см. примечание о OLAP на с. 7). Применение правил активного поведения позволяет автоматизировать процесс переноса потерявших актуальность данных из одной базы данных в другую.
Пример. Пусть операциональная база данных содержит сведения о текущих месте и должности работы сотрудника, а архивная — отражает всю его трудовую деятельность в данной организации. Тогда при изменении должности сотрудника или переходе в другое подразделение необходимо соответствующим образом обновить операциональную базу и пополнить архивную. Пополнение архивной базы выполняется автоматически в ответ на обновление операциональной (рис. 1.13, основанный на рис. 1.10, а, с. 23) в соответствии со следующими ЕСА-правилами:
1) событие — регистрация нового сотрудника, т.е. вставка нового экземпляра сущности «Сотрудник»; действие — вставка нового экземпляра сущности « СотрАрх », одноименные атрибуты заимствуются из экземпляра «Сотрудник», значение атрибута «датаУхода» отсутствует;
2) событие — переход сотрудника на новую должность в пределах того же подразделения, сопровождается обновлением агрегата «Должность» в некотором экземпляре сущности «Сотрудник»8; действие — в экземпляре «СотрАрх», соответствующем данному сотруднику в последний экземпляр агрегата «Подразделение» добавляется новый экземпляр агрегата «Должность», в котором атрибуту «нппДолж» присваивается следующее значение, а атрибутам «кодДолж» и «датаВступ» — значения из одноименных атрибутов экземпляра сущности «Сотрудник»;
событие — переход сотрудника на должность в другое подразделение, сопровождается обновлением агрегатов «Подразделение» и «Должность» в некотором экземпляре сущности «Сотрудник»: действие — в экземпляре «СотрДрх,», соответствующем данному сотруднику, в последнем экземпляре агрегата «Подразделение» атрибуту «датаУхода» присваивается значение атрибута «датаВступ» из соответствующего экземпляра сущности «Сотрудник». Далее добавляется новый экземпляр агрегата «Подразделение» с одним экземпляром агрегата «Должность», атрибуту «нппПодр» присваивается следующее значение, атрибуту «нппДолж» — единица, атрибутам «кодПодр», «кодДолж» и «датаВступ» — значения из одноименных атрибутов экземпляра сущности «Сотрудник», атрибут «датаУхода» не заполняется:
событие — увольнение сотрудника из организации, сопровождается удалением некоторого экземпляра сущности «Сотрудник» и предоставлением значения «датаУхода»; действие — в экземпляре «СотрАрх», соответствующем данному сотруднику, в последнем экземпляре агрегата «Подразделение» атрибуту «датаУхода» присваивается полученное из приложения значение.
1 Логика приложения или логика бизнес-процесса (Business Logic) — совокупность компонентов приложения, реализующих вычислительные операции, правила принятия решений и другие функции обработки данных, которые составляют существо приложения.
2 Основным средством реализации активного поведения базы данных в современных реляционных СУБД являются так называемые триггеры (Triggers) — процедуры базы данных, автоматически запускаемые в ответ на попытку вставки, удаления или изменения строки в той или иной таблице базы данных. Кроме того, триггеры могут заблокировать и отменить выполнение запустившей их операции, поэтому они являются мощным универсальным средством поддержания целостности базы данных там, где другие (стандартные) средства бессильны.
3 Иногда для идентификации сущностей вводят так называемые суррогатные ключи (Surrogate Keys) — уникальные идентификаторы, назначаемые СУБД, никак не связанные с предметной областью и недоступные пользователю для модификации.
4 Может генерироваться случайным либо инкрементным способом — путем прибавления единицы к максимальному значению, найденному для уже имеющихся в базе данных экземпляров сущности.
5 Обратите внимание на то, что в этом случае «нпп» студента, вообще говоря, может быть вычислен — достаточно отсортировать по «фио» и пересчитать по порядку студентов одной группы (с одинаковыми значениями атрибутов «спец» и «группа»). Однако сделать этот атрибут виртуальным (вычисляемым) можно только в случае рис. 1.5, а, где он не является ключевым. Дело в том, что использование виртуальных атрибутов в качестве ключей недопустимо, поскольку порождает ряд трудно преодолимых проблем.
6Транзакция (Transaction) — совокупность операций манипулирования данными (вставки, обновления, удаления), которая переводит базу данных из одного целостного состояния в другое. Понятие «подозрительной транзакции» связано с безопасностью данных — обеспечением защиты данных от умышленного или неумышленного несанкционированного доступа, используемого для их раскрытия, искажения или разрушения. «Подозрительные транзакции» требуют дополнительного анализа лицом, ответственным за безопасность базы данных.
7 Журнал (Log, System Journal) — функциональный компонент СУБД, обеспечивающий регистрацию в процессе эксплуатации базы данных сведений об исполнении транзакций, о работающих пользователях, об исполняемых приложениях, о доступе к различным структурам данных и т. д. В данном случае имеется в виду не системный журнал, а сущности концептуального уровня абстракции, используемые сходным образом
8 Событие связано именно со сменой должности, а не просто с изменением значений атрибутов. Если у сотрудника изменен, скажем, код должности, это не всегда означает, что он сменил саму должность, возможно у должности просто изменился код.