Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

Для столбца PHONE_NUMBER мы используем домен, который был определен в нашем примере в главе 13:

CREATE DOMAIN TEL_NUMBER

AS VARCHAR(18)

CHECK(VALUE LIKE ' (0%)%');

Столбцы, основанные на доменах

Если определение столбца основано на домене, оно может включать новое значение по умолчанию, дополнительные ограничения CHECK, предложение COLLATE, которые перекрывают значения, уже определенные в определении домена. Оно также может включать дополнительные атрибуты или ограничения столбца. Например, вы можете добавить ограничение NOT NULL для

столбца, если домен его еще не содержит.

! ! !

ВНИМАНИЕ! Домен, который был определен как NOT NULL, не может быть переопределен на уровне столбца, как допускающий пустое значение.

. ! .

Например, следующий оператор создает таблицу COUNTRY, ссылающуюся на домен с именем COUNTRYNAME, который не имеет ограничения NOT NULL:

CREATE TABLE COUNTRY (

COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY,

CURRENCY VARCHAR(10) NOT NULL);

Мы добавили ограничение NOT NULL в определение столбца COUNTRYNAME, потому что он будет первичным ключом таблицы COUNTRY.

Необязательные атрибуты

Следующие разделы описывают необязательные атрибуты столбца.

Значение DEFAULT

Определение значения по умолчанию может сэкономить время ввода данных и предотвратить ошибки ввода данных, когда новая строка добавляется в таблицу. Если строка добавляется без включения этого столбца в список столбцов, то значение по умолчанию - если определено - может быть автоматически записано в столбец. Основанный на домене столбец может включать значение по умолчанию, которое локально перекрывает значение по умолчанию, определенное для домена.

Например, возможным значением по умолчанию для столбца TIMESTAMP может быть контекстная переменная CURRENT_TIMESTAMP (серверная дата и время). В символьном столбце логического стиля (True/False) значение по умолчанию может быть установлено в ' F' , чтобы гарантировать, что допустимое, непустое значение будет записано в каждую новую строку.

Значение по умолчанию должно быть совместимым с типом данных столбца и должно согласовываться с любыми другими ограничениями этого столбца или лежащего в основе домена. Значение по умолчанию, соответствующее типу данных, может быть:

* константой (например, строкой, числом или датой);

* контекстной переменной (например, CURRENT_TIMESTAMP, CURRENT_USER [42] , CURRENT_CONNECTION и т.д.);

* предварительно определенным литералом даты (таким как 'NOW', 'TOMORROW' и т.д.);

* NULL может быть установлен как значение по умолчанию только для столбцов, допускающих пустое значение [43] . Столбец, допускающий пустое значение, получает значение по умолчанию NULL автоматически, однако вам может понадобиться перекрыть нежелательное значение по умолчанию на уровне домена. Не объявляйте это значение по умолчанию для столбцов, имеющих ограничение NOT NULL.

42

Если ваша операционная система поддерживает использование многобайтовых символов в именах пользователей или вы используете многобайтовый набор символов при определении ролей, то каждый столбец, в котором будут сохраняться

в качестве значений по умолчанию CURRENT_USER или CURRENT_ROLE, должен быть определен с использованием совместимого набора символов.

43

См. ограничение NOT NULL для столбца, NULL может оказаться несовместимым значением

! ! !

ВНИМАНИЕ! Когда вы полагаетесь на значение по умолчанию, вы должны понимать, что значение по умолчанию будет применяться только к добавлению новой строки и только если оператор INSERT не включает этот столбец со значением по умолчанию в список столбцов. Если ваше приложение включает этот столбец в оператор INSERT и передает NULL в списке значений, то NULL и будет сохранен, независимо от любого определенного значения по умолчанию. Если столбец не допускает пустых значений, то передача значения NULL всегда вызовет исключение.

. ! .

Следующий пример определяет столбец CREATED_BY, который имеет в качестве значения по умолчанию контекстную переменную CURRENT_USER:

CREATE TABLE ORDER (

ORDER_DATE DATE,

CREATED_BY VARCHAR (31) DEFAULT CUREENT_USER,

ORDER_AMOUNT DECIMAL(15,2));

Новая строка добавляется пользователем JILLIBEE; столбец CREATED_BY не указан в списке столбцов:

INSERT INTO ORDER (ORDER_DATE, ORDER_AMT)

VALUES ('15-SEP-2004', 1004.42);

Запрос к этой таблице:

SELECT * FROM ORDER;

. . .

ORDER_DATE CREATED_BY ORDER_AMOUNT

. . .

15-SEP-2004 JILLIBEE 1004.42

. . .

Предложение CHARACTER SET

Набор символов (CHARACTER SET) используется для индивидуального символьного столбца или текстового столбца BLOB, когда вы определяете столбец. Если вы не задаете набор символов, то столбец принимает набор символов домена, если определен, иначе он принимает набор символов по умолчанию для базы данных. Пример:

CREATE TABLE TITLES_RUSSIAN (

TITLE_ID BIGINT NOT NULL,

TITLE_EN VARCHAR(100),

TITLE VARCHAR(100) CHARACTER SET WIN1251);

Подробнее о наборах символов см. главу 11. Список доступных наборов символов представлен в приложении 8.

Предложение COLLATE

Предложение COLLATE может быть добавлено к столбцам CHAR и VARCHAR для перекрытия последовательности сортировки, определенной для набора символов столбца в домене, на котором основывается столбец. Последовательность сортировки не применима для типов BLOB.

Следующее расширение предыдущего примера включает предложение COLLATE:

CREATE TABLE TITLES_RUSSIAN (

TITLE_ID BIGINT NOT NULL,

TITLE_EN VARCHAR(100),

TITLE VARCHAR(100) CHARACTER SET WIN1251 COLLATE PXW_CYRL);

! ! !

ВНИМАНИЕ! Будьте осторожны при применении предложения COLLATE К столбцам, которые должны быть индексированы. Максимальный размер индекса 252 байта может быть радикально уменьшен при некоторых последовательностях сортировки. Сначала проверьте! (Для COLLATE PXW_CYRL он уменьшается до 84 символов.)

Поделиться:
Популярные книги

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Возлюби болезнь свою

Синельников Валерий Владимирович
Научно-образовательная:
психология
7.71
рейтинг книги
Возлюби болезнь свою

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец