Шрифт:
Интервал:
Закладка:
Установленное соглашение по именованию файлов баз данных Firebird для любой платформы - использование трехсимвольного суффикса fdb для первичного файла, а для имен вторичных файлов f01, f02 и т.д. Это только соглашение - файлы Firebird могут иметь любое расширение или не иметь расширения вовсе.
По причине известных проблем с серверами XP, использующими SystemRestore для файлов с расширением gdb, разработчикам рекомендуется заменить традиционный суффикс файлов InterBase при миграции баз данных в Firebird.
Имя базы данных безопасности- security.fdb в релизе 1.5 и выше, isc4.gdb в релизе 1.0.x- не должно изменяться. К сожалению, у Firebird 1.0.x нет средств изменения требуемого суффикса gdb.
Скрипты схемы
В Firebird, как и во всех других системах управления базами данных SQL, вы создаете вашу базу данных и ее объекты (метаданные или схема базы данных), используя операторы из специализированного подмножества операторов SQL, называемого языком определения данных (Data Definition Language, DDL). Пакет операторов DDL в текстовом файле называется скриптом. Скрипт или множество скриптов могут быть обработаны программой isql непосредственно из командной строки или при помощи инструмента, предоставляющего дружественный интерфейс.
Список таких инструментов см. в приложении 5.
Скрипты Firebird
Скрипт для создания и изменения объектов базы данных иногда называют файлом определения данных или скриптом DDL. Скрипт DDL может содержать определенного рода операторы isql, а также некоторые из команд SET <параметр>. COMMIT также является допустимым оператором в скрипте.
! ! !
ПРИМЕЧАНИЕ. Утилита isql (интерактивный SQL) является программой командной строки, доступной на всех платформах; входит в состав комплекта поставки Firebird. Во всех случаях, кроме встроенного сервера для Windows, isql инсталлируется в каталог /bin корневого каталога Firebird. Полные инструкции см. в главе 37.
. ! .
Другие скрипты могут быть написаны для добавления основных, или "управляющих", данных в таблицы, изменения столбцов, преобразования данных и выполнения других задач, включающих манипулирование данными. Такие скрипты называются скриптами DML (для языка манипулирования данными, Data Manipulation Language).
Команды DDL и DML могут одновременно присутствовать в скриптах. Однако для устранения проблем с целостностью данных строго рекомендуется размещать операторы DDL и DML в отдельных скриптах. Обработка скриптов позволяет "изменять" скрипты, связывая один файл скрипта с другим с помощью оператора isql INPUT <спецификация_файла>.
Операторы скрипта выполняются в строгом порядке. Использование команды SET AUTODDL позволяет управлять подтверждением операторов или блоков операторов. Эта команда также позволяет откладывать подтверждение содержимого скрипта, пока не будет выполнен весь скрипт.
Зачем использовать скрипты?
Очень хорошей практикой является использование скриптов DDL для создания вашей базы данных и ее объектов. Перечислим несколько причин для этого.
* Самодокументирование. Скрипт является текстовым файлом, просто обрабатываемым любым текстовым редактором. Скрипты могут (и должны) включать подробные тексты комментариев. Изменения метаданных могут быть отмечены с указанием даты вручную.
* Управление разработкой базы данных. Представление всех описаний базы данных в скриптах позволяет создание схемы тесно интегрировать с циклами проектирования задач и пересмотра кода.
* Повторяемое и отслеживаемое создание метаданных. Полностью восстанавливаемая схема является требованием гарантированного восстановления системы после сбоев во многих организациях.
* Аккуратное конструирование и реконструирование метаданных базы данных. Опытные программисты Firebird часто создают набор скриптов DDL, разработанных для выполнения и подтверждения в нужном порядке. Это упрощает отладку и гарантирует, что объекты будут существовать, когда позже зависимые объекты будут на них ссылаться.
Что находится в скриптах DDL?
Операторы SQLСкрипт DDL содержит один или более операторов SQL (CREATE, ALTER, DROP) для создания, изменения или удаления базы данных или любого другого объекта. Он может включать операторы DML, хотя рекомендуется использовать операторы DDL и DML в разных скриптах.
! ! !
СОВЕТ. Довольно общей является практика включения (INPUT) В цепочку скриптов DDL одного или более скриптов, содержащих операторы INSERT для ввода в некоторые таблицы статичных управляющих данных. Вы можете, например, включить операторы для добавления начальных строк в таблицу учетных записей. Убедитесь, что все операторы DDL подтверждаются до появления других операторов DML.
. ! .
Операторы процедурного языка (PSQL), определенные для хранимых процедур и триггеров, также могут быть включены в скрипты. Блоки PSQL получают специальную трактовку в скриптах в зависимости от символов терминатора операторов (см. далее разд. "Символы терминатора").
КомментарииСкрипт может также содержать комментарии в двух вариантах.
Блок комментариевБлок комментариев в скриптах DDL использует соглашения языка С:
/* Этот комментарий распространяется на множество строк в скрипте */
Блок комментариев может появиться в той же строке, что и оператор SQL или команда isql, и может быть произвольной длины. Он начинается символами /* и заканчивается символами */.
Линейные комментарииКомментарий стиля /*...*/ также может быть встроен внутрь оператора как линейный комментарий:
CREATE TABLE USERS1 (
USER_NAME VARCHAR( 128 )
/* security user name */
, GROUP_NAME VARCHAR(128)
/* not used on Windows */
, PASSWD VARCHAR( 32 )
/* will be stored encrypted */
, FIRST_NAME VARCHAR(96) /* Defaulted */
, MIDDLE_NAME VARCHAR( 96 ) /* Defaulted */
, LAST_NAME VARCHAR( 96 ) /* Defaulted */
, EULL_NAME VARCHAR( 290 ) /* Computed */
) ;
Однострочные комментарииВ скриптах Firebird вы можете использовать альтернативное соглашение по комментированию одной строки - двойной минус:
-- комментарий
В релизе 1.0.x этот стиль комментария не может быть использован для линейного комментария или для "закомментирования" части строки.
В релизе 1.5 и выше соглашение по комментированию -- может быть использовано в любом месте строки для "комментирования" всего, начиная с маркера до конца текущей строки, например:
CREATE TABLE MET_REPORT (
ID BIGINT NOT NULL, -- VARCHAR(40), невидим
WEATHER_CONDITIONS
BLOB SUB_TYPE TEXT,
LAST_REPORT TIMESTAMP) ;
Операторы isqlКоманды isql SET AUTODDL, SET SQL DIALECT, SET TERM и INPUT являются допустимыми операторами в скриптах Firebird - подробности об этих командах см. в главе 37.
Символы терминатораВсе операторы, которые выполняются в скрипте, должны оканчиваться символом терминатора. Символ по умолчанию - точка с запятой (;).
Символ терминатора по умолчанию может быть изменен для всех операторов за исключением операторов языка процедур (PSQL) при использовании в скрипте команды SET TERM[33].
Терминаторы и язык процедур (PSQL)PSQL не допускает никаких терминаторов за исключением точки с запятой (;). Такое ограничение необходимо, потому что CREATE PROCEDURE, RECREATE PROCEDURE, ALTER PROCEDURE, CREATE TRIGGER и ALTER TRIGGER вместе с их операторами PSQL являются сложными операторами с их собственными правилами. Компилятору нужно видеть точку с запятой для различения каждого оператора PSQL.
Следовательно, в скриптах необходимо переопределять используемый в командах скрипта терминатор перед началом операторов PSQL для хранимых процедур и триггеров. После последнего оператора END, когда завершается исходный текст процедуры, следует восстановить значение терминатора по умолчанию, используя другой оператор SET TERM. Пример:
CREATE GENERATOR GEN_MY_GEN ;
SET TERM ^^;
CREATE TRIGGER BI_TABLEA_0 FOR TABLEA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.PK IS NOT NULL) THEN
NEW.PK = GEN_ID(GEN_MY_GEH, 1);
END ^^
SET TERM ; ^^
. . .
Любая строка может быть использована в качестве альтернативного терминатора, например:
SET TERM @ ! #;
CREATE PROCEDURE...
AS
BEGIN
. . . ;
. . . ;
END @!#
SET TERM ;@!#
/**/
COMMIT;
/**/
SET TERM +;
CREATE PROCEDURE...
AS
BEGIN
. . .;
. . . ;
END +
SET TERM ; +
/**/
COMMIT;
Оператор SQL без сообщений не выполняется, если его текст следует за символом терминатора в той же строке. Пробелы и комментарии могут следовать за терминатором, но не другие операторы.
Например, в следующей последовательности оператор COMMIT не будет выполняться:
ALTER TABLE ATABLE ADD F2 INTEGER; COMMIT;
в то время как последовательность далее правильная:
ALTER TABLE ATABLE ADD F2 INTEGER; /* счетчик бобов */
COMMIT;
Основные шаги
Основные шаги по использованию файлов скриптов описаны в следующих разделах.
Шаг 1: создание файла скриптаИспользуйте любой подходящий текстовый редактор. На стадии обучения вы можете за каждым оператором DDL записывать оператор COMMIT, чтобы обеспечить видимость объекта последующим операторам. Когда вы получите больше опыта, вы научитесь подтверждать операторы в блоках, применяя SET AUTODDL ON и SET AUTODDL OFF с целью управления взаимозависимостями и при тестировании/отладке скриптов.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование