powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / NULL vs NOT NULL
80 сообщений из 80, показаны все 4 страниц
NULL vs NOT NULL
    #39988169
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу посоветоваться с уважаемыми форумчанами по поводу использование NULL в БД. Я всегда их (NULLы) использую и ничего, кроме головной боли они мне не предлагали. Но думал, со временим оценю их полезность и привыкну. Но сегодня опять столкнулся с проблемой, вызванной NULLами, полез в интернет и в общем то народ за использование NULLов. Но сегодня же послушал курс Эрика Липперта (Eric Lippert, очень известиный спец по с#) и вот, что он рассказал про NULL. Изобрел его некто Sir Tony Hoare, которого, по словам Эрика он лично знал. И вот знаменитая цитата (которая только что мне попалась) этого Tony Hoare -"I call it my billion-dollar mistake. It was the invetion of the NULL reference in 1965. This has led to innumerable errors, vulnerabilities and system crashes, which have probably caused a billion dollars of pain and damage in the last fourty years" - Мой примерный перевод - "Я называю это ошибкой на миллиард. Изобретение NULL в 1965. Это изобретение привело к бесчисленным ошибкам, уязвимостям и авариям систем, что вероятно стоило миллиард долларов боли и ущерба за последние 40 лет. " Далее Эрик говорит, что Тони сильно скромничает и что ущерб исчестляется 10-ми миллиардов.
Мой вопрос такой, скажите, многие ли не использует NULLы вообще, а если используют, то какие аргументв за. Понятно, что если в поле почти стоит NULL, то это означает что почты не нет, а она неизвестна. Но так это и так понятно, а пустое значение легче воспринимается, чем NULL. Или я что то не догоняю? После этой цитаты изобретателя сего чуда, я подумываю о том, чтобы отказаться от NULLов.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988177
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда знаешь, как работает то или иное средство (не только налл), то мысли об отказе от него часто отпадают сами собой
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988180
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram, а почему вы обратились к совету специалиста по С#, а не по базам данных?
Возвращаясь к теме хочется спросить - А какую головную боль они (NULLs) вами принесли?
Приведите пример.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988181
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(удалено)
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988182
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
Я всегда их (NULLы) использую и ничего, кроме головной боли они мне не предлагали.
Отказавшись - получите еще большую головную боль.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988183
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
Но сегодня опять столкнулся с проблемой, вызванной NULLами

Пример в студию
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988193
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПример в студию
Да там двумя словами не скажешь... еще разбираюсь....Пока не понял, в чем ошибка, но точно в путаннице пустых значений и наллов. Но разве я первый человек в мире, который столкнулся с проблемой из-за NULLов?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988210
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
... Или я что то не догоняю? ...

Бинго!
ты попал в самую точку.

Тот null, о котором с 2009го года печалится сэр Тони Хоар, изобретатель быстрой сортировки
(изобрел в СССР, пока был докторантом в МГУ у Колмогорова),
соавтор идей структурного программирования,
изобретатель "логики Хоара", используемой для доказательства правильности работы программ,
автор одной из формализаций работы параллельных взаимодействующих процессов,
обладатель премии Тьюринга 1980 и премии Computer Pioneer ("Пионер компьютерных вычислений" ) 1990 года и многая-многая прочая,
никакого отношения к тому Null, об отказе от которого вы сейчас размышляете, не имеет .

Стыдно быть настолько невпопад неграмотным .

Проклятиями интересующего вас Null-а профессионально занимается совершенно другой человек.
Его зовут Кристофер Дейт (Christopher J. Date).
Бывший сотрудник IBM и соратник Кодда, ныне маргинальный независимый теоретик в области баз данных, проклинающий Null и не признающий за
(настоящую) реляционную любую систему, его допускающую.

Прежде чем "задумываться" о чём-либо, неплохо было бы установить - о чём точно вы думаете.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988222
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,

null в базах данных это свойство физического мира "нет данных", т.е. не "0" не "1", а именно "отсутствие информации"

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

да, можно от него отказаться (тот же 1с), но ИМХО это больший геммор, чем его использование
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988224
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПрежде чем "задумываться" о чём-либо, неплохо было бы установить - о чём точно вы думаете
Я думаю о цлесеобразности применения NULLов в БД, это точно то, о чем я думаю. Вот оказывается и NULLы бываю разные. Ведь, как я понял, и Christopher J. Date не большой полконник NULLов... Я просто хотел услышать мнения людей на эту тему - примерно такие - "Я без NULLов не представляю, как бы я жил, они мне очень помогают в работе " или "Везде проставляю дефолтные значения, чтобы не связываться с NULLами"
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988227
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторnull в базах данных это свойство физического мира "нет данных", т.е. не "0" не "1", а именно "отсутствие информации" Спасибо, StarikNavy, вы мне открыли глаза на мир....
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988228
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,

Нет ничего проще, чем почитать первоисточник.
Теперь ты знаешь, что читать надо Дейта.

Ознакомься с его аргументацией прежде чем её обсуждать.
А то ты рискуешь так и остаться со "знанием" о том, что Null - это "свойство физического мира".

Путём присыпания бессмыслицы новой бессмыслицей точки зрения не сформируешь.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988230
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСпасибо, StarikNavy, вы мне открыли глаза на мир
Если, что - это сарказм...
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988239
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavy
да, можно от него отказаться (тот же 1с), но ИМХО это больший геммор, чем его использование


В чем же тут трудности? У себя в хранилищах я стараюсь не использовать NULL, просто использую элемент с id=0 и значением "пусто". Это сразу дает выгоду в том, что у разработчиков меньше ошибок типа "ааа, я не учел в коде, где происходит сравнение, что там может быть null..."
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988244
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
StarikNavy
да, можно от него отказаться (тот же 1с), но ИМХО это больший геммор, чем его использование


В чем же тут трудности? У себя в хранилищах я стараюсь не использовать NULL, просто использую элемент с id=0 и значением "пусто". Это сразу дает выгоду в том, что у разработчиков меньше ошибок типа "ааа, я не учел в коде, где происходит сравнение, что там может быть null..."
да, есть люди, которые даже пишут
Код: sql
1.
where isnull(id, 0) > 0
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988275
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, кто-то за выходные заскучал и он решил начать неделю с холивара "старые песни". Хоть бы уж кто-нибудь что-то новое придумал :))
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988277
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

А как поступаете, если NULL приходит в атрибутах сущностей, выступающих мерами (суммы, количества, дата-время)?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988282
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
подумываю о том, чтобы отказаться от NULLов.

Как это, даже интересно. "Отказаться" от нуллов можно только тщательно их обрабатывая во всех местах, где они могут появиться. Это не "отказаться", а "учитывать".
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988287
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza
noram
подумываю о том, чтобы отказаться от NULLов.

Как это, даже интересно. "Отказаться" от нуллов можно только тщательно их обрабатывая во всех местах, где они могут появиться. Это не "отказаться", а "учитывать".


это просто как дважды три:

Отказаться, это именно отказаться , а не "учитывать".

Путем взятия на себя обязательства всегда проектировать разложение данных не менее, чем в 6-ю нормальную форму,
с одновременным тотальным отказом от любых вариантов внешнего (outer) соединения,
как зловредного процесса, порождающего Null-ы
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988291
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Критик,

А как поступаете, если NULL приходит в атрибутах сущностей, выступающих мерами (суммы, количества, дата-время)?


Для даты ставится 1900-01-01.
Остальные приведенные варианты довольно редки, в этом случае просто выясняется, что это значит в первичной системе и принимается решение: поставить NULL/поставить 0/вообще не грузить такие данные в хранилище/загрузить только в stage-слой и отправить автописьмо ответственным лицам.

Я не за абсолютное отсутствие NULL, а за (по возможности) избегание его использования, особенно в поля, по которым идут джойны.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988299
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
env
Критик,

А как поступаете, если NULL приходит в атрибутах сущностей, выступающих мерами (суммы, количества, дата-время)?


Для даты ставится 1900-01-01.
...

Само по себе это не решает проблемы правильной работы ни текущего агрегатного Min,
ни агрегатного Max для базы, не содержащей Null-ов.

Пусть Вы даёте запрос
Код: plsql
1.
2.
3.
4.
Select Min(T.date_field) 
From some_table T
Where T.search_field = 'несуществующее в базе значение'
;



Для базы, не содержащей Null такой агрегатный запрос вернет строку, со значением именно Null, вместо, например 9999-12-31,
и Max() тоже вернет Null, вместо, например, 1900-01-01
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988307
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

несуществующее значение <> неизвестное значение

В любом случае, таких запросов будет гораздо меньше, чем всяких сравнений-джойнов по полям, где будут оставлены NULL.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988308
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
Для даты ставится 1900-01-01.

А почему, например, не 1973-09-08? Мне, например, так больше нравится.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988309
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
booby,

несуществующее значение <> неизвестное значение

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


не важно, меньше их или больше.

Ты либо "отказываешься" от Null-ов, либо "учитываешь" их.
Это две разных математики, просто потому что две разных логики.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988347
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,

Код: sql
1.
 я подумываю о том, чтобы отказаться от NULLов



Здесь надо понимать баланс математика против физики. Математика говорит - нормализуй до потери NULL, а физика говорит, что дробление данных имеет риск увеличить количество отношений до такого. с которым станет неудобно работать или будет получен удар по производительности СУБД.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988348
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Ты либо "отказываешься" от Null-ов, либо "учитываешь" их.

Прикол в том, что все эти его выдуманные из пальца "умолчательные значения" тоже учитывать придется (как, впрочем, ты уже выше указал), только вот нулл он всегда и везде нулл и "учитывается" он стандартным и однообразным способом, а у него повсюду будет черти что и учитываться должно черти как.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988353
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

не совсем так, есть малый подкол.

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

Они еще хуже единого Null в смысле размножения сущностей.
Настоящий отказ идет именно путем внедрения "нормализации до потери нуллов".

То, что я показал, в действительности, содержит в себе некое настояние всё-таки на чтении "первоисточников".

Дейт настаивает на том, что независимо от присутствия или отсутствия Null-значений в базовых
таблицах,
агрегатные Min/Max в SQL, с его точки зрения принципиально спроектированы неверно,
по его мысли они обязаны возвращать диапазонный максимум для Min и
диапазонный минимум для Max.

В этом есть определенные резоны.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988392
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С позиции требования о поддержании достоверности данных "замены" NULL на материализованные значения недопустимы.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988468
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
Я всегда их (NULLы) использую и ничего, кроме головной боли они мне не предлагали

Просто не надо использовать null там, где они не нужны. У некоторых проектировщиков почему-то все поля nullable, вместе с id, потому что им лень дописать not null при создании таблицы или галочку в своё иде поставить.
noram
а если используют, то какие аргументв за.

Данные могут быть, а могут не быть. Какие еще аргументы нужны? Чем ты будешь обозначать, что данных нет? Нулём, -1? И в чём разница?
noram
Но так это и так понятно, а пустое значение легче воспринимается, чем NULL.

Пустое значение - это костыль. Тебе так для всего придётся придумывать какие-то свои пустые значение, которые будут понятны только тебе. Можно вообще сделать битовые флаги типа null/нет/не знаю/затрудняюсь ответить и засунуть их в инт для каждого поля.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988486
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дп, crutchmuster, спасибо. В принципе со всем согласен. Правда не понимаю, как можно создать id и не проставить NOT NULL.
Мне NULL не нравится во сновои из-за путаницы пустого значения и неизвесного значения (null). С другой стороны, как тут правильно отметили, слишком сильная нормализация таблиц тоже не выход...
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988487
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
путаницы пустого значения и неизвесного значения (null)

Ну вот, теоретик баз данных.
Ты сам то способен определить различие между "пустого" и "неизвесного"?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988514
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
У некоторых проектировщиков почему-то все поля nullable, вместе с id, потому что им лень дописать not null при создании таблицы или галочку в своё иде поставить.

Если некоторые идиоты молотком по голове себе стучат, то это не значит, что молоток вообще не следует использовать :))
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988547
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
noram
путаницы пустого значения и неизвесного значения (null)

Ну вот, теоретик баз данных.
Ты сам то способен определить различие между "пустого" и "неизвесного"?

noram, приведу простой пример.

Нужно вывести баланс поступлений и списаний по некоторым счетам.
Так вот - 0 в этом случае означает, что дебет и кредит баланса равны.
Сколько пришло, столько и ушло.

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

Так понятнее?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988550
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008
aleks222
пропущено...

Ну вот, теоретик баз данных.
Ты сам то способен определить различие между "пустого" и "неизвесного"?

noram, приведу простой пример.

Нужно вывести баланс поступлений и списаний по некоторым счетам.
Так вот - 0 в этом случае означает, что дебет и кредит баланса равны.
Сколько пришло, столько и ушло.

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

Так понятнее?


Батенька, разве ж 0 - это "пустое"?
Это полное смысла значение.
Тема не раскрыта.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988558
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222, вообще-то я не о том писал.
Получилось, что я привожу пример пустого и неизвестного...
Пример о другом.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988565
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,
Вы слишком много говорите про Хоара, а я бы на Вашем месте обратился к отцу основателю реляционных баз данных, Кодду.

Эдгар Франк «Тед» Кодд (англ. Edgar Frank Codd; 23 августа 1923 — 18 апреля 2003) — британский учёный, работы которого заложили основы теории реляционных баз данных.

Работая в компании IBM, он создал реляционную модель данных. Он также внёс существенный вклад в другие области информатики.

12 правил Кодда
Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску
12 правил Кодда (англ. Codd’s 12 rules) — 13 правил (в данном случае исчисление начинается с 0), которым должна удовлетворять каждая система управления реляционными базами данных[1].

Предложены английским математиком Эдгаром Коддом (Edgar Codd) в 1985 году в статьях в журнале ComputerWorld[2][3].

В действительности правила столь строги, что все популярные так называемые «реляционные» СУБД не соответствуют многим критериям.

Правила
Правило 0: Основное правило (Foundation Rule):

Система, которая рекламируется или позиционируется как реляционная система управления базами данных, должна быть способна управлять базами данных, используя исключительно свои реляционные возможности.
Правило 1: Информационное правило (The Information Rule):

Вся информация в реляционной базе данных на логическом уровне должна быть явно представлена единственным способом: значениями в таблицах.
Правило 2: Гарантированный доступ к данным (Guaranteed Access Rule):

В реляционной базе данных каждое отдельное (атомарное) значение данных должно быть логически доступно с помощью комбинации имени таблицы, значения первичного ключа и имени столбца.
Правило 3: Систематическая поддержка отсутствующих значений (Systematic Treatment of Null Values):

Неизвестные, или отсутствующие значения NULL, отличные от любого известного значения, должны поддерживаться для всех типов данных при выполнении любых операций. Например, для числовых данных неизвестные значения не должны рассматриваться как нули, а для символьных данных — как пустые строки.
Правило 4: Доступ к словарю данных в терминах реляционной модели (Active On-Line Catalog Based on the Relational Model):

Словарь данных должен сохраняться в форме реляционных таблиц, и СУБД должна поддерживать доступ к нему при помощи стандартных языковых средств, тех же самых, которые используются для работы с реляционными таблицами, содержащими пользовательские данные.
Правило 5: Полнота подмножества языка (Comprehensive Data Sublanguage Rule):

Система управления реляционными базами данных должна поддерживать хотя бы один реляционный язык, который
(а) имеет линейный синтаксис,
(б) может использоваться как интерактивно, так и в прикладных программах,
(в) поддерживает операции определения данных, определения представлений, манипулирования данными (интерактивные и программные), ограничители целостности, управления доступом и операции управления транзакциями (begin, commit и rollback).
Правило 6: Возможность изменения представлений (View Updating Rule):

Каждое представление должно поддерживать все операции манипулирования данными, которые поддерживают реляционные таблицы: операции выборки, вставки, изменения и удаления данных.
Правило 7: Наличие высокоуровневых операций управления данными (High-Level Insert, Update, and Delete):

Операции вставки, изменения и удаления данных должны поддерживаться не только по отношению к одной строке реляционной таблицы, но и по отношению к любому множеству строк.
Правило 8: Физическая независимость данных (Physical Data Independence):

Приложения не должны зависеть от используемых способов хранения данных на носителях, от аппаратного обеспечения компьютеров, на которых находится реляционная база данных.
Правило 9: Логическая независимость данных (Logical Data Independence):

Представление данных в приложении не должно зависеть от структуры реляционных таблиц. Если в процессе нормализации одна реляционная таблица разделяется на две, представление должно обеспечить объединение этих данных, чтобы изменение структуры реляционных таблиц не сказывалось на работе приложений.
Правило 10: Независимость контроля целостности (Integrity Independence):

Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных.
Правило 11: Независимость от расположения (Distribution Independence):

База данных может быть распределённой, может находиться на нескольких компьютерах, и это не должно оказывать влияния на приложения. Перенос базы данных на другой компьютер не должен оказывать влияния на приложения.
Правило 12: Согласование языковых уровней (The Nonsubversion Rule):

Если используется низкоуровневый язык доступа к данным, он не должен игнорировать правила безопасности и правила целостности, которые поддерживаются языком более высокого уровня.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988567
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Правило 10: Независимость контроля целостности (Integrity Independence):

Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных.
когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат!
буду искренне рад ))
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988582
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат!

Да! 35 лет прошло и до сих про приходится делать костыли.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988633
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНужно вывести баланс поступлений и списаний по некоторым счетам.
Так вот - 0 в этом случае означает, что дебет и кредит баланса равны.
Сколько пришло, столько и ушло.

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

Так понятнее?
Да, SQL2008, так понятнее. Спасибо, очень наглядный пример.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988639
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
авторНужно вывести баланс поступлений и списаний по некоторым счетам.
Так вот - 0 в этом случае означает, что дебет и кредит баланса равны.
Сколько пришло, столько и ушло.

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

Так понятнее?

Да, SQL2008, так понятнее. Спасибо, очень наглядный пример.как раз кривой пример

Наллы и агрегаты - это отдельная песня
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988656
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
a_voronin
Правило 10: Независимость контроля целостности (Integrity Independence):

Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных.
когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат!
буду искренне рад ))


Не используйте интервалы - и минуют вас печали и геморрои.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988670
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
andreymx
пропущено...
когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат!
буду искренне рад ))


Не используйте интервалы - и минуют вас печали и геморрои.
заказчик упорно считает, что в период с 01-03-2020 по 13-07-2020 по заготовке номер 1234 должна быть одна цена, а с 14-07 по 14-08 другая. И других цен в этот период быть не должнл
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988673
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
aleks222
пропущено...


Не используйте интервалы - и минуют вас печали и геморрои.
заказчик упорно считает, что в период с 01-03-2020 по 13-07-2020 по заготовке номер 1234 должна быть одна цена, а с 14-07 по 14-08 другая. И других цен в этот период быть не должнл

Заказчик фсегда прав.
Но разработчик должен быть умным.
Даты НАЧАЛА действия цены абсолютно достаточно... и НИКАКИХ перекрытий даже возникнуть не может.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988679
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,
авторкак раз кривой пример
Приведите прямой пример. Мне пример SQL2008 показался убедительным, и не важно, что он в отдельной песне, важно, что он показывает необходимость наличия налов.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988687
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram
andreymx,
авторкак раз кривой пример

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

давай пример!
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988841
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Не используйте интервалы - и минуют вас печали и геморрои.

Но они нужны. Часто любят всё пересчитывать задним числом.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988853
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Не используйте интервалы - и минуют вас печали и геморрои.

Но они нужны. Часто любят всё пересчитывать задним числом.


Увы, ты так ничего и не понял.
Надо переквалифицироваться в управдомы.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988856
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Надо переквалифицироваться в управдомы.

Зачем переквалифицироваться? Я и так управдом на 0,25 ставки.
aleks222
Увы, ты так ничего и не понял.

Что я должен был понять? Что не надо было идти работать в РИЦ?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988860
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Надо переквалифицироваться в управдомы.

Зачем переквалифицироваться? Я и так управдом на 0,25 ставки.
aleks222
Увы, ты так ничего и не понял.

Что я должен был понять? Что не надо было идти работать в РИЦ?


Начало действия параметра однозначно определяет диапазон.
Поэтому скулеж: "пересечение диапазонов" - удел управдомов.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988867
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
a_voronin
Правило 10: Независимость контроля целостности (Integrity Independence):

Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных.
когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат!
буду искренне рад ))


На вертике есть конструкции, ориентированные на интервалы. INTERPOLATE PREVIOUS VALUE
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988875
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
ачало действия параметра однозначно определяет диапазон.


1 : 01.05.2020 - 04.05.2020
2 : 07.05.2020 - 11.05.2020
3 : 23.05.2020 - бессрочно
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988901
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наличие конца диапазона позволяет контролировать правильность данных. Хотя и усложняет процесс обновления данных.

По теме хочу напомнить varchar2 Oracle, ColumnName_IsNull SSIS и nullable типы C# - другими словами, никакой единой и общепризнанной схемы работы с пустыми значениями пока не существует.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988976
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
ачало действия параметра однозначно определяет диапазон.


1 : 01.05.2020 - 04.05.2020
2 : 07.05.2020 - 11.05.2020
3 : 23.05.2020 - бессрочно


1: 01.05.2020
null: 05.05.2020
2 : 07.05.2020
null: 12.05.2020
3 : 23.05.2020

Учитесь, шура.
Заодно полезность null осознаете.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988983
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Учитесь, шура.

Тому, как просрать на ровном месте ключ?

Или нажить себе еще проблем с предыдущими/следующими записями??

Давайте задачки:
1.Есть дата, как проверить в какой диапазон она попадает?
2.Есть две даты. Надо найти все ид, которые попадают в создаваемый ими отрезок времени.
3.Как узнать сроки действия 1,2 и 3.

Только без субд-специфичного изврата.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988984
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Учитесь, шура.

Тому, как просрать на ровном месте ключ?

Или нажить себе еще проблем с предыдущими/следующими записями??

Давайте задачки:
1.Есть дата, как проверить в какой диапазон она попадает?
2.Есть две даты. Надо найти все ид, которые попадают в создаваемый ими отрезок времени.
3.Как узнать сроки действия 1,2 и 3.

Только без субд-специфичного изврата.

Обучаю. Дорого.
Поэтому только 1
Код: sql
1.
outer apply ( select top(1) * from Table where [datetime] < @datetime order by [datetime] desc )
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988988
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Обучаю. Дорого.

То есть не умею.

Запросы тупейшие в случае когда есть дата начала, дата конца.

aleks222

Код: sql
1.
outer apply ( select top(1) * from Table where [datetime] < @datetime order by [datetime] desc )


crutchmaster
без субд-специфичного изврата.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988989
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Други! Здесь форум по MSSQL, поэтому со специфичным БД-извратом.
Будете устраивать холивары -- изгоню в "Сравнение СУДБ" или "Проектирование"

И да, ведите себя дружно.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988993
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Обучаю. Дорого.

То есть не умею.

Запросы тупейшие в случае когда есть дата начала, дата конца.

aleks222

Код: sql
1.
outer apply ( select top(1) * from Table where [datetime] < @datetime order by [datetime] desc )


crutchmaster
без субд-специфичного изврата.


1. Чем твой запрос лучше или быстрее этого?
2. Откуда мне знать что ты понимаешь под "без субд-специфичного изврата"? Тебя научить писать коррелированные запросы для MS SQL 2000?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988995
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Чем твой запрос лучше или быстрее этого?

Тем, что он не делает join там, где он не нужен?

aleks222
Откуда мне знать что ты понимаешь под "без субд-специфичного изврата"?

То есть максимально переносимый запрос на другие субд запрос.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39988999
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Я не холивара ради, может оно правда лучше и сейчас aleks222 меня задавит аргументами. Просто речь про сам подход хранения интервалов и от особенностей разных субд хотелось бы абстрагироваться. Так-то я вообще могу вытащить выборку куда-нибудь и там танцевать с ней вприсядку.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989000
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Чем твой запрос лучше или быстрее этого?

Тем, что он не делает join там, где он не нужен?

aleks222
Откуда мне знать что ты понимаешь под "без субд-специфичного изврата"?

То есть максимально переносимый запрос на другие субд запрос.


Код: sql
1.
left outer join Table on [datetime] = ( select top(1) [datetime] from Table where [datetime] < @datetime order by [datetime] desc )
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989003
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Чем твой запрос лучше или быстрее этого?

Тем, что он не делает join там, где он не нужен?


Смешно.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989004
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Код: sql
1.
left outer join Table on [datetime] = ( select top(1) [datetime] from Table where [datetime] < @datetime order by [datetime] desc )



Ладно, теперь есть еще одно свойство и параметров больше одного.

entityId parId parValue dt1 dt255 1 1 01.01.2020 05.01.202055 1 2 07.01.2020 12.01.202055 2 1 01.01.2020 08.01.202055 2 2 10.01.2020 01.01.2021
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989006
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Код: sql
1.
left outer join Table on [datetime] = ( select top(1) [datetime] from Table where [datetime] < @datetime order by [datetime] desc )



Ладно, теперь есть еще одно свойство и параметров больше одного.

entityId parId parValue dt1 dt255 1 1 01.01.2020 05.01.202055 1 2 07.01.2020 12.01.202055 2 1 01.01.2020 08.01.202055 2 2 10.01.2020 01.01.2021


Это ничего не меняет.

ID entityId parId parValue dt1 dt21 55 1 1 01.01.2020 05.01.20202 55 1 2 07.01.2020 12.01.20203 55 2 1 01.01.2020 08.01.20204 55 2 2 10.01.2020 01.01.2021
и фсе.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989011
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Это ничего не меняет.

Ну я вижу, что ты ничего не поменял. И что? Фсё?

Надо выбрать все параметры, например у entityId 55 актуальные на дату. Как это будет выглядеть, когда dt1, dt2 нет? Два запроса?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989015
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster, aleks222,

Лично мое мнение:
ваш спор кажется не очень умным оффтопиком.
есть три способа хранения данных: за каждую дату, за начало периода и за период. У каждого способа есть свои достоинства и недостатки. Но ни один из способов не является принципиально лучшим или худшим.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989025
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
crutchmaster, aleks222,

Лично мое мнение:
ваш спор кажется не очень умным оффтопиком.
есть три способа хранения данных: за каждую дату, за начало периода и за период. У каждого способа есть свои достоинства и недостатки. Но ни один из способов не является принципиально лучшим или худшим.


Страдалец жаловался на необходимость проверки пересечения периодов.
Хранение только даты начала ликвидирует эту проблему.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989028
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
aleks222
Это ничего не меняет.

Ну я вижу, что ты ничего не поменял. И что? Фсё?

Надо выбрать все параметры, например у entityId 55 актуальные на дату. Как это будет выглядеть, когда dt1, dt2 нет? Два запроса?

Код: sql
1.
2.
3.
4.
5.
6.
select * 
  from Table as t 
  where  entityId = 55 
             and id = ( select top(1) id from Table as x where [datetime] < @datetime 
                                                                            and x.entityId = t.entityId
                                                                            and x.parId = t.parId order by [datetime] desc )
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989033
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Страдалец жаловался на необходимость проверки пересечения периодов.
Хранение только даты начала ликвидирует эту проблему.

Ликвидирует эту проблему посредством отказа от проверки (проверка данных по определению требует их избыточности).
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989034
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
aleks222
Страдалец жаловался на необходимость проверки пересечения периодов.
Хранение только даты начала ликвидирует эту проблему.

Ликвидирует эту проблему посредством отказа от проверки (проверка данных по определению требует их избыточности).

Хватит пороть чушь. Ей больно.

ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989087
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок.

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

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

Кроме очистки данных, конечная дата может ускорять и облегчать читающие запросы, избавляя их от этапа сортировки.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989089
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
aleks222
ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок.

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

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

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


Если бы у бабушки был х... - она была бы дедушкой.

Не стоит мешать в кучу проблемы ввода данных и хранение данных.

ЗЫ. Ну а сортировка... так индексы придумали давно. Зачем сортировать?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989092
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема какая-то из пустого в порожнее.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989096
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Если бы у бабушки был х... - она была бы дедушкой.

Не стоит мешать в кучу проблемы ввода данных и хранение данных.

Чтобы разделять ввод и хранение данных, надо заниматься фронтендом. На уровне СУБД нет никакого отдельного ввода данных. Есть только введенные и хранящиеся данные разной чистоты.

aleks222
ЗЫ. Ну а сортировка... так индексы придумали давно. Зачем сортировать?

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

P.S. Индекс по начальной дате заведомо не поможет, если интересует продолжительность диапазона.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989189
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Хранение только даты начала ликвидирует эту проблему.

И добавляет пачку других.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989190
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Код: sql
1.
2.
3.
4.
5.
6.
select * 
  from Table as t 
  where  entityId = 55 
             and id = ( select top(1) id from Table as x where [datetime] < @datetime 
                                                                            and x.entityId = t.entityId
                                                                            and x.parId = t.parId order by [datetime] desc )


Отличный запрос.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989191
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок.

Ну или делай две записи вместо одной.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989192
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
Но ни один из способов не является принципиально лучшим или худшим.

Вот это надо доказать и обосновать.
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989193
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
На уровне СУБД нет никакого отдельного ввода данных.

А триггеры на insert/update? А проверка уникальности ключа?
...
Рейтинг: 0 / 0
NULL vs NOT NULL
    #39989194
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Тема какая-то из пустого в порожнее.

Из пустого в порожнее - это про null и его суррогаты. Про интервалы - это нормальная тема, хоть мы и отошли от изначальной. Надо бы тред разделить по-доброму.
...
Рейтинг: 0 / 0
80 сообщений из 80, показаны все 4 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / NULL vs NOT NULL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]