Command disabled: backlink
 

<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> описывает структуру БД. Внутри <database> <db> может встречаться только однажды.
  • <patch> последовательно описывает изменения структуры БД. Внутри <database> <patch> может встречаться сколько угодно раз.

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

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

  • Создаем БД на основе SQL-ей из <db>.
  • Если есть патчи с версией, больше чем db.version, последовательно выполняем их в соответствии с их version.

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

  • Если есть патчи с версией, больше чем db.version, последовательно выполняем их в соответствии с их version.

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

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

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

В программе тэг <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>
 
tags/database.txt · Последние изменения: 29/10/2020 16:32 (внешнее изменение)
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS