Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
Пример 13.3. Трехфазный переключатель, представляющий UNKNOWN как значение:
CREATE DOMAIN D_GENDER AS CHAR(4)
DEFAULT 'N/K' NOT NULL
CHECK (VALUE IN ('FEM', 'MASC', 'N/K'));
! ! !
ВНИМАНИЕ! He используйте BOOLEAN, UNKNOWN, TRUE или FALSE В качестве имен для булевых доменов. В Firebird это зарезервированные слова. Истинно логические типы планируются в Firebird 2 и могут появиться в промежуточных релизах между 1.5 и 2.
. ! .
Изменение определения домена
Оператор языка определения данных ALTER DOMAIN может быть использован для изменения любого аспекта существующего домена за исключением установки NOT NULL. Изменения, сделанные вами в определении домена, воздействуют на все определения столбцов, основанных на этом домене, если только соответствующие атрибуты не были переопределены на уровне таблицы.
Домен может быть изменен его создателем, пользователем SYSDBA или (в Linux/UNIX) любым пользователем с привилегией root операционной системы.
Используя ALTER DOMAIN, вы можете:
* переименовать домен;
* изменить тип данных;
* удалить существующее значение по умолчанию;
* установить новое значение по умолчанию;
* удалить существующее ограничение CHECK;
* добавить новое ограничение CHECK.
! ! !
ПРИМЕЧАНИЕ. Существует только один путь "изменить" установку NOT NULL для домена - это удалить домен и заново создать его с желаемой комбинацией характеристик.
. ! .
Вот синтаксис оператора:
ALTER DOMAIN { имя | старое-имя ТО новое-имя } {
[SET DEFAULT {литерал | NULL | USER | etc.}]
| [DROP DEFAULT]
| [ADD [CONSTRAINT] CHECK (<условия-соответствия>)]
| [DROP CONSTRAINT]
| TYPE тип-данных
};
Примеры
Этот оператор устанавливает новое значение по умолчанию для домена BOOK_GROUP:
ALTER DOMAIN BOOK_GROUP SET DEFAULT -1;
В следующем операторе имя домена BOOK_GROUP заменяется на PUBL_GROUP:
ALTER DOMAIN BOOK_GROUP TO PUBL_GROUP;
Ограничения на изменение типов данных
Предложение TYPE в ALTER DOMAIN позволяет заменить тип данных на другой разрешенный тип данных. Разрешенные типы преобразований см. на рис. 8.1.
Недопустим никакой тип преобразования, который может привести к потере данных. Например, количество символов в домене не может быть сделано меньше размера наибольшего значения в любом столбце, использующим этот домен[31].
Преобразование числового типа данных в символьный тип требует минимальной длины для символьного типа, как указано в табл. 8.3.
Следующий оператор меняет тип данных домена BOOK_TITLE С CHAR(80) на VARCHAR(100) :
ALTER DOMAIN BOOK_TITLE TYPE VARCHAR(100);
Удаление домена
Оператор DROP DOMAIN удаляет из базы данных существующее описание домена при условии, что домен не используется в каком-либо описании столбца базы данных.
Чтобы не получить исключений, применяйте ALTER TABLE для удаления всех столбцов, использующих домен, а затем выполняйте DROP DOMAIN. Лучший способ сделать это за одно задание - использовать скрипт DDL. См. разд. "Скрипты схемы" в следующей главе.
Домен может быть удален его создателем, пользователем SYSDBA или (в Linux/UNIX) любым пользователем с привилегией root операционной системы.
Вот синтаксис оператора:
DROP DOMAIN name;
Следующий оператор удаляет ненужный домен:
DROP DOMAIN rather_silly;
Пора дальшеОзнакомившись с определением данных, теперь пора приступить к более интересной теме - определению и разработке баз данных. Следующая группа глав проведет вас через концепцию баз данных, ее объектов и подмножество языка SQL, называемого Data Definition Language (DDL), который используется для управления объектами и задает правила их поведения.
Глава 14 начнется с изложения базовых правил разработки моделей в реляционных базах данных. Глава закончится разделом о работе со скриптами БД.
ЧАСТЬ IV. База данных и ее объекты.
ГЛАВА 14. Чертежная доска для базы данных.
Конечно же, база данных хранит данные. Однако данные сами по себе не могут использоваться, если они не были сохранены в соответствии с некоторыми правилами, которые, во-первых, определяют их смысл и значение и, во-вторых, позволяют их отыскивать соответствующим образом. База данных, существующая в контексте системы управления базами данных (СУБД), такой как Firebird, включает в себя множество "вещей" помимо данных.
Firebird является реляционной системой управления базами данных. По существу она разработана для создания и поддержания абстрактных структур данных не только для хранения данных, но также для поддержки отношений, оптимизации скорости и обеспечения целостности, в соответствии с которой запрашиваемые данные могут быть возвращены клиентским приложениям.
Пользователь SYSDBA и пароль
Во всех версиях Firebird, включая 1.5, пользователь SYSDBA имеет полные права ко всем базам данных на сервере. Инсталляционные скрипты устанавливают базу данных безопасности с паролем по умолчанию masterkey.
Некоторые релизы 1.5 для Linux запускают скрипт, который генерирует новый пароль для пользователя SYSDBA. Вы можете посмотреть сгенерированный пароль в файле SYSDBA.password в корневом каталоге Firebird.
! ! !
ВНИМАНИЕ! Пароль masterkey широко известен. Убедитесь, что вы изменили его на малопонятную восьмисимвольную строку. См. инструкции в главе 34.
. ! .
Метаданные
Все вместе объекты, определенные в базе данных, называются метаданными или, более традиционно, ее схемой. Процесс создания и модификации метаданных называется определением данных. Термин "определение данных" также часто применяется к описанию одного объекта и его атрибутов.
В этом разделе в деталях рассматриваются концепции, терминология и язык определения данных.
Язык определения данных
Основные структуры базы данных - ее таблицы, просмотры и индексы - создаются с использованием подмножества языка SQL Firebird, известного как язык определения данных (Data Definition Language, DDL). Оператор DDL начинается с одного из ключевых слов CREATE, ALTER, RECREATE или DROP, которые означают создание, изменение, пересоздание или удаление одного объекта, соответственно. База данных, ее объекты, правила и отношения объединяются для формирования структуры реляционной базы данных.
Системные таблицы
Firebird хранит метаданные в множестве таблиц, которые он создает прямо в базе данных, - в системных таблицах. Идентификаторы всех системных таблиц начинаются с символов "RDB$". Например, таблица, которая хранит определения и другую информацию о структурах всех таблиц в вашей базе данных, называется RDB$RELATIONS. Связанная с ней таблица RDB$RELATION_FIELDS хранит информацию и описания всех столбцов в каждой таблице.
Такая "база данных в базе данных" является высоко нормализованной. Операторы DDL разработаны для выполнения безопасных операций с таблицами метаданных и в полном соответствии с каскадными эффектами.
Возможно изменение данных в системных таблицах посредством обычных операций SQL. Некоторые инструменты администратора, такие как isql и gfix, выполняют внутренние изменения данных в системных таблицах. При этом, будучи сложной системой управления базами данных, Firebird не была разработана в предположении, что конечный пользователь будет манипулировать строками системных таблиц.
! ! !
ВНИМАНИЕ! Не рекомендуется пренебрегать операторами DDL и самостоятельно изменять системные таблицы с помощью кода приложений или через интерактивные инструменты. Системные таблицы являются "мета-метаданными" любой базы данных. Любое вмешательство человека, скорее всего, приведет к непредсказуемым повреждениям.
. ! .
Запросы SELECT к системным таблицам являются замечательным средством и могут быть очень полезными для отображения таких вещей, как наборы символов, зависимости и т.д. Полное описание системных таблиц см. в приложении 9.
Проектирование базы данных
Хотя реляционные базы данных являются очень гибкими, существует только один способ обеспечения целостности данных и удовлетворительной производительности базы данных - основательное проектирование базы данных. Не существует никакой встроенной защиты от скверных проектных решений.
Хорошее проектирование базы данных имеет несколько преимуществ.
* Удовлетворяет требованиям пользователей к содержимому базы данных. Прежде чем вы сможете начать проектирование базы данных, вы должны провести обширные исследования требований пользователей к базе данных, а также выяснить, как база данных будет использоваться. Наиболее гибкие проекты баз данных на сегодняшний день создаются во время хорошо управляемого процесса анализа, создания прототипа и тестирования; в этот процесс вовлекаются все люди, которые будут использовать базу данных.
* Обеспечивает полноту и целостность данных. При проектировании таблицы вы определяете некоторые атрибуты и ограничения, фильтрующие данные, которые пользователь или приложение могут вводить в таблицу и ее столбцы. Выполняя проверку данных до их помещения в таблицу, база данных реализует правила модели данных и обеспечивает целостность данных.