Содержание

<database ... >

Тэг для описания всей структуры прикладной БД или ее части.


Синтаксис

<database>
   [<db>
      sql;
      sql;
      ...
    <db/>]
   [{<patch>
      sql;
      ...
    <patch/>}]
<database/>

Атрибуты database

Основные атрибуты (R/W):

Название Тип Описание
component-id string Кодовое условное имя базы данных. Однажды созданное, оно никогда не должно изменяться. Под эти именем будет сохраняться в спецтаблицы служебная информация о версии БД.
Значения «last» и «first» являются зарезервированными и запрещены к использованию.
order first | last | component_id_value Атрибут, регулирующий порядок выполнения данного <database> относительно остальных, описанных в данном приложении.
first - данный <database> выполняется первым среди всех <database>. Данное значение рекомендуется использовать для <database> логически самостоятельных компонент.
last - данный <database> выполняется последним среди всех <database>. Данное значение является значением по умолчанию и рекомендуется к использованию в <database>, описывающих структуру прикладной БД.
component_id_value - значение атрибута component-id того <database>, после которого должен быть выполнен текущий.

Атрибуты db

Основные атрибуты (R/W):

Название Тип Описание
version number Числовой номер версии. С этой версией сравниваются версии патчей и те, которые старше - выполняются.
file string Имя файла, содержащего SQL-запросы, требующие выполнения. Другими словами, все запросы можно писать либо внутри тэга, либо в отдельном файле, либо и там и там.

Событийные атрибуты (R/W):

Название Тип Описание
onBeforeExecute code Вызывается перед выполнением. Правила описания см. (Описание событий в ApplicationXML).
onExecuted code Вызывается после успешного выполнения. Правила описания см. (Описание событий в ApplicationXML).
onError code Вызывается в случае аварийного завершения. Правила описания см. (Описание событий в ApplicationXML).

Атрибуты patch

Основные атрибуты (R/W):

Название Тип Описание
version number Числовой номер версии. Патчи выполняются в соответствии со своими номерами. Из общего списка патчей выбираются те, чья версия больше текущей версии БД.
file string Имя файла, содержащего SQL-запросы, требующие выполнения. Другими словами, все запросы можно писать либо внутри тэга, либо в отдельном файле, либо и там и там.

Событийные атрибуты (R/W):

Название Тип Описание
onBeforeExecute code Вызывается перед выполнением. Правила описания см. (Описание событий в ApplicationXML).
onExecuted code Вызывается после успешного выполнения. Правила описания см. (Описание событий в ApplicationXML).
onError code Вызывается в случае аварийного завершения. Правила описания см. (Описание событий в ApplicationXML).

Описание

Тэг <database> является механизмом для создания и поддержания в актуальном состоянии структуры прикладной БД. В <database> можно определять как всю структуру, так и ее отдельную (отдельные) логическую часть. Соответственно, тэг может встречаться один или несколько раз. Например, каждую таблицу можно описать отдельным <database> (хотя это избыточно, но это можно). <database> включает в себя два подтэга:

Тэги <db> и <patch> имеют атрибут version. При создании БД значение версии БД сохраняется в спецтаблице. При выполнении патчей версия БД повышается и новое значение также сохраняется в спецтаблице.

Алгоритм работы <database> при установке приложения на новом рабочем месте:

Алгоритм работы <database> при установке обновления приложения (т.е. БД уже создана):

Таким образом есть два вариант работы с тэгом <db>:

Любой вариант допустим. Выбор - за программистом.

В программе тэг <database> может встречаться несколько раз, но с разными сomponent-id. database.component-id должен содержать условное кодовое имя БД (или той части, которую описывает данный <database>). Под этим кодовым именем будет сохраняться в спецтаблице версия этой структуры.

Таким образом программист может независимо вести структуры БД для разных модулей программы в разных файлах. Файлы, содержащие тэги <database> могут подключаются тэгом <include>.

SQL-запросы внутри тэгов отделяются друго от друга точкой с запятой »;».

Примеры

<database component-id="homeLibrary">
     <db version="1">
            create table genre ( id integer not null auto_increment,
                                 name varchar(50),
                                 modified_date datetime not null,
                                 primary key (id)
                                ); 

            create table authors (id integer not null auto_increment,
                                  name varchar(50),
                                  lastname varchar(20),
                                  firstname varchar(20),
                                  middlename varchar(20),
                                  modified_date datetime not null,
                                  primary key (id)
                                );
                                          
            create table books ( id integer not null auto_increment,
                                 name varchar(50),
                                 genre_id integer not null,
                                 author_id integer not null,
                                 modified_date datetime not null,
                                 primary key (id),
                                 constraint fk_books_genre
                                 foreign key (genre_id) references genre(id),
                                 constraint fk_books_author
                                 foreign key (author_id) references authors(id)
                               );
     </db>
        
     <patch version="2">
           alter table books add buy_date date;
     </patch>
</database>