Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 5 6 7 8 9 [10] 11 12 13 14 .. 17   вперед  Ctrl
 Re: Все таки Oracle впереди планеты всей!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
softwarer
locky
Хм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?

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

с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот


Нет никакого "вместо". Технически это одно и тоже значение.
Как правильнее: "держать" A вместо A, или наоборот?
8 июл 10, 12:59    [9070948]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
Нет никакого "вместо". Технически это одно и тоже значение.


Похоже, что действительно "техническое", хотя я не знаком глубоко со структурой форматов хранения типов данных в Oracle, но в MS SQL наличие значения NULL в поле определяется не значением поля, а NULL bitmap in row header (1 bit for each column in table; a 1 indicates that the corresponding column is NULL). И для полей переменной длины место на странице данных в таком случае не выделяется.

ЗЫ. М.б. именно поэтому, для MS SQL '' и NULL - 'две большие разницы'.

ЗЫЗЫ. По этой же причине в MS SQL поле с типом данных bit, занимаемое 1бит на странице данных может иметь 3ри значения - 0, 1 и NULL.
8 июл 10, 13:14    [9071050]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Что до отношения Оракла к пустым сторкам, то вот из справки.

Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.
8 июл 10, 13:49    [9071337]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
softwarer
locky
softwarer
locky
Хм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?

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

с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот

Меня радует уместная категоричность.

Поясняю: когда проектировали формат хранения, видимо, решили, что каждое значение имеет размер, чаще всего динамический, и соответственно решили хранить как [длина, байт1, байт2, ...]. Null решили хранить как значение длины 0, то есть в файле БД ему соответствует либо один байт (длина = 0), либо вообще ничего (если в конце строки). Когда реализовывали varchar, строку 'abcde', вполне естественно, решили хранить как [5, 'a', 'b', 'c', 'd', 'e']. И в этот момент "совершенно случайно" оказалось, что null и пустая строка хранятся физически одинаково, как [0].

Есть у меня подозрение, что на самом деле примерно так всё и было, а идеологии - дело более позднее.


про null bitmap уже написали
что касается же тех. реализации...
как мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null
оракл вроде как на сях писаный, не?
8 июл 10, 13:54    [9071388]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

locky

как мне кажетсо, для разработчиков было бы проще оперерировать именно со
строками нулевой длины, нежели со строками, которые могут быть null
оракл вроде как на сях писаный, не?

Сие не зависит от языка, а исключительно от разработчиков. MS SQL скорее
всего тоже на сях написан (а уж Firebird - наверняка), что им не мешает
корректно различать NULL и пустую строку.

Posted via ActualForum NNTP Server 1.4

8 июл 10, 14:10    [9071575]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Dimitry Sibiryakov

locky

как мне кажетсо, для разработчиков было бы проще оперерировать именно со
строками нулевой длины, нежели со строками, которые могут быть null
оракл вроде как на сях писаный, не?

Сие не зависит от языка, а исключительно от разработчиков. MS SQL скорее
всего тоже на сях написан (а уж Firebird - наверняка), что им не мешает
корректно различать NULL и пустую строку.

Значит в команде разработчиков Оракла, видимо, человек, ответственный за реализацию строковых данных был несколько.. Инако? Альтернативно? Мыслящ.
8 июл 10, 14:17    [9071669]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67376
Блог
locky
про null bitmap уже написали

null bitmap mssql-я никак не связан с техническими удобствами разработчиков Oracle.

locky
как мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null

Я полагаю, что это далеко не факт (для примера можно, скажем, упомянуть о необходимости контролировать ограничение на длину varchar-переменных), и совершенно уверен, что представление об "оперировать", возникающее сейчас, кардинально отличается от того, что было в первых ораклах в семидесятых годах, когда не было ни PL/SQL, ни большей части возможностей SQL.
8 июл 10, 14:23    [9071746]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67376
Блог
locky
Значит в команде разработчиков Оракла, видимо, человек, ответственный за реализацию строковых данных был несколько.. Инако? Альтернативно? Мыслящ.

Вообще-то Oracle изначально был написан на ассемблере.
8 июл 10, 14:25    [9071760]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
какая хорошая философская темка )) И про FB и пустые строки. Я про пустые строки.

Совершенно очевидно, что Oracle сегодня, скажем урощённо, лучшая субд. И всё же. Совершенно очевидно, что считать пустую строку как NULL не правильно. Так же не правильно как и считать строку с пробелом тоже как NULL. NULL - значение не задано (возможно, потому что неизвестно). '' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL. В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно!

Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО. Есно идеальных систем всё проверяющих не существует, но к ним стремятся. А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои).

PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности? А чек-констреинты зачем?
8 июл 10, 14:41    [9071953]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67376
Блог
web_fox
И всё же. Совершенно очевидно, что считать пустую строку как NULL не правильно.

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

web_fox
'' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL.

А она у кого-то выдаёт null? Выбросьте бяку.

web_fox
В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно!

Особенно операция join on (a.id = b.id)

web_fox
Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО.

Безусловно. Далее, "хорошая среда разработки" - та, которая помогает разработчику легко и правильно решать актуальные задачи, "плохая" - та, в которой ему надо предпринимать кучу дополнительных действий для хорошего решения той же задачи.

web_fox
А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои).

Хорошая фраза.

web_fox
PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности?

Нормальные люди - проверяют. Точнее, нормальные люди trim()-ают строки на уровне фреймворка, благодаря чему "строки из пробелов" отсекаются проверкой на not null, что серверной, что клиентской.

web_fox
А чек-констреинты зачем?

Для реализации относительно сложных и нестандартных проверок, которые не реализуются более простыми средствами. Скажем, можно написать check (field is not null), но нормальные люди используют для этого not null в декларации поля.
8 июл 10, 15:06    [9072264]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
web_fox
Совершенно очевидно, что считать пустую строку как NULL не правильно. Так же не правильно как и считать строку с пробелом тоже как NULL.

Все же это не совсем удачное сравнение. Пробелы - не пустая строка, не претендует чтобы ее считать NULL. Ну, действительно отсутсвие значение похоже на пустую строку, потому что последняя тоже не имеет каког-либо значения. А пробелы мы просто не видим, но их таки можно нарисовать. Поэтому если второе не правильно, но из этого нельзя, скорее всего, вывести, что первое не правильно: отсутсвие и пустота так или иначе присущи обоим из первого, но не второго утвержденния.
Сам термин "правильно" означает соответсвовать каким-то правилам. Но о каких правитлах здесь речь? Скорее пока здесь можно вечти речь о более рациональном и не рациональном. По крайней мере, из того что здесь было ранее сказано.


web_fox

NULL - значение не задано (возможно, потому что неизвестно). '' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL.

Так она вролде и выдает
select ' 1' || '' f from dual;
, как впрочем и NULL.

select ' 1' || NULL f from dual;


web_fox

В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно!

Но разве не был прав Каперник когда пошел против очевидности (очевидно было что земля стоит на месте, а он сказал что крутится). Шуткэ.

Вот операции с NULL могут быть разными. Например, сравнение с NULL может возвращать НЕ известено что. В общем исключения совсем не очевидны: их и так полно.

web_fox

Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО. Есно идеальных систем всё проверяющих не существует, но к ним стремятся. А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои).

Он и может и вводит. Ну виноватых искать это как бы другое. Это пусть они там сами разираются как хотят. А то мы с Вами счас понапишем и бум сами во всем виноваты потом.

web_fox


PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности? А чек-констреинты зачем?

Не нравится пол дела. Не нравится, что не сразу понял, что это надо писать. Вот тока вчера в Аксцессе запрос, который много лет как использовался, вдруг выдал ноль записей на IS NULL, на = '' все записи таблы. О как блин.
8 июл 10, 15:17    [9072407]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
не то скопировал

SQL> 
SQL> select ' 1' || '' f from dual;
 
F
--
 1
SQL> select ' 1' || NULL f from dual;
 
F
--
 1
 
SQL> 
8 июл 10, 15:19    [9072444]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
MSSQL
select 'A'+''   --A
select 'A'+null --NULL
8 июл 10, 15:53    [9072866]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
FireBird
select 'A'||:P from rdb$database
:P = ''   --RESULT A
:P = NULL --RESULT NULL
8 июл 10, 16:00    [9072968]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
vadiminfo
не то скопировал

SQL> 
SQL> select ' 1' || '' f from dual;
 
F
--
 1
SQL> select ' 1' || NULL f from dual;
 
F
--
 1
 
SQL> 


Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1. Рациональное мышление говорит, что так не бывает. Говоря техническим жаргоном, - это "КОСТЫЛЬ" в прямом его проявлении.

А вот это верно:
PostgreSQL 8.4.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44), 32-bit

автор
SELECT '1 from dual' || NULL
----
NULL


Всё чётко, с точки зрения значения. Но. Так это явно ошибка в бизнес-логике. И должно быть исключение, чтобы программист перепроекторовал программу и сложение с <неизвестно чем> не применялось.
8 июл 10, 16:08    [9073063]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
А, как всенепременно известно, "костыль" рано или поздно "вылазит". И тут ничинается. Кто-то уславливается, что будем писать пробел, если "действительно пустая строка", кто-то два дефиса, кто-то по другому - как фантазия позволяет, у каждого свои "спец-символы".
Особенно это развито в веб-программировании с пустым значением в теге select. Так костыли начинают плодится и размножаться, потому, что если есть костыль в одном месте, нужно компенсировать его в другом - если NULL и '' одинаковые, то нужен ещё костыль - конкатенация не приводит к NULL(!). Любое исключение из правил порождает ещё пачку дополнительных исключений из правил.

"Костыль" сегодня не вылез - повезло, будем писать так и дальше. Например, в PHP костыли вылазят часто. В Oracle чуть реже, но это всё равно "костыль".
8 июл 10, 16:26    [9073274]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
web_fox

Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1.


дико это путать конкотенацию с арифметическими операциями.
конкатинировать пустую строку и не получать нулл в результе это удобно и логично. а вот придумывать идиотские предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам.
думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.
8 июл 10, 17:00    [9073694]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Yo.!
думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.


И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle...
8 июл 10, 17:12    [9073824]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67376
Блог
pkarklin
И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle...

Эта цитата присутствует в документации минимум 15 лет. Вполне вероятно, будет присутствовать и тогда, когда стандарт наконец перепишут в соответствии со здравым смыслом
8 июл 10, 17:15    [9073854]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
pkarklin

И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle...

точно не для меня, в отличие от большинства спорящих тут я оракловую документацию прочел
8 июл 10, 17:18    [9073872]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Yo.!

дико это путать конкотенацию с арифметическими операциями.

Не понял. Уточните, кто где что путает и причём тут я. Только содержательно, пожалуйста, чтобы чётко было понятно где такое произошло.

Yo.!

конкатинировать пустую строку и не получать нулл в результе это удобно и логично.

Это костыль, который понадобился, из-за совпадения пустой строки с NULL. Не путайте следствие и причину.

Yo.!

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

Заменять отсутствие адреса пустой строкой - плохое проектирование. Здесь согласен.
8 июл 10, 17:29    [9073967]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Yo.!
думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.


Костыль, который применяется в вебе, поможет ораклу, у которого такой же костыль. А что, логично, блин! 8-/ А действительно, пришло из гет-запроса NULL - что это, строка NULL или значение NULL? Логично, ничего не скажешь.
8 июл 10, 17:47    [9074111]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
web_fox

Не понял. Уточните, кто где что путает и причём тут я. Только содержательно, пожалуйста, чтобы чётко было понятно где такое произошло.

"Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1." - вот тут вы путаете арфметическую операцию сложения, которая нигде не даст единицу, с конкотинацией строк, работу которой в оракле вам расжевывали.

web_fox
Это костыль, который понадобился, из-за совпадения пустой строки с NULL. Не путайте следствие и причину.


путаете только вы, реально же для людей такое поведение не кажется логичным, поэтому вы не найдете в гуе варианта где можно было представить оба этих понятия. люди не поймут им так не удобно. отсюда и гора ошибок регулярно приходиться правит в мсскл, когда в письмах исчезают целые абзацы потому что очередной новичек забыл перед конкотенации проверить на нулл.
8 июл 10, 17:49    [9074129]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Yo.!
думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку
ну если не веба, то сельского хозяйства. и если не развитие, то хотя бы спад
Yo.!

и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.
или не будет, как уже случалось в истории. или не будет такой фишки
8 июл 10, 17:59    [9074180]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Yo.!
думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.
врядли - в MS SQL 4.2 тоже было как сейчас в оракле, но вовремя сумели перейти
отсюда и остался атавизм set ansi_null
8 июл 10, 18:15    [9074276]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 5 6 7 8 9 [10] 11 12 13 14 .. 17   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить