Тэг для описания всей структуры прикладной БД или ее части.
<database>
[<db>
sql;
sql;
...
<db/>]
[{<patch>
sql;
...
<patch/>}]
<database/>
| Название | Тип | Описание |
|---|---|---|
| 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>, после которого должен быть выполнен текущий. |
| Название | Тип | Описание |
|---|---|---|
| version | number | Числовой номер версии. С этой версией сравниваются версии патчей и те, которые старше - выполняются. |
| file | string | Имя файла, содержащего SQL-запросы, требующие выполнения. Другими словами, все запросы можно писать либо внутри тэга, либо в отдельном файле, либо и там и там. |
| Название | Тип | Описание |
|---|---|---|
| onBeforeExecute | code | Вызывается перед выполнением. Правила описания см. (Описание событий в ApplicationXML). |
| onExecuted | code | Вызывается после успешного выполнения. Правила описания см. (Описание событий в ApplicationXML). |
| onError | code | Вызывается в случае аварийного завершения. Правила описания см. (Описание событий в ApplicationXML). |
| Название | Тип | Описание |
|---|---|---|
| version | number | Числовой номер версии. Патчи выполняются в соответствии со своими номерами. Из общего списка патчей выбираются те, чья версия больше текущей версии БД. |
| file | string | Имя файла, содержащего SQL-запросы, требующие выполнения. Другими словами, все запросы можно писать либо внутри тэга, либо в отдельном файле, либо и там и там. |
| Название | Тип | Описание |
|---|---|---|
| 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>