Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Переопределения в доменах
Переопределения в доменах
Столбцы, созданные с использованием доменов, могут переопределять некоторые наследуемые от домена атрибуты, заменяя наследуемый атрибут эквивалентным предложением атрибута. Определение столбца также может добавлять другие атрибуты. В табл. 13.1 описано, какие атрибуты могут, а какие не могут быть переопределены.
Таблица 13.1. Переопределение атрибутов доменов и столбцов
Атрибут |
Переопределяется? |
Замечания |
Тип данных |
Нет |
|
DEFAULT |
Да |
|
CHARACTER SET |
Да |
Также может использоваться, чтобы восстановить для столбца значения по умолчанию базы данных |
COLLATE |
Да |
|
CHECK |
Нет |
Используйте предложение CHECK в операторе CREATE или ALTER TABLE для добавления в проверку новых условий |
NOT NULL |
Нет |
Атрибут NOT NULL на уровне домена не может быть переопределен на уровне столбца. Во многих случаях лучше оставить для домена возможность пустого значения и добавлять ограничение NOT NULL для столбцов, где это необходимо, в операторе CREATE или ALTER TABLE |
Следующий оператор демонстрирует, как расширяется список атрибутов столбца, основанного на домене, созданного в одном из предыдущих примеров:
CREATE DOMAIN TEL_NUMBER
AS VARCHAR(18)
CHECK(VALUE LIKE '(0%)%');
Скажем, мы хотим определить таблицу, содержащую столбец с номером телефона. Нам нужны атрибуты домена, но нам также необходимо обеспечить, чтобы нецифровые символы вводились в верхнем регистре:
CREATE TABLE LIBRARY_USER (
USER_ID INTEGER NOT NULL.
. . . <другие столбцы>,
PHONE_NO TEL_NUMBER,
CONSTRAINT CHK_TELNUM_UPPER
CHECK (PHONE_NO = UPPER(PHONE_NO))
Теперь у нас есть дополнительная проверка CHECK для этого столбца. Следующий оператор:
INSERT INTO LIBRARY_USER VALUES (USER_ID, PHONE_NO)
VALUES (99, '(09) 43889 wish');
будет ошибочным, потому что дополнительное ограничение CHECK требует, чтобы телефонный номер был '(09) 43889 wish'.