Re: null поля
От: Roman Pankov  
Дата: 06.09.01 11:41
Оценка:
Здравствуйте eim, вы писали:

eim>Во всех книжках и конференциях пишут, что null — это "неизвестно какое значение". Соответственно не проходят сравнения на равенство и многие СУБД не позволяют строить индексы UNIQUE BUT NULL. В 99% случаев это верно. Но ведь можно придумать пример, когда null — это не "неизвестно что" а "не существует".

eim>Например: существует таблица с посетителями. Каждый взрослый посетитель обязан иметь паспорт (с уникальным номером). У детей паспорта нет, соответственно значение null в этом случае — "не существует" и null == null в этом примере. Также я думаю можно найти случаи, когда null != null (строго), и когда null строго меньше(больше) любого не-null. Что вы думаете об этих ограничениях (или не-ограничениях) в логике работы СУБД?

В MSSQL Server'е можно для сеанса снять галочку (настройку) ansi nulls (по умолчанию она установлена):

sp_dboption 'ansi nulls', 'off'
или
set ansi_nulls off

тогда получится: null==null — истинно (по умолчанию, сравнение чего-либо с null — всегда ложно).

Но, imho, это не логично. Ведь null — это именно неопределенное значение, а сравнивать неопределенное с неопределенным... Это все равно, что делить ноль на ноль... ;)))

А насчет "придумывания" примеров — так всегда можно ж придумать и способ обхода. Вот с паспортами: пусть по умолчанию (и у детей, получается, тоже) номер будет равен 0 или -1 — вот и сравнивайте его как угодно и с чем угодно... ;)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.