Тэг для описания всей структуры прикладной БД или ее части.
<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>