Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
. ! .
Подробности о последовательностях сортировки, доступных для каждого набора символов, см. в главе 11. Список доступных наборов символов и порядков сортировки см. в приложении 8.
! ! !
СОВЕТ. Вы можете получить собственный список, который может включать и более поздние последовательности сортировки, создав новую базу и выполнив запрос из разд. "Отображение доступных последовательностей сортировки" главы 11.
. ! .
Вычисляемые
Синтаксис:
<имя-столбца> COMPUTED [BY] (<выражение>);
Нет необходимости описывать тип данных (хотя это возможно) - Firebird вычислит его подходящим образом, выражение - любое скалярное выражение, допустимое для типов данных столбцов, входящих в состав выражения. Внешние функции прекрасны для использования, если вы уверены, что библиотеки этих функций существуют в готовом виде или могут быть скомпилированы для всех платформ, где может устанавливаться база данных. (Информацию о внешних функциях, также называемых UDF, см. в главе 21. Список общих функций представлен в приложении 1.)
Приведем другие существующие ограничения для вычисляемых столбцов.
* Любой столбец, к которому обращается выражение, должен быть определен до определения вычисляемого столбца, следовательно, полезной практикой является размещение вычисляемых столбцов последними.
* Вычисляемый столбец не может быть определен как массив или возвращать массив.
* Вы можете определить вычисляемый столбец BLOB, используя оператор SELECT для поиска столбца BLOB в другой таблице, но делать это настоятельно не рекомендуется.
* Вычисляемые столбцы не могут быть индексированы.
* Ограничения, помещенные для вычисляемого столбца, будут проигнорированы.
* Вычисляемые столбцы используются только для вывода и только для чтения. Включение их в операторы INSERT или UPDATE вызовет исключение.
! ! !
ВНИМАНИЕ! В качестве общего предупреждения: хотя возможно создание вычисляемого столбца с использованием оператора SELECT к другой таблице, эта практика должна быть исключена, поскольку добавляет нежелательные зависимости и может ухудшить производительность. Правильно нормализованная модель базы данных не требует такого.
. ! .
Следующий оператор создает вычисляемый столбец FULL NAME путем конкатенации столбцов LAST_NAMES и FIRST_NAME.
CREATE TABLE PERSON (
PERSON_ID BIGINT NOT NULL,
FIRST_NAME VARCHAR(35) NOT NULL,
LAST_NAMES VARCHAR (80) NOT NULL,
FULL_NAME COMPUTED BY FIRST_NAME ||' ' || LAST_NAMES) ;
/**/
SELECT FULL_NAME FROM PERSON
WHERE LAST_NAMES STARTING WITH 'SMI';
FULL NAME
=============
Arthur Smiley
John Smith
Mary Smits
! ! !
ПРИМЕЧАНИЕ. Обратите внимание
. ! .
Следующий оператор вычисляет два столбца с использованием контекстных переменных. Это может быть полезным для регистрации подробностей создания строки:
CREATE TABLE SNIFFIT
(SNIFFID INTEGER NOT NULL,
SNIFF COMPUTED BY (CURRENT_USER),
SNIFFDATE COMPUTED BY (CURRENT_TIMESTAMP));
/**/
SELECT FIRST 1 FROM SNIFFIT;
SNIFFID SNIFF SNIFFDATE
===== ===== =====
1 SYSDBA 2004-08-15 08:15:35.0000
Следующий пример создает таблицу с вычисляемым столбцом (NEW_PRICE), который использует ранее созданные определения для OLD_PRICE и PERCENT_CHANGE:
CREATE TABLE PRICE_HISTORY (
PRODUCT_ID D_IDENTITY NOT NULL, /* использует домен */
CHANGE_DATE DATE DEFAULT CURRENT_TIMESTAMP NOT NULL,
UPDATER_ID D_PERSON NOT NULL, /* использует домен */
OLD_PRICE DECIMAL(13,2) NOT NULL,
PERCENT_CHANGE DECIMAL (4, 2)
DEFAULT 0
NOT NULL
CHECK (PERCENT_CHANGE BETWEEN -50.00 AND 50.00);
NEW_PRICE COMPUTED BY
(OLD_PRICE + (OLD PRICE * PERCENT_CHANGE / 100)) );
Ограничения
На языке реляционных баз данных любое условие, налагаемое на формат, диапазон значений, содержание или зависимости структуры данных, называется ограничением (constraint). Firebird предоставляет несколько способов для реализации ограничений, включая как формальные, определенные стандартами ограничение целостности и ссылочное ограничение, так и определенные пользователем ограничения CHECK.
Ограничения видны всем транзакциям, которые выполняют доступ к базе данных, и автоматически применяются на сервере. Они различаются их областью действия. Некоторые, такие как NOT NULL, напрямую применяются к одному столбцу (ограничения столбца), в то время как другие, такие как PRIMARY KEY и некоторые ограничения CHECK, имеют эффект на уровне таблицы (ограничения таблицы). Ограничение FOREIGN KEY имеет область действия таблица-таблица.
Ограничения существуют "в своих собственных правах" как объекты в базе данных Firebird. Каждое ограничение уникально представлено в метаданных с правилами и зависимостями, которые представлены обычными отношениями между системными таблицами.
Ограничения целостности
Ограничения целостности устанавливают правила, которые управляют состоянием доступных элементов данных или отношением между столбцом и таблицей, как целое - часто и тем, и другим. Примерами являются NOT NULL (не допускает ввод, содержащий неопределенное значение), UNIQUE (требует, чтобы вводимый элемент не имел соответствующего значения этого столбца в таблице) и PRIMARY KEY (объединяет два других ограничения, а также "представляет" таблицу для ссылочного отношения с другими таблицами).