Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.08.14;
Скачать: [xml.tar.bz2];

Вниз

Двойной стандарт? (null в sql)   Найти похожие ветки 

 
Sha ©   (2011-04-19 01:00) [40]

>Mystic ©   (18.04.11 22:26) [36]

Это так, но, думаю, мало кому такое нужно.
Вот и не стали заморачиваться.


 
Sha ©   (2011-04-19 01:27) [41]

>Mystic ©   (18.04.11 22:26) [36]

Кстати, для отсутствующих значений справедливы те же размышления.

Допустим, товар поступил на склад, его тут же отпустили заказчику.
Вес товара в БД не заносили. Понятно, что после всех этих операций
вес товара на складе (5) не изменился. С другой стороны он стал
равен 5 + XXX - XXX. И почему это не должно быть равно 5 ?


 
Медвежонок Пятачок ©   (2011-04-19 09:35) [42]

Отсутствие значения в памяти сервера как раз и означает, что оно ему не известно.

то есть в каком-то конкретном случае, скажем после какого-то присвоения, серверу становится известно, что значение, записанное в поле, ему неизвестно, и все это после того, как сервер узнал, какое именно значение ему подсунули в качестве значения при апдейте.


 
Inovet ©   (2011-04-19 09:42) [43]

[42] Медвежонок Пятачок ©

Три раза прочитал и не понял. Да и очём вообще спор не понятно - есть null, есть правила - всё известно. По ИБ или ФБ помню статью об особенностях null в них.


 
Медвежонок Пятачок ©   (2011-04-19 09:54) [44]

это было размышление на тему "серверу неизвестно"

1. имеем апдейт, в результате которого в поле ложится нулл.
2. после апдейта серверу "становится неизвестно" значение в проапдейтенном поле

на основании чего сервер "решил", что значение ему неизвестно?

наверное на основании того, что "он узнал", что значением параметра при апдейте был нулл.

теперь остается решить, знает ли сервер, что в поле лежит нулл, или серверу неизвестно какое значение лежит в поле.


 
Inovet ©   (2011-04-19 10:07) [45]

знает ли сервер, что в поле лежит нулл, или серверу неизвестно какое значение лежит в поле.

Серверу известно, что в поле ничего не лежит, это он выдаёт в запросах, а что он там у себя хранит пофиг.


 
OW ©   (2011-04-19 10:18) [46]

"..пойду, повешусь.."


> Медвежонок Пятачок ©   (19.04.11 09:54) [44]

вот что-то типа этого, но немного не так

> 1. имеем апдейт, в результате которого в поле ложится нулл.
> 2. после апдейта серверу "становится неизвестно" значение
> в проапдейтенном поле

Да, на основании чего сервер "решил", что значение ему неизвестно?
очевидно, что на основании того, что "он узнал", что значением параметра при апдейте был нулл.

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

Да, конечно.

но тогда, придется допустить, что есть совершенно конкретный параметр, после чего сервер решил, что значение ему стало неизвестно.
ИМХО
совершенно естественно было бы дать команду - Забудь что лежит там, там и там. А не присвоить значение, принятое за неопределенность.

Хотя, все это, конечно, ерунда
так, мозги/язык/пальцы поразмять


 
Игорь Шевченко ©   (2011-04-19 10:28) [47]


> Хотя, все это, конечно, ерунда
> так, мозги/язык/пальцы поразмять


Касторка тоже способствует


 
Компромисс   (2011-04-19 11:41) [48]

Я вчера понял, наконец, почему так сделано. Из-за реляционных операций.

Например, чтобы
select a.*
 from a, b
 where a.f = b.f_a

(или select a.* from a inner join b on a.f = b.f_a)
работал правильно, то есть возвращал только те строки, для которых есть соответствующие строки в b.
Иначе всегда получали бы full join.


 
Mystic ©   (2011-04-19 12:10) [49]


> стати, для отсутствующих значений справедливы те же размышления.


Ты опять интерпретировал NULL как неизвестное (товар имеет вес, но его не заносили в базу, поэтому базе неизвестно значение). Это только одна возможная интерпретация. Другая состоит в том, что выражение не имеет смысла, например, если поле это дата последнего обращения пользователя к некоторому элементу, то значение NULL указывает, что обращений не было. Посему любое использование этого значения в выражении делает его бессмысленным :)


 
Sha ©   (2011-04-19 20:24) [50]

> Mystic ©   (19.04.11 12:10) [49]

Когда отсутствует значение атрибута, неприменимого к объекту, тоже не все просто.

Атрибут "расход топлива на 100 км пути" неприменим к велосипеду.

Выражение 20 * x / 100 позволяет узнать, сколько топлива должен купить владелец транспортного средства, чтобы проехать 20 км. Понятно, что в нашем случае это 0 л.

С другой стороны, выражение 10 / x позволяет узнать, какой путь может пройти транспортное средство на 10 л горючего. Понятно, что в нашем случае это значение не определено.

Видим, что обоих случаях NULL ведет себя как 0. Но тогда обратный атрибут или, скажем, атрибут "время набора скорости 100 км/час" для того же велосипеда будут вести себя как бесконечность.

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

При этом, как всегда, большинство имеет шанс оказаться в меньшинстве


 
Sha ©   (2011-04-19 20:50) [51]

> Mystic ©   (19.04.11 12:10) [49]
> если поле это дата последнего обращения пользователя к некоторому элементу,
> то значение NULL указывает, что обращений не было.
> Посему любое использование этого значения в выражении делает его бессмысленным :)

Не любое. Например, выражение x>d можно было бы (если бы было можно) использовать для определения факта обращения пользователя к элементу после даты d.


 
Petr V. Abramov ©   (2011-04-20 06:54) [52]


> Отсутствие значения в памяти сервера

"обнулить переменную совсем"


 
Sha ©   (2011-04-20 19:58) [53]

> "обнулить переменную совсем"

"Не читал, но осуждаю!"


 
Cobalt ©   (2011-04-22 14:27) [54]

> Sha ©   (19.04.11 20:50) [51]
>Не любое. Например, выражение x>d можно было бы (если бы было
> можно) использовать для определения факта обращения пользователя
> к элементу после даты d.


Дык, все логично:
Есть Вася, Вова, Петя и Сирожа
Вася - давний клиент фирмы с неведомых пор, но на сайт фирмы не заходит, иоб решает все через финдиректора.
Вова - тоже давний клиент, на заре становления сайта залез туда, ужаснулся и решил общаться только по почте.
Петя - постоянный клиент, регулярно выносит мозг техподдержке сайт фирмы
Сирожа - новый клиент, еще не обращался  за техподдержкой на сайт, но обещал

Задача: выбрать клиентов, которые обращались за техподдержкой на сайт:
1) за последний год
2) за последний месяц
3) которые давно уже не обращались за техподдержкой


 
Cobalt ©   (2011-04-22 14:31) [55]

Не читал, но обсуждаю! :-)



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2011.08.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.004 c
15-1303631334
IPranker
2011-04-24 11:48
2011.08.14
Что такое CRC?


15-1303461362
tesseract
2011-04-22 12:36
2011.08.14
Расчет стоимости владения оборудованием.


2-1304438175
vitge
2011-05-03 19:56
2011.08.14
Организация БД в Паскале на основе деревьев.


15-1303237191
delphi_developer
2011-04-19 22:19
2011.08.14
team lead и senior software engineer - одно и тоже?


3-1262702825
Soi
2010-01-05 17:47
2011.08.14
Как прочитать поле BYTES из .DB файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский