Разные виды пустоты
Thursday, 19 March 2009 20:55Когда изобретали реляционную алгебру, зачем-то сэкономили на значении NULL. На самом деле там должно быть два значения: "никаких данных нет" и "данные неизвестно какие". От этой экономии с тех пор происходят многие неудобства в сравнительных, логических и прочих операциях.
Re
Date: Thursday, 19 March 2009 19:36 (UTC)Re: Re
Date: Thursday, 19 March 2009 19:49 (UTC)Пример "данные незивестно какие" - поле "температура" в данных метеостанции, если за пять минут до срока измерения белый медведь разворотил будку и сожрал термометр. Температура какая-то в нужный момент несомненно была, но вот измерить не удалось.
Или другой пример - из урны вынимают белые и черные шары. В момент вынимания очередного шара гаснет свет. Шар вот он, в руках, а цвет неизвестен - темно.
Никаких данных нет - поле "папиллярный узор указательного пальца левой руки". Записываются данные человека, которому левую руку десять лет назад оторвало.
Или менее кровожадный пример - база данных в которой есть поле "цвет волос".
"Данные неизвестно какие" - пришла фанатичная мусульманка в хиджабе, хиджаб снимать отказалась.
"Данных никаких нет" - пришел абсолютно лысый человек.
Re: Re
Date: Thursday, 19 March 2009 19:50 (UTC)COUNT(поле) должен не считать "пусто", но (вероятно) считать "что-то". Уникальные индексы должны допускать единственное значение "пусто", но (вероятно) множество "что-то".
Да и просто с точки зрения бизнес-логики: какое-нибудь "телефон неизвестен" отличается от конкретного "телефона точно нет". Сейчас приходится для всего этого вводить специальные значения и дополнительные флажки.
Re: Re
Date: Thursday, 19 March 2009 20:09 (UTC)Конкретно. Узор большого пальца безрукого вполне мог сохраниться в старых документах. А может быть когда-нибудь в будущем ему вырастят новую руку (плоды прогресса), и с неё можно будет снять отпечаток. Или научатся читать отпечатки пальцев непосредственно с генома.
Цвет волос лысого -- тоже осмысленное понятие. Если лысый -- японец, то этот цвет чёрный. А может быть, достаточно ему смазать лысину Чудодейственным Средством для Ращения Волос (ну, хоть один-то волосок от этого должен получиться :-)
То есть, вместо универсального понятия NULL, получается некий "NULL с градациями".
Re: Re
Date: Thursday, 19 March 2009 20:25 (UTC)Итак, ты предлагаешь два значения "телефон неизвестен" и "телефона точно нет". Почему именно эти? Вариантов много: "Телефон давать отказался", "Телефон сломан, починят через неделю", "Телефон есть, но там не берут трубку".
С точки зрения бизнес-логики вопрос стоит так: будем ли мы звонить этому человеку по телефону, и если да, то по какому? Если не будем звонить -- пишем NULL.
Re
Date: Thursday, 19 March 2009 20:44 (UTC)Re
Date: Thursday, 19 March 2009 20:47 (UTC)Кстати, в гадании я стараюсь разделять все эти неизвестности. "Гадание состоялось, ответ "нет", "Гадание состоялось, но ответ на вопрос неизвестен", "Гадание не состоялось - все информаторы заняты", "Гадание не состоялось - вопрос поставлен некорректно".
no subject
Date: Thursday, 19 March 2009 22:16 (UTC)Re: Re
Date: Thursday, 19 March 2009 23:20 (UTC)... Я обонял неописуемый смрад гнилого горелого небелкового мяса ...
Re: Re
Date: Thursday, 19 March 2009 23:29 (UTC)... МНОС схутед довн ...
Re: Re
Date: Thursday, 19 March 2009 23:39 (UTC)no subject
Date: Friday, 20 March 2009 04:15 (UTC)return FILE_NOT_FOUND
почти (c) daily WTF %)
no subject
Date: Tuesday, 24 March 2009 21:41 (UTC)В одной голландской программе было 11 вариантов для значения поля "пол":
- мужской
- женский
- был мужской, сейчас женский
- был женский, сейчас мужской
- неизвестен
- клиент отказался назвать
- клиент не определился со своим полом
и ещё четыре в том же духе.