Докомпиляция словаря |
Докомпиляция словаря - изменение структуры существующей базы данных. Возможные действия:
добавить новую таблицу - оператор create table (см. "Оператор описания таблицы. ");
изменить существующую таблицу - оператор alter table. В том числе добавить, удалить или изменить поля и индексы таблицы;
удалить существующую таблицу - оператор drop table.
Для контроля соответствия приложения и БД используется контрольная сумма (КС) словаря. Она должна соответствовать КС словаря, на котором проводилась сборка приложения.
Пользователи приложения (
) могут свободно вносить в структуру БД изменения, не влияющие на работу приложения. К ним относятся:добавить новую таблицу - оператор create table (см. "Оператор описания таблицы. ");
полный контроль по своим таблицам - операторы alter table и drop table;
изменение индексов в прикладных таблицах (удалить, создать, изменить).
КС словаря при этом не меняется.
Прочие изменения (удалить прикладную таблицу, изменить или удалить поле в прикладной таблице) должны предваряться оператором alter dictionary:
<операторы-докомпиляции-словаря> = <изменить-словарь> | <создать-таблицу> | <изменить-таблицу> | <удалить-таблицу>
<изменить-словарь> - оператор изменения словаря. По нему пересчитывается КС словаря. Оператор alter dictionary в сочетании с параметром System.fullSQL кофигурационного файла позволяет вносить в структуру БД любые изменения.
<изменить-словарь> = alter dictionary;
Категорически не рекомендуется пользователям использовать alter dictionary, т.к. при этом летит КС словаря. Соответственно, становится невозможен контроль соответствия приложения и БД. Отсюда возможны (и были реально) крупные неприятности. Теоретически - вплоть до полной потери БД.
<создать-таблицу> - создать новую таблицу (create table), см. "Оператор описания таблицы. ".
<изменить-таблицу> - изменить существующую таблицу. После указания операции (добавить, удалить, изменить) в круглых скобках приводится описание полей или индексов аналогично оператору create table. Для удаления достаточно указать имя поля или индекса, полное описание не требуется.
<изменить-таблицу> = alter table {<оператор-модификации> ( <описание-полей-таблицы> )} {<оператор-модификации> index (<описание-индекса>)} ;
<оператор-модификации> - операция изменения полей или индексов таблицы:
<оператор-модификации> = add | modify | delete
add - добавить описание полей или индексов.
modify - изменить описание полей или индексов.
delete - удалить описание полей или индексов.
<описание-полей-таблицы> - описание поля. Синтаксис аналогичен оператору create table, см. "Оператор описания таблицы. ". При удалении достаточно указать имя.
<описание-индекса> - описание индекса. Синтаксис аналогичен оператору create table, см. "Описание индексов таблицы. Атрибуты индексов. ". При удалении достаточно указать имя.
<удалить-таблицу> - удалить существующую таблицу.
<удалить-таблицу> = drop table <имя-таблицы>;
<имя-таблицы> - имя удаляемой таблицы.
alter table SmpleTable modify ( opers: word "кол-во операций за день" ) add ( pricen : double "цена для нал.уч.", vpricen : double "цена для нал.уч. в валюте" ) delete ( MiddleName ) add index (iByOpers = opers) delete index (iByMiddleName) ;