4.5.9.      Установка значений по умолчанию

В SQL имеется возможность при вставке в таблицу строки, не указывая значений некоторого поля, определять значение этого поля по умолчанию. Наиболее часто используемым значе­нием по умолчанию является NULL. Это значение принимается по умолчанию для любого столбца, для которого не было уста­новлено ограничение NOT NULL.

Значение поля по умолчанию указывается в команде CREATE TABLE тем же способом, что и ограничение столбца, с помощью ключевого слова

ОЕРАОТлКзначение по умолчаник».

Строго говоря, опция DEFAULT не имеет ограничительного свойства, так как она не ограничивает значения, вводимые в по­ле, а просто конкретизирует значение поля в случае, если оно не было задано.

Предположим, что основная масса студентов, информация о которых находится в таблице STUDENT, проживает в Вороне­же. Чтобы при задании атрибутов не вводить для большинства студентов название города 'Воронеж', можно установить его как значение поля CITY по умолчанию, определив таблицу STUDENT следующим образом:

CREATE TABLE STUDENT

(STUDENT_ID   INTEGER PRIMARY KEY, SURNAME CHAR   (25)    NOT NULL,

NAME CHAR   (10)     NOT NULL,

STIPEND INTEGER CHECK   (STIPEND < 200),

KURS INTEGER,

CITY CHAR   (15)    DEFAULT   'ЕсрЗНЄЖ' ,

BIRTHDAY DATE, UNIV_ID INTEGER) ;

Другая цель практического применения задания значения по умолчанию — это использование его как альтернативы для NULL. Как уже отмечалось выше, присутствие NULL в качестве возможных значений поля существенно усложняет интерпрета­цию операций сравнения, в которых участвуют значения таких полей, поскольку NULL представляет собой признак того, что фактическое значение поля неизвестно или неопределенно. Сле­довательно, строго говоря, сравнение с ним любого конкретно­го значения в рамках двузначной булевой логики является не­корректным, за исключением специальной операции сравнения is NULL, которая определяет, является ли содержимое поля ка­ким-либо значением или оно отсутствует. Действительно, ка­ким образом в рамках двузначной логики ответить на вопрос, истинно или ложно условие CITY = 'Воронеж', если текущее значение поля CITY неизвестно (содержит NULL)?

Во многих случаях использование вместо NULL значения, под­ставляемого в поле по умолчанию, может существенно упростить использование значений поля в предикатах.

Например, можноустановитьдля столбца опцию NOT NULL, а для неопределенных значений числового типа установить зна­чение по умолчанию «равно нулю», или для полей типа CHAR пробел, использование которых в операциях сравнения не вы­зывает никаких проблем.

При использовании значений по умолчанию в принципе до­пустимо применять ограничения UNIQUE или PRIMARY KEY в этом поле. При этом, однако, следует иметь в виду отсутствие в таком ограничении практического смысла, поскольку только одна строка в таблице сможет принять значение, совпадающее с этим значением по умолчанию. Для такого применения зада­ния по умолчанию необходимо (до вставки другой строки с ус­тановкой по умолчанию) модифицировать предыдущую стро­ку, содержащую такое значение.

Упражнения

1. Создайте таблицу EXAMJVIARKS так, чтобы не допускался ввод в таблицу двух записей об оценках одного студента по конкретным экзамену и предмету обучения и чтобы не допускалось проведение двух экзаменов по любым предметам в один день,

2. Создайте таблицу предметов обучения SUBJECT так, чтобы количе-

ство отводимых на предмет часов по умолчанию было равно 36, не допускались записи с отсутствуювдим количеством часов, поле SUBJ_IDявлялось первичным ключом таблицы и значения семест­ров (поте SEMESTER) лежали в диапазоне от 1 до 12.

3. Создайте таблицу EXAMMARKS таким образом, чтобы значения по­ля EXAM ID были больше значений поля SUBJ ID, а значения поля SUBJ_ID~6bLini больше значений поля STUDENT_ID; пусть также бу­дут запрещены значения NULL в любом из этих трех полей.