Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

Отождествление пустой строки и NULL   Найти похожие ветки 

 
McSimm ©   (2008-07-02 02:09) [160]

да, отвык я от форумов за год...

X определить можно, Y определить нельзя. И означает это чуть меньше чем ничего (с)


 
pasha_golub ©   (2008-07-02 03:42) [161]

извините, мужики, не читал много постов. Вспомнилось. Писалась тулзовина, что доставала объекты и выводила всяко разно. Так вот комментарии об объектах хранились в таблице. Так там НУЛЛ и пустая строка таки разная весчь. Это ведь уже не сад-самострой, а системный каталог.


 
pasha_golub ©   (2008-07-02 04:07) [162]

Фух, прочитал блин.

Разрешите пьяному подростку.

Рассмотрим моноид относительно операции "конкатенация". Для этого рассмотрим непустое множество с заданой на нем операцией "конкатенация".

Множество G = {a1a2...an | ai = "", "a", "b", ... "z"}
Операция "+" замкнута на множестве G. "для любого p, q из G => p+q тоже из G"
Имеем нейтральный элемент относительно операции "+", такой что для любого p из G справедливо p+"" = ""+p = p

А вот NULL не содержится в данном множестве. Точно так же как не содержится он в множестве целых и вещественных чисел, булевых значений и прочее.

Это все равно что попробовать сложить 2 яблока со сферическим конем в вакууме.

Я задавал вопрос трижды. Чем "ноль" не такой специфический, что не может служить аналогом NULL в целочисленных вариациях?


 
Anatoly Podgoretsky ©   (2008-07-02 08:57) [163]

> Юрий  (02.07.2008 1:27:23)  [143]

Естествоиспытатели очень нужны на данном этапе.


 
Anatoly Podgoretsky ©   (2008-07-02 09:02) [164]

> McSimm  (02.07.2008 1:48:31)  [151]

Ох зря ты это привел, от этого же мозги закипят у неподготовленых людей.


 
Поросенок Винни-Пух ©   (2008-07-02 09:25) [165]

X определить можно, Y определить нельзя. И означает это чуть меньше чем ничего (с)

Это означает, что это единственное значение, которое невозможно посчитать не определено или его не существует. Это и есть null.


 
Игорь Шевченко ©   (2008-07-02 09:48) [166]

Поклонников чистой теории - давить!


 
Поросенок Винни-Пух ©   (2008-07-02 09:56) [167]

Я задавал вопрос трижды. Чем "ноль" не такой специфический, что не может служить аналогом NULL в целочисленных вариациях?

я тебе трижды и отвечал. ноль это точно такое же значение целочисленного типа как и любое другое. нулл же это неопределенное значение.
берем любой целочисленный тип. что видим? что у него фиксированный размер. и какой бы комбинацией битов не заполнить этот размер, всегда будет валидное целочисленное значение. это не нулл.


 
McSimm ©   (2008-07-02 10:12) [168]


> pasha_golub ©   (02.07.08 04:07) [162]


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


 
McSimm ©   (2008-07-02 10:16) [169]


> я тебе трижды и отвечал. ноль это точно такое же...

и что? и вам неоднократно отвечали, что пустая строка это точно такое же...

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


 
Поросенок Винни-Пух ©   (2008-07-02 10:18) [170]

ноль если мы говорим не об математической абстракции, а о типах данных sql сервера это определенное количество байт отичное от нуля.

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


 
Поросенок Винни-Пух ©   (2008-07-02 10:19) [171]

и что? и вам неоднократно отвечали, что пустая строка это точно такое же...

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


 
McSimm ©   (2008-07-02 10:31) [172]


> пока ты только мелешь языком вторые сутки.

не только, как ни странно, я при этом еще успеваю много делать. но вы правы, завязывать надо.

Это я с непривычки так втянулся в глупый спор :)

Уговорили, признаю свою неправоту, пустая строка самая особенная из всех особенных строк. Особенно заметны ее особенности в задачах подсчета количества конкатенаций и при работе с некоторыми БД.


 
isasa ©   (2008-07-02 11:52) [173]

О как. Щас рэзать друг друга будуть.

:)

ORACLE
LENGTH("12345") -> 5
LENGTH("") -> NULL
LENGTH(NULL) -> NULL

MS SQL
LENGTH("12345") -> 5
LENGTH("") -> 0
LENGTH(NULL) -> NULL


Второе логичнее.
Кроме того в ORACLE как отличить пустую и "незаполненную".

Кстати, если вспомнить, что строка информационный векор, то все становится на места.
NULL - место под строку не выделено.
"" - место выделено, но длина вектора ноль,
ну и т.д.


 
McSimm ©   (2008-07-02 11:57) [174]


> О как. Щас рэзать друг друга будуть.

Поздно, это все уже перетерли :)


> Второе логичнее.
> Кроме того в ORACLE как отличить пустую и "незаполненную".

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


 
Поросенок Винни-Пух ©   (2008-07-02 12:07) [175]

Кроме того в ORACLE как отличить пустую и "незаполненную".

а как в делфи отличить пустую строку от "незаполненной"?

Кстати, если вспомнить, что строка информационный векор, то все становится на места.

NULL - место под строку не выделено.
где не выделено?
в таблице бд? выделно место под все поля записи иначе где у вас сам нулл-то живет?

"" - место выделено, но длина вектора ноль,
ну и т.д.


место выделено, но правда ни единого бита не выделено.
Ты говоришь что не выделено, а я говорю что миллион раз выделено по ноль байт.

есть метод определить что мой миллион раз не был выделен и что твой один раз был выделен? если длина выделенного ноль?


 
Игорь Шевченко ©   (2008-07-02 12:15) [176]


> Кроме того в ORACLE как отличить пустую и "незаполненную".


А нафига их отличать ?


 
McSimm ©   (2008-07-02 13:02) [177]


> а как в делфи отличить пустую строку от "незаполненной"?

Точно так же как и Int - никак.
Порочное сравнение. Типы данных могут называться одинаково, но суть разная.

В Oracle нет понятия пустая строка, в других системах - есть. Нет тут места религии, достаточно знаний инструмента :)


 
McSimm ©   (2008-07-02 13:08) [178]


> А нафига их отличать ?

Возможно мелочи, но все-таки неудобства некоторые есть. Особенно ежели с непривычки.
Например композитные ключи вызывают навскидку вопросы, поиск по введенному значению (where field = %s - придется вводить специальный случай для пустой строки).
Иногда и логику пришлось бы адаптировать - например, есть у меня в одном месте поле пароля, пустой пароль допустим - пускает с этими правами без запроса, а когда NULL - значит пароль еще не был задан, требует от пользователя задать пароль при первом входе (может и пустой).
Разумеется это далеко не камни преткновения.


 
Игорь Шевченко ©   (2008-07-02 13:19) [179]

McSimm ©   (02.07.08 13:08) [178]

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


 
umbra ©   (2008-07-02 13:26) [180]


> Я про другое - с точки зрения построения модели реального
> мира чем они отличаются и зачем их надо отличать ?

они отличаются тем, что NULL - это неизвестное, а пустая строка - известное значение.


 
Игорь Шевченко ©   (2008-07-02 13:29) [181]

umbra ©   (02.07.08 13:26) [180]


> они отличаются тем, что NULL - это неизвестное, а пустая
> строка - известное значение.


Ты можешь привести пример ? :)


 
McSimm ©   (2008-07-02 13:31) [182]

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

Можно так построить, а можно и так. И это ни разу не говорит о качестве модели. На примере выше с паролем: в одной модели невведеный пароль отличается от пустого с использованием множества значений, в другой это может быть обычный флаг.


 
umbra ©   (2008-07-02 13:35) [183]

на основе неизвестного невозможно принять решение

Например. Хочу купить себе читалку для книг на день рождения. Если я не знаю, будут ли у меня тогда деньги, то я не могу сказать, куплю я ее или нет. Если же я знаю, что денег не будет, то, соответственно, точно знаю, что не куплю.


 
Игорь Шевченко ©   (2008-07-02 13:37) [184]

umbra ©   (02.07.08 13:35) [183]

И где здесь пустая строка ?

McSimm ©   (02.07.08 13:31) [182]


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


Не совсем понял, о чем речь, не затруднит пояснить или дать ссылку на пост ?


 
umbra ©   (2008-07-02 13:39) [185]


> И где здесь пустая строка ?
>

пустая строка - "я знаю, что денег не будет" :)


 
Юрий ©   (2008-07-02 13:41) [186]

> [143] Юрий ©   (02.07.08 01:27)

Поставил клиента, указал всё как нужно. Пытаюсь писать, ответ "Неверный пароль". Пароль верный. Пробовал изменять имя, не пашет. :)


 
McSimm ©   (2008-07-02 13:50) [187]


> Не совсем понял, о чем речь, не затруднит пояснить или дать
> ссылку на пост ?

на девятой странице [178]


> Юрий ©   (02.07.08 13:41) [186]

Клиентский протокол не предусматривает отправку сообщений в принципе.
Все обсуждения на эту тему лучше проводить там.


 
McSimm ©   (2008-07-02 13:52) [188]


> пустая строка - "я знаю, что денег не будет" :)

это не строка, это числовое выражение.

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


 
umbra ©   (2008-07-02 13:59) [189]

просто в реальном мире нет строк :)


 
Игорь Шевченко ©   (2008-07-02 15:31) [190]

McSimm ©   (02.07.08 13:50) [187]

C [178] согласен, что в данном случае следует отличать. Но это, опять же, не камень преткновения - "просто так смоделировали"


 
Petr V. Abramov ©   (2008-07-02 20:01) [191]


> Игорь Шевченко ©   (02.07.08 13:29) [181]

допустим, есть таблица с PK по varchar, и у этого поля в силу каких-то соображений (каких, правда, не знаю :) может быть и значение "пустая строка". А потом на это поле сослались по FK. И в FK теперь неплохо бы отличать отсутствие ссылки куда-либо (null) от ссылки на запись "пустая строка".
P.S. в силу все же некоторой надуманности примера переделывать Oracle не пропагандирую :)


 
Игорь Шевченко ©   (2008-07-02 20:13) [192]


> в силу все же некоторой надуманности примера


таких примеров и я могу привести - но это программизм, а не предметная область :)


 
Petr V. Abramov ©   (2008-07-02 20:19) [193]


> Игорь Шевченко ©   (02.07.08 20:13) [192]
> но это программизм, а не предметная область :)

это предметная область. Представь себе, что такую сущность (с ID = <пустая строка>) ввели постановлением Единой России и Кабинета Министров. А то, что ключ по этому полю сделан - так то при царе было.


 
Игорь Шевченко ©   (2008-07-02 20:20) [194]


> это предметная область.


предметная область в терминах ключей и таблиц не описывается.


 
Petr V. Abramov ©   (2008-07-02 20:26) [195]


> Игорь Шевченко ©   (02.07.08 20:20) [194]

зато описывается в терминах существующих систем и высочайших постановлений, иначе это такая же теория, трехзначная логика :)


 
Petr V. Abramov ©   (2008-07-02 20:27) [196]


> Petr V. Abramov ©   (02.07.08 20:26) [195] +


такая же теория, как трехзначная логика :)


 
Petr V. Abramov ©   (2008-07-02 20:30) [197]


> Игорь Шевченко ©   (02.07.08 20:20) [194]

в описании предметной области и слова null нету тогда уж :)


 
McSimm ©   (2008-07-02 20:47) [198]

Даже постановлением ВЦСПС нельзя ввести сущности с каким-то ID :)

И, если не ошибаюсь, в PK не может быть null в принципе ?


 
Anatoly Podgoretsky ©   (2008-07-03 00:10) [199]

> McSimm  (02.07.2008 20:47:18)  [198]

А почему именно ПК

INNER JOIN ... A.id=B.id


 
McSimm ©   (2008-07-03 00:12) [200]

ПК в связи с примером из [191] и последующим его обсуждением



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

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.83 MB
Время: 0.04 c
15-1215145232
Slider007
2008-07-04 08:20
2008.08.24
С днем рождения ! 4 июля 2008 пятница


15-1215552225
antonn
2008-07-09 01:23
2008.08.24
Еще одна просьба провести тест


15-1215111701
oldman
2008-07-03 23:01
2008.08.24
Новости сегодня меня шокировали...


2-1216323522
Vikindos
2008-07-17 23:38
2008.08.24
Поиск фрагментов в тексте и замена


2-1216301860
Mops
2008-07-17 17:37
2008.08.24
свой пункт меню