Текущий архив: 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