Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dbbook(2010.04.15).pdf
Скачиваний:
52
Добавлен:
09.06.2015
Размер:
2.14 Mб
Скачать

insert into имя_таблицы default values

Значения по умолчанию задаются для каждого столбца при создании таблицы. В частности, в качестве значения по умолчанию можно задать и пустое значение. Поэтому единственная цель, с которой выше вводилось понятие пустого значения – это показать отличие понятия пустого значения от понятия неопределенного значения.

2.3. Неопределенные значения

Для маркировки неопределенных значений используется специальное зарезервированное ключевое слово null. Null-значение может быть присвоено переменной любого типа (числового, логического, строкового, даты, даты и времени и т.д.).

2.3.1. Интерпретации

Null-значения допускают следующие интерпретации:

1)значение неизвестно (пока),

2)значение неприменимо.

Рассмотрим пример (табл. 2.1).

Null-значение номера паспорта в 1-ом случае интерпретируется как неизвестное, поскольку речь идет о совершеннолетнем гражданине. Во 2-ом случае значение номера паспорта интерпретируется как неприменимое (до тех пор, пока текущая дата рассмотрения этих данных не будет соответствовать совершеннолетнему возрасту). В 3-ем случае неясно, какую можно дать интерпретацию

Таблица 2.1.: Интерпретации null-значения

Паспортные данные

№ п/п

Фамилия

. . .

Д.р.

№ паспорта

Интерпретация

1

Иванов

 

01.01.1980

null

неизвестно

2

Петров

 

02.01.2000

null

неприменимо

3

Сидоров

 

null

null

???

null-значению номера паспорта, поскольку год рождения имеет null-значение (интерпретируемое как неизвестное). Кроме того, с течением времени интерпретация null-значения номера паспорта во 2-ом случае изменится.

Таким образом, интерпретация null-значений существенно зависит от семантики данных. Правила вычисления выражений с null-значениями, реализованные в СУБД, следует рассматривать лишь как правила, действующие в системе по умолчанию.

2.3.2. Правила вычисления выражений

Как формулируются правила вычисления выражений с null-значениями?

1. Как обычно, вычисление выражения заключается в последовательном выполнении отдельных операций согласно их приоритету и подстановке полученных значений в выражение. Например, при x, равном 3, имеем последовательно

(1 + 2) x2; (1 + 2) 32; 3 32; 3 9; 27

2. Как общее правило, результат выполнения отдельной операции с null-значением в качестве операнда считается null-значением. Например, при x, имеющим null-значение, имеем

(1 + 2) x2; (1 + 2) null2; 3 null2; 3 null; null

3. Исключением из общего правила являются правила выполнения операций конъюнкции (and) и дизъюнкции (or) в условиях действия законов поглощения:

false and x; x and false := false;

true or x; x or true := true

Здесь символ подстановки «:=» разделяет список выражений и значение, которым они могут быть заменены. Таким образом, законы поглощения имеют место при любых значениях операнда, в том числе и при значении null:

false and null; null and false := false;

true or null; null or true := true

Почему правила выполнения операций конъюнкции и дизъюнкции являются исключением из общего правила? Дело в том, что в современных языках программирования вместо обычных операций конъюнкции и дизъюнкции (обозначаемых как and и or) фактически используются (без изменения обозначений) операции условной конъюнкции и условной дизъюнкции (их следовало бы обозначать как cand и cor). В этих условных операциях вычисление операндов проводится слева направо. При этом если левый операнд оказывается поглощающим элементом для операции, то правый операнд не вычисляется и результат операции полагается равным поглощающему элементу.

Примечание. Это приводит, например, к корректности следующего оператора, в котором a[1. . . n] – массив из n элементов: if i < n cand a[i] > a[i + 1] then a[i], a[i + 1] := a[i + 1], a[i] (Здесь во фразе then использован оператор кратного присваивания, с помощью которого соседние элементы массива меняются значениями.)

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

Как можно кратко и в общем виде сформулировать правила интерпретации null-значений в контексте различных операций?

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

2.В контексте логических операций отрицания, конъюнкции и дизъюнкции null-значение в качестве операнда интерпретируется как неизвестное. Тогда, если результат выполнения операции не зависит от подстановки вместо null-значения значения false или true, то этот независящий от подстановки результат и полагается в качестве результата операции. В противном случае результат не определен, и, следовательно, результатом является null-значение. Таким образом, имеем следующие правила работы с null-значениями в контексте логических операций (табл. 2.2).

Таблица 2.2.: Таблицы истинности

x

not x

false

true

 

 

null

null

 

 

true

false

 

 

x

y

x and y

x or y

false

false

false

false

false

null

false

null

false

true

false

true

 

 

 

 

null

false

false

null

null

null

null

null

null

true

null

true

true

false

false

true

true

null

null

true

true

true

true

true

 

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]