Использование NULL-значений

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет всем!

Объясните, плиз, практическое применение колонок, позволяющих хранение NULL-значений. Какая разница, например, в хранении значения NULL вместо значения 0 для полей типа DATETIME, кроме того, что как таковой даты 0 не существует?

Алексей,
начальник отдела ПТО
ООО "ОРК"
mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
origin: Симпатичный партизан сдаст "своих" врагу на короткий срок.

(Добавление)

Ну, применений много.
Раз задал такой вопрос значит они тебе пока не нужны :)

Различие понятий "нулевое значение" и "отсутствие значения" иногда существенно.

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

Уже нужны, раз дату 00.00.0000 я не могу "засунуть" в БД... :-)
Различие понятий "нулевое значение" и "отсутствие значения" иногда существенно.
Например? Случай с датами отбрасываем.

Алексей

Если есть правила в БД (CONSTRAINT), я уже писал, 0 это не пустая ссылка (ошибка), null - отсутсвие ссылки (нет ошибки)

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
IRC: IRC.RINET.RU:6669, Channel #Clarion, AndrewM
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com

"Температура в камере" = 0 и "Температура в камере" неизвестна (is NULL)

WBR, Nick Tsigouro mailto:nick@arsis.ru

Во, вспомнил.
Случай с датами, но суть, надеюсь, проясняет.

Код: Выделить всё

Create Table SomeProcess(
       id    integer not null,
       StartTime   timestamp Not Null default current_timestamp,
       FinishTime  timestamp,
       ... другие поля ...
);
тут идеологически правильнее иметь FinishTime в неопределенном состоянии для незавершившихся процессов, чам хранить в этом поле 0, даже если бы timestamp это позволял.

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

--
Best regards,
Maxim Yemelyanov


(Добавление)
Уже нужны, раз дату 00.00.0000 я не могу "засунуть" в БД... :)
А почему не можешь?
'00.00.0000' и NULL - вещи, мягко говоря, несколько РАЗНЫЕ...

P.S. У меня _такие_ даты почему-то в поля с признаком 'NOT NULL'
"засовываются"... :)
Причём настолько хорошо ;), что _недопустимое_ в моём случае значение
'00.00.0000' приходится отлавливать программно, на этапе ввода данных.


P.P.S. А, к слову, о какой базе идёт речь? ;)
Народ (да и я), похоже, SQL имеет в виду.
Может, у тебя что-то, что под NULL подразумевает и '00.00.0000'
;)

--
С уважением,
Степанец Александр Валентинович.

странно, а со сторны БД поле DATETIME или INTEGER (клашин формат) ?

Andrew Myalin

1. Сам ответил, что нулевую дату ты никак не засунешь в БД, ошибка будет, если поле NOT NULL
2. Есди есть Constraint'ы между таблицами, 0 в качестве неопределённой ссылки не прокатит, а NULL прокатит

ЗЫ
а вообще при работе с NULL полями надо быть очень осторожным, очень много тонкостей при организации WHERE, EXISTS, SELECT IN по таким полям:
и если есть индекс по этому полю, а в WHERE есть:
WHERE NullField is null или WHERE NullField is not null, индес не используется, сканируется вся TABLE


Andrew Myalin
2. Есди есть Constraint'ы между таблицами, 0 в качестве неопределённой ссылки не прокатит, а NULL прокатит
можно конечно обойти скажем "нарисовав" в справочниках запись с id=0, а лишь затем включить IDENTITY. но это не совсем красиво, да и к тому же есть варианты, когда это совсем невозможно. можно, как вариант, побалаваться тригерами на insert/update в дочерних таблицах. но как бы самый простой вариант - возможность значению принимать NULL. хотя как-то читал рекомендации стараться избегать при проектировании задавать поля с возможностью принимать значения NULL
и если есть индекс по этому полю, а в WHERE есть:
WHERE NullField is null или WHERE NullField is not null, индес не используется, сканируется вся TABLE
как писал как-то до этого неординарно ведет себя кларин set на составных ключах включающих поля с NULL. хотя это не кларина проблема, а скорее M$ (на других платформах лень тестить)

--
Всего наилучшего, porutchik mailto:porutchik@mail.primorye.ru
http://personal.primorye.ru/porutchik/
---------------------------------------------------------
Советские боевые слоны - самые боевые слоны в мире!

А если использовать в WHERE конструкцию ISNULL(NullField,'')='', то индекс играет рояль или поиск идет всё равно по всей таблице?

С уважением, Михаил

по моему всё равно

Andrew Myalin
Написал: ClaList(2)
Ответить