в чем сила NULL?

Rynor

stay hungry
в чем сила NULL?

Уважаемые!
Поиск не работает... или его перенесли куда из-за глюка с mnogosearch... в общем вопрос ламерский, но вот всплыл...

можете мне объяснить в чем сила NULL в БД?
я его юзаю только в TEXT/DATE полях, не вижу смысла в этой т.н. "тройной логике" NULL/TRUE/FALSE.

есть например функция ISNULL(Field,expression)
если Field is Null то возвращается результат expression иначе значение Field

короче, в чем сила NULL, если она есть
в доках MySQL этот вопрос как-то лаконично освещен...

заранее спасибо за помощь!
 

Vinny

Guest
NULL - это значит что поле не заполнено, не содержит ни какого значения... Использовать не рекомендуется, потому как уменьшает скорость выборок.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Vinny
NULL - это значит что поле не заполнено, не содержит ни какого значения...
NULL как правило означает, что значение нам неизвестно или неприменимо (поле "дата оплаты" для счёта, который ещё не был оплачен).

Использовать не рекомендуется, потому как уменьшает скорость выборок.
Вот за это я и не люблю мысклеводов.

Rynor: возьми лучше какую-нибудь фундаментальную работу по теории РСУБД. Учить основы по докам к MySQL --- чревато.
 

Demiurg

Guest
>Вот за это я и не люблю мысклеводов.
Дейт, если мне не изменяет память, тоже плохо относиться к NULL.
 

tony2001

TeaM PHPClub
>Использовать не рекомендуется, потому как уменьшает скорость выборок.
Винни, откуда такая информация?
 

Vinny

Guest
2 Sad Spirit:
я работаю в основном на Oracle и MSSQL... AFAIK там наблюдается то же самое...
 

Vinny

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

можно как-нить тесты написать, пока времени нет...
 

Rynor

stay hungry
спасибо!
про то, что такое NULL я в курсе :)
хотел узнать "общественное мнение", потому что мне трудно найти пример реального испльзования null кроме как в поле date (пример оплата счета выше) или text... у меня в БД куча NULL-полей в наследство осталось, вот я их и выкидываю, меняю на NOT NULL DEFAULT 0 все такое.
Хотел заручиться моральной поддержкой в этом деле, заручился :)
 

Rynor

stay hungry
2 Sad Spirit
"Учить основы по докам к MySQL - чревато."
Это да.
 

Demiurg

Guest
Правильно делаешь. Чем их меньше, тем лучше. А зачем в text использовать null?
 

Crazy

Developer
Автор оригинала: tony2001
Винни, откуда такая информация?
Большинство СУБД не хранит в индексах информацию о NULL-значениях (и это логично). Соответственно, если оптимизатор видит, что согласно логике данного запроса нельзя априори отбросить null-значения, то он вынужден перейти к table scan вместо использования индексов.

Соответственно, на оределенных запросах объявление поля как "null" будет тормозить. Но, что важно, именно на некоторых.

Возможно, в MySQL есть какие-то свои специфические проблемы с null, но мне о них ничего не известно.
 

Rynor

stay hungry
2 Demiurg:
NULL в text оставил из-за некоторого недопонимания между MyODBC 3.51 (перешел на него недавно с 2.*) и Active Server Pages, проще так, чем добавлять в старый код новые костыли, ковырялся пару дней, разобрался, забил.

В PHP такой проблемы не встретил, так что там NULL только в DATE/TIMESTAMP, TIMESTAMP NOT NULL не катит почему-то....

2 Crazy:
спасибо, очень важная инфа про индексы
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Demiurg
Дейт, если мне не изменяет память, тоже плохо относиться к NULL.
Не изменяет, но аргументация у него чуть другая. ;)
 

tony2001

TeaM PHPClub
>Большинство СУБД не хранит в индексах информацию о NULL-значениях (и это логично).
хм, возможно это логично, согласен.

я спросил, т.к. никаких упоминаний об этом в мане по MySQL не видел.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Crazy
Соответственно, на оределенных запросах объявление поля как "null" будет тормозить. Но, что важно, именно на некоторых.
Фактически, только на запросах где в кач-ве критерия используется исключительно IS NULL/IS NOT NULL...

Просто я считаю, что тут premature optimization: ради (зачастую) мифического прироста быстродействия создаётся менее логичная структура базы.
 

Crazy

Developer
Между прочим, тот самый Кодд считает NULL ересью. :) Так что на счет более логичной структуры -- спорно. :)
 
Сверху