Оператор описания таблицы |
Оператор описания физических таблиц может располагаться в любом месте описания БД.
<описание-таблицы> = create table [[<имя-схемы>.]<имя-таблицы> [<заголовок-таблицы> ]] [ using <имя-файла-данных> ] [ component <имя-компонента> ] [ with table_Code = <номер-таблицы> ] [ with replace ] [ with tableOptions <опция> [, <опция>]] <описание-полей-таблицы> [ <описание-индексов-таблицы> ];
<имя-схемы> - идентификатор. Если имя схемы не задано, используется имя DEFAULT.
<имя-таблицы> - идентификатор. Таблица может иметь имя. Имя таблицы должно быть уникальным в пределах данного компонента.
<заголовок-таблицы> - строка. Таблица может иметь заголовок. Заголовок должен быть уникальным в пределах данного компонента. В заголовке таблицы можно использовать русский алфавит.
Конструкция using позволяет задать имя файла данных таблицы на платформе Pervasive.SQL.
<имя-файла-данных> - идентификатор, имя файла данных таблицы. Указанное имя файла будет использовано при создании словаря на платформе Pervasive.SQL.
Рекомендуется в данной конструкции указывать только имя файла, а путь на корневой каталог для базы данных указывать в файле конфигурации компилятора. При этом файлы таблиц данных будут создаваться в поддиректории, имя которой совпадает с именем схемы.
В данном примере будет создана таблица с именем KatMaterials с размещением в D_SKLAD\ KatMatls.dat от корневого каталога базы данных:
create table D_SKLAD.KatMaterials "Каталог материалов" using "KatMatls.dat" ...
Если каталог для размещения файлов данных уже существует, то разрешается задавать только путь на каталог. В этом случае таблица будет размещаться в указанном каталоге в файле, имеющем имя таблицы и расширение dat, для словарных файлов adf.
Разрешено не задавать расширение файла, при этом расширение будет установлено по умолчанию dat, для словарных файлов adf.
Если задана только директория для размещения файлов данных и при этом она не существует на диске, то имя директории будет распознано системой как имя файла таблицы.
В любом месте DOS - пути может вызываться метапеременная, получающая свое значение в командной строке компилятора словарей и логических таблиц:
<вызов-метапеременной> = %<имя-метапеременной>%
<имя-метапеременной> - идентификатор.
Описание метапеременной в командной строке имеет следующий формат:
<описание-метапеременной> = /#<имя-метапеременной> = <строка>
Конструкция component позволяет задать компонентную принадлежность таблицы. Каждая таблица может принадлежать только к одному компоненту, кроме тех, у кого компонент не указан. Эти таблицы считаются общеупотребительными.
<имя-компонента> - идентификатор.
При разработке пользовательского интерфейса внутри компонента имеется возможность доступа к данным только своих или общеупотребительных таблиц. К остальным таблицам следует обращаться через объектный интерфейс. Можно использовать генератор врапперов tbl2obj, который на основании сведений из словаря БД сгенерирует необходимый код объектного интерфейса.
Компонентная принадлежность введена начиная с Атлантис 5.0.3.
Конструкция with table_code позволяет явно указать код таблицы. Если ключевая конструкция with table_code отсутствует в описании таблицы, то коды присваиваются компилятором. Код таблицы должен быть уникальным в пределах данного компонента.
<номер-таблицы> - код таблицы.
Конструкция with replace означает, что при компиляции новых версий БД новая версия данной таблицы перекрывает старую при условии, что задано прежнее имя файла данных. Если ключевая конструкция with replace отсутствует в описании таблицы, то компиляция будет приостановлена в связи с повторным использованием имени файла.
Конструкция with tableoptions предназначена для описания опций таблицы. После нее через запятую перечисляются опции таблицы.
<опция> = noProtect | header | jornal | corpo | branched
Опция noProtect означает, что таблица не имеет разграничения прав.
Опция header означает, что таблица будет иметь системный заголовок, состоящий из следующих полей:
Имя поля |
Тип поля |
Заголовок поля |
Примечания |
NRec |
comp |
# записи |
Уникальный идентификатор записи в БД |
Atl_LastDate |
date |
Дата последней модификации |
|
Atl_LastTime |
time |
Время последней модификации |
|
Atl_LastUser |
comp |
Код последнего пользователя, модифицировавшего запись |
|
Atl_OriginalOffice |
word |
# офиса, где занесена запись |
|
Atl_Owner |
comp |
Код владельца записи |
Опция jornal - то же, что опция header, плюс возможность журналирования.
Опция corpo - то же, что опция jornal, плюс возможность участвовать в межофисном обмене.
Опция branched добавляет в таблицу поле с кодом филиала. См. "Работа с филиальностью. ".
<описание-полей-таблицы> = (<описание-поля> {, <описание-поля>})
Раздел описания полей таблицы заключается в круглые скобки. Описания отдельных полей разделяются запятой.
<описание-поля> = <имя-поля> : <тип> [<заголовок-поля>] [<нулевое-значение>]
Описание поля таблицы без описания ссылочной целостности.
<описание-поля> = <имя-поля> (<имя-таблицы>) : <тип> [<заголовок-поля>] [<нулевое-значение>]
Наличие конструкции (<имя-таблицы>) после <имя-поля> задает ограничивающую ссылочную целостность на поле NRec указанной таблицы с разрешенными нулевыми ссылками (режим set null). Данный способ считается устаревшим.
<описание-поля> = <имя-поля> : ref( [table | objref] <таблица-или-объект>) [restrict | set null] [<заголовок-поля>]
Более гибкий и более наглядный способ описать ссылочную целостность. К полям таблицы, указанной в конструкции ref, можно обращаться по ссылке. Например: Persons.cDepartment->Name. См. также "Оператор ссылки. ".
Следует заметить, что в описании недекларативной ссылочной целостности при создании таблицы с помощью кострукции ref, используется синтаксис описания ссылки с помощью кострукции alter table. Однако, синтаксис установки самого нулевого значения (set null = { <нулевое значение> [ ,<нулевое значение> ] } ) не поддерживается.
<имя-поля> - идентификатор. Поле таблицы всегда имеет имя. Имя поля должно быть уникальным в пределах данной таблицы. Число символов в имени поля не может быть больше 20.
Конструкция ref описывает ссылку на поле NRec таблицы <имя-таблицы>. Если указаны ключевые слова restrict или set null, то задается ограничивающая ссылочная целостность. В противном случае задается декларативная ссылочная целостность с разрешенными нулевыми ссылками.
Опция table задает контроль ссылочной целостности по физической таблице. Опция доступна начиная с Атлантис 5.1.23.
Опция objref задает контроль ссылочной целостности по табличному объекту. Опция доступна начиная с Атлантис 5.1.23.
Если ни одна из опций table или objref не задана, то сначала ищется таблица, принадлежащая тому же компоненту, что и описываемая. Если таблица не найдена, ищется табличный враппер.
<таблица-или-объект> - идентификатор таблицы, на NRec которой ссылается данное поле. Начиная с Атлантис 5.1.23 вместо имени таблицы можно указать имя табличного объекта (переменная типа objInterface) или табличный враппер. В этом случае ссылочная целостность будет проверяться через указанный объект. О табличных объектах см. "Использование табличных объектов. ".
// табличный объект для таблицы Аaa11 var xxx : IAaa11(twAaa11); create table Aaa2 component aaa with table_code = 2002 with tableOptions header ( s : integer, // контроль через переменную r0 : ref(xxx) restrict // контроль через табличный враппер r1 : ref(Аaa11) r2 : ref(table Aaa11) restrict r3 : ref(objref Aaa11) restrict set null ) with index ( byS = s, byR1 = r1 );
<тип> - тип данных поля. Разрешенные типы данных см. "Типы данных. ".
Опция restrict задает ограничивающую ссылочную целостность.
Опция set null задает ссылочную целостность с нулевыми ссылками.
<заголовок-поля> - строка. Поле может иметь заголовок. Заголовки могут повторяться для полей одной таблицы. В заголовках разрешено использовать русский алфавит.
<нулевое-значение> = null = {'символ' | целое-от-0-до-255}
Конструкция null устанавливает индивидальное нулевое значение для данного поля, перекрывающее соответствующую установку для типа.
Подробнее о ссылочной целостности см. раздел "Описание ссылочной целостности. "
create table Example.Route "Маршруты" with tableOptions header, journal, corpo ( cCity1 : ref(KatCity) "Декларативная ссылка(SET NULL по умолчанию)", cCity2 : ref(KatCity) restrict "Недекларативная ссылка без SET NULL", cCity3(KatCity) : comp "Недекларативная ссылка, старый синтаксис(SET NULL по умолчанию)", cСity4 : ref(KatCity) restrict set null "Недекларативная ссылка с SET NULL" ) with index ( Route1 = cCity1 + cCity2, //Наличие этого индекса никак не повлияет на создание //декларативной ссылки для поля cCity2 Route1 = cCity2 + cCity1, //Без этих индексов компилятор выдаст ошибку об Route2 = cCity3, //отсутствии индексов для описанной недекларативной Route3 = cCity4 //ссылочной целостности по полям cCity3,cCity4 );
Компонентная принадлежность введена начиная с Атлантис 5.0.3.
Начиная с Атлантис 5.1.23 при описании ссылочной целостности наряду с таблицами можно использовать табличные объекты. Добавлены ключевые слова table и objref.
Опция branched доступна начиная с Атлантис 5.1.36.