Метаданные- физические описания таблиц, их столбцов и атрибутов, так же как и описания всех других объектов - сами хранятся в обычных таблицах Firebird внутри базы данных. Сервер Firebird изменяет данные в этих таблицах, когда объекты базы данных создаются, изменяются или удаляются. Он постоянно к ним обращается при выполнении операций над строками. Такие таблицы называются системными таблицами. Более подробную информацию см. в разд. "Системные таблицы" в самом начале главы 14. Схемы системных таблиц см. в приложении 9.
Предполагается, что, достигнув той точки, когда вы готовы создавать таблицы, вы уже выполнили анализ данных и подготовили модель, а также вы имеете совершенно четкое представление о структурах ваших главных таблиц и их взаимоотношениях. Для подготовки к созданию таких таблиц вам нужно выполнить следующие шаги:
* вы должны создать базу данных для их размещения - инструкции см. в главе 15;
* вы должны соединиться с базой данных;
* если вы планируете использовать домены для определения типов данных столбцов ваших таблиц, вы должны уже создать домены (см. главу 13).
Владение таблицами и привилегии
Когда создается таблица, Firebird автоматически применяет к ним безопасность схемы по умолчанию. Человеку, который создает таблицу (ее владелец), назначаются к ней все привилегии SQL, включая право передавать привилегии другим пользователям, триггерам и хранимым процедурам. Ни один другой пользователь, за исключением SYSDBA, не будет иметь никакого доступа к этой таблице, пока явно не получит привилегии.
! ! !
ВНИМАНИЕ! Эта защита будет столь же хороша (или плоха), сколь и защита доступа к вашему серверу. Любой, кто может соединиться с вашим сервером, сможет создать базу данных. Любой, кто может соединиться с вашей базой данных, сможет создавать в ней таблицы. Firebird 1.5 несколько улучшает эту печальную ситуацию, позволяя вам ограничивать размещения, где могут создаваться базы данных. См. параметр DatabaseAccess в файле firebird.conf.
. ! .
Информацию о привилегиях SQL см. в главе 35.
В DDL для создания таблиц используется оператор CREATE TABLE. Его синтаксис:
CREATE TABLE таблица
[EXTERNAL [FILE] 'спецификация-файла']
(<���определение-столбца>
[, <���определение столбца>
| <���ограничение-таблицы> ...]);
Самый первый основной аргумент в CREATE TABLE- идентификатор таблицы [41] Если вы кодируете CREATE TABLE в приложении встроенного SQL (Embedded SQL) с намерением также в этом приложении заполнять данными эту таблицу, то таблица вначале должна быть объявлена в предшествующем операторе DECLARE TABLE.
. Он является обязательным и должен быть уникальным среди всех имен таблиц, просмотров и процедур базы данных, иначе вы не сможете создать таблицу. Вы также должны предоставить определение, по крайней мере, одного столбца.
Определение столбцов
Когда вы создаете таблицу в базе данных, ваша основная задача - определить различные атрибуты и ограничения для каждого столбца в этой таблице.
Синтаксис определения столбца:
<���определение-столбца> = столбец
{тип-данных | COMPUTED [BY] (<���выражение>) | домен}
[DEFAULT {литерал | NULL | USER} ]
[NOT NULL] [<���ограничение-столбца>]
[COLLATE порядок-сортировки]
В следующем разделе описываются требуемые и необязательные атрибуты, которые вы можете определить для столбца.
Требуемые атрибуты
Приведем требуемые атрибуты.
* Идентификатор столбца (имя), уникальный среди столбцов этой таблицы.
* Одно из следующих:
• тип данных SQL;
• выражение для вычисляемого столбца;
• имя домена для столбцов, основанных на доменах. Столбцы разделяются запятыми, например:
CREATE TABLE PERSON (
PERSON_ID BIGINT NOT NULL,
FIRST_NAME VARCHAR (35),
LAST_NAMES VARCHAR (80),
FULL_NAME COMPUTED BY FIRST_NAME ||' '|| LAST_NAMES,
PHONE_NUMBER TEL_NUMBER) ;
Столбец FULL_NAME является вычисляемым столбцом, который вычисляется конкатенацией двух других описанных столбцов: FIRST_NAME и LAST_NAME. Мы вернемся к вычисляемым столбцам несколько позже. Ограничение NOT NULL применяется к PERSON ID, потому что мы хотим сделать его первичным ключом (детали рассмотрим позже).
Для столбца PHONE_NUMBER мы используем домен, который был определен в нашем примере в главе 13:
CREATE DOMAIN TEL_NUMBER
AS VARCHAR(18)
CHECK(VALUE LIKE ' (0%)%');
Столбцы, основанные на доменах
Если определение столбца основано на домене, оно может включать новое значение по умолчанию, дополнительные ограничения CHECK, предложение COLLATE, которые перекрывают значения, уже определенные в определении домена. Оно также может включать дополнительные атрибуты или ограничения столбца. Например, вы можете добавить ограничение NOT NULL для столбца, если домен его еще не содержит.
Читать дальше