|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Хочу посоветоваться с уважаемыми форумчанами по поводу использование 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ов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 13:40 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
когда знаешь, как работает то или иное средство (не только налл), то мысли об отказе от него часто отпадают сами собой ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 13:56 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram, а почему вы обратились к совету специалиста по С#, а не по базам данных? Возвращаясь к теме хочется спросить - А какую головную боль они (NULLs) вами принесли? Приведите пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:00 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram Я всегда их (NULLы) использую и ничего, кроме головной боли они мне не предлагали. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:02 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram Но сегодня опять столкнулся с проблемой, вызванной NULLами Пример в студию ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:05 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
авторПример в студию Да там двумя словами не скажешь... еще разбираюсь....Пока не понял, в чем ошибка, но точно в путаннице пустых значений и наллов. Но разве я первый человек в мире, который столкнулся с проблемой из-за NULLов? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:10 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram ... Или я что то не догоняю? ... Бинго! ты попал в самую точку. Тот null, о котором с 2009го года печалится сэр Тони Хоар, изобретатель быстрой сортировки (изобрел в СССР, пока был докторантом в МГУ у Колмогорова), соавтор идей структурного программирования, изобретатель "логики Хоара", используемой для доказательства правильности работы программ, автор одной из формализаций работы параллельных взаимодействующих процессов, обладатель премии Тьюринга 1980 и премии Computer Pioneer ("Пионер компьютерных вычислений" ) 1990 года и многая-многая прочая, никакого отношения к тому Null, об отказе от которого вы сейчас размышляете, не имеет . Стыдно быть настолько невпопад неграмотным . Проклятиями интересующего вас Null-а профессионально занимается совершенно другой человек. Его зовут Кристофер Дейт (Christopher J. Date). Бывший сотрудник IBM и соратник Кодда, ныне маргинальный независимый теоретик в области баз данных, проклинающий Null и не признающий за (настоящую) реляционную любую систему, его допускающую. Прежде чем "задумываться" о чём-либо, неплохо было бы установить - о чём точно вы думаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:28 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram, null в базах данных это свойство физического мира "нет данных", т.е. не "0" не "1", а именно "отсутствие информации" реализация данного свойствах в БД, вызывает проблемы только у тех кто не изучил как оно реализовано да, можно от него отказаться (тот же 1с), но ИМХО это больший геммор, чем его использование ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:45 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
авторПрежде чем "задумываться" о чём-либо, неплохо было бы установить - о чём точно вы думаете Я думаю о цлесеобразности применения NULLов в БД, это точно то, о чем я думаю. Вот оказывается и NULLы бываю разные. Ведь, как я понял, и Christopher J. Date не большой полконник NULLов... Я просто хотел услышать мнения людей на эту тему - примерно такие - "Я без NULLов не представляю, как бы я жил, они мне очень помогают в работе " или "Везде проставляю дефолтные значения, чтобы не связываться с NULLами" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:46 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
авторnull в базах данных это свойство физического мира "нет данных", т.е. не "0" не "1", а именно "отсутствие информации" Спасибо, StarikNavy, вы мне открыли глаза на мир.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:50 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram, Нет ничего проще, чем почитать первоисточник. Теперь ты знаешь, что читать надо Дейта. Ознакомься с его аргументацией прежде чем её обсуждать. А то ты рискуешь так и остаться со "знанием" о том, что Null - это "свойство физического мира". Путём присыпания бессмыслицы новой бессмыслицей точки зрения не сформируешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:51 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
авторСпасибо, StarikNavy, вы мне открыли глаза на мир Если, что - это сарказм... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 14:53 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
StarikNavy да, можно от него отказаться (тот же 1с), но ИМХО это больший геммор, чем его использование В чем же тут трудности? У себя в хранилищах я стараюсь не использовать NULL, просто использую элемент с id=0 и значением "пусто". Это сразу дает выгоду в том, что у разработчиков меньше ошибок типа "ааа, я не учел в коде, где происходит сравнение, что там может быть null..." ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 15:04 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Критик StarikNavy да, можно от него отказаться (тот же 1с), но ИМХО это больший геммор, чем его использование В чем же тут трудности? У себя в хранилищах я стараюсь не использовать NULL, просто использую элемент с id=0 и значением "пусто". Это сразу дает выгоду в том, что у разработчиков меньше ошибок типа "ааа, я не учел в коде, где происходит сравнение, что там может быть null..." Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 15:14 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Похоже, кто-то за выходные заскучал и он решил начать неделю с холивара "старые песни". Хоть бы уж кто-нибудь что-то новое придумал :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 16:08 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Критик, А как поступаете, если NULL приходит в атрибутах сущностей, выступающих мерами (суммы, количества, дата-время)? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 16:11 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram подумываю о том, чтобы отказаться от NULLов. Как это, даже интересно. "Отказаться" от нуллов можно только тщательно их обрабатывая во всех местах, где они могут появиться. Это не "отказаться", а "учитывать". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 16:31 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
PizzaPizza noram подумываю о том, чтобы отказаться от NULLов. Как это, даже интересно. "Отказаться" от нуллов можно только тщательно их обрабатывая во всех местах, где они могут появиться. Это не "отказаться", а "учитывать". это просто как дважды три: Отказаться, это именно отказаться , а не "учитывать". Путем взятия на себя обязательства всегда проектировать разложение данных не менее, чем в 6-ю нормальную форму, с одновременным тотальным отказом от любых вариантов внешнего (outer) соединения, как зловредного процесса, порождающего Null-ы ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 16:43 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
env Критик, А как поступаете, если NULL приходит в атрибутах сущностей, выступающих мерами (суммы, количества, дата-время)? Для даты ставится 1900-01-01. Остальные приведенные варианты довольно редки, в этом случае просто выясняется, что это значит в первичной системе и принимается решение: поставить NULL/поставить 0/вообще не грузить такие данные в хранилище/загрузить только в stage-слой и отправить автописьмо ответственным лицам. Я не за абсолютное отсутствие NULL, а за (по возможности) избегание его использования, особенно в поля, по которым идут джойны. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 16:48 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Критик env Критик, А как поступаете, если NULL приходит в атрибутах сущностей, выступающих мерами (суммы, количества, дата-время)? Для даты ставится 1900-01-01. ... Само по себе это не решает проблемы правильной работы ни текущего агрегатного Min, ни агрегатного Max для базы, не содержащей Null-ов. Пусть Вы даёте запрос Код: plsql 1. 2. 3. 4.
Для базы, не содержащей Null такой агрегатный запрос вернет строку, со значением именно Null, вместо, например 9999-12-31, и Max() тоже вернет Null, вместо, например, 1900-01-01 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 16:59 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
booby, несуществующее значение <> неизвестное значение В любом случае, таких запросов будет гораздо меньше, чем всяких сравнений-джойнов по полям, где будут оставлены NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 17:08 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Критик Для даты ставится 1900-01-01. А почему, например, не 1973-09-08? Мне, например, так больше нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 17:10 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Критик booby, несуществующее значение <> неизвестное значение В любом случае, таких запросов будет гораздо меньше, чем всяких сравнений-джойнов по полям, где будут оставлены NULL. не важно, меньше их или больше. Ты либо "отказываешься" от Null-ов, либо "учитываешь" их. Это две разных математики, просто потому что две разных логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 17:11 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram, Код: sql 1.
Здесь надо понимать баланс математика против физики. Математика говорит - нормализуй до потери NULL, а физика говорит, что дробление данных имеет риск увеличить количество отношений до такого. с которым станет неудобно работать или будет получен удар по производительности СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 18:03 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
booby Ты либо "отказываешься" от Null-ов, либо "учитываешь" их. Прикол в том, что все эти его выдуманные из пальца "умолчательные значения" тоже учитывать придется (как, впрочем, ты уже выше указал), только вот нулл он всегда и везде нулл и "учитывается" он стандартным и однообразным способом, а у него повсюду будет черти что и учитываться должно черти как. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 18:06 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
fkthat, не совсем так, есть малый подкол. Там, где разумно проклинают Null, обязательно вместе с ним проклинают и "умолчательные типизированные" заменители Null. Они еще хуже единого Null в смысле размножения сущностей. Настоящий отказ идет именно путем внедрения "нормализации до потери нуллов". То, что я показал, в действительности, содержит в себе некое настояние всё-таки на чтении "первоисточников". Дейт настаивает на том, что независимо от присутствия или отсутствия Null-значений в базовых таблицах, агрегатные Min/Max в SQL, с его точки зрения принципиально спроектированы неверно, по его мысли они обязаны возвращать диапазонный максимум для Min и диапазонный минимум для Max. В этом есть определенные резоны. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 18:21 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
С позиции требования о поддержании достоверности данных "замены" NULL на материализованные значения недопустимы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 20:12 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram Я всегда их (NULLы) использую и ничего, кроме головной боли они мне не предлагали Просто не надо использовать null там, где они не нужны. У некоторых проектировщиков почему-то все поля nullable, вместе с id, потому что им лень дописать not null при создании таблицы или галочку в своё иде поставить. noram а если используют, то какие аргументв за. Данные могут быть, а могут не быть. Какие еще аргументы нужны? Чем ты будешь обозначать, что данных нет? Нулём, -1? И в чём разница? noram Но так это и так понятно, а пустое значение легче воспринимается, чем NULL. Пустое значение - это костыль. Тебе так для всего придётся придумывать какие-то свои пустые значение, которые будут понятны только тебе. Можно вообще сделать битовые флаги типа null/нет/не знаю/затрудняюсь ответить и засунуть их в инт для каждого поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 06:19 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Дп, crutchmuster, спасибо. В принципе со всем согласен. Правда не понимаю, как можно создать id и не проставить NOT NULL. Мне NULL не нравится во сновои из-за путаницы пустого значения и неизвесного значения (null). С другой стороны, как тут правильно отметили, слишком сильная нормализация таблиц тоже не выход... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 07:46 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram путаницы пустого значения и неизвесного значения (null) Ну вот, теоретик баз данных. Ты сам то способен определить различие между "пустого" и "неизвесного"? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 08:00 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster У некоторых проектировщиков почему-то все поля nullable, вместе с id, потому что им лень дописать not null при создании таблицы или галочку в своё иде поставить. Если некоторые идиоты молотком по голове себе стучат, то это не значит, что молоток вообще не следует использовать :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 10:17 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 noram путаницы пустого значения и неизвесного значения (null) Ну вот, теоретик баз данных. Ты сам то способен определить различие между "пустого" и "неизвесного"? noram, приведу простой пример. Нужно вывести баланс поступлений и списаний по некоторым счетам. Так вот - 0 в этом случае означает, что дебет и кредит баланса равны. Сколько пришло, столько и ушло. А вот NULL показывает, что по данному счету вообще не было никаких операций. Так понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 11:17 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
SQL2008 aleks222 пропущено... Ну вот, теоретик баз данных. Ты сам то способен определить различие между "пустого" и "неизвесного"? noram, приведу простой пример. Нужно вывести баланс поступлений и списаний по некоторым счетам. Так вот - 0 в этом случае означает, что дебет и кредит баланса равны. Сколько пришло, столько и ушло. А вот NULL показывает, что по данному счету вообще не было никаких операций. Так понятнее? Батенька, разве ж 0 - это "пустое"? Это полное смысла значение. Тема не раскрыта. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 11:21 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222, вообще-то я не о том писал. Получилось, что я привожу пример пустого и неизвестного... Пример о другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 11:35 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
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): Если используется низкоуровневый язык доступа к данным, он не должен игнорировать правила безопасности и правила целостности, которые поддерживаются языком более высокого уровня. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 11:47 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
a_voronin Правило 10: Независимость контроля целостности (Integrity Independence): Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных. буду искренне рад )) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 11:54 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
andreymx когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат! Да! 35 лет прошло и до сих про приходится делать костыли. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:14 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
авторНужно вывести баланс поступлений и списаний по некоторым счетам. Так вот - 0 в этом случае означает, что дебет и кредит баланса равны. Сколько пришло, столько и ушло. А вот NULL показывает, что по данному счету вообще не было никаких операций. Так понятнее? Да, SQL2008, так понятнее. Спасибо, очень наглядный пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 13:30 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram авторНужно вывести баланс поступлений и списаний по некоторым счетам. Так вот - 0 в этом случае означает, что дебет и кредит баланса равны. Сколько пришло, столько и ушло. А вот NULL показывает, что по данному счету вообще не было никаких операций. Так понятнее? Да, SQL2008, так понятнее. Спасибо, очень наглядный пример.как раз кривой пример Наллы и агрегаты - это отдельная песня ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 13:45 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
andreymx a_voronin Правило 10: Независимость контроля целостности (Integrity Independence): Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных. буду искренне рад )) Не используйте интервалы - и минуют вас печали и геморрои. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 14:36 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 andreymx пропущено... когда уже СУБД научатся контролировать пересечение-непересечение интервалов/дат! буду искренне рад )) Не используйте интервалы - и минуют вас печали и геморрои. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 15:04 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
andreymx aleks222 пропущено... Не используйте интервалы - и минуют вас печали и геморрои. Заказчик фсегда прав. Но разработчик должен быть умным. Даты НАЧАЛА действия цены абсолютно достаточно... и НИКАКИХ перекрытий даже возникнуть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 15:14 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
andreymx, авторкак раз кривой пример Приведите прямой пример. Мне пример SQL2008 показался убедительным, и не важно, что он в отдельной песне, важно, что он показывает необходимость наличия налов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 15:21 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
noram andreymx, авторкак раз кривой пример Приведите прямой пример. Мне пример SQL2008 показался убедительным, и не важно, что он в отдельной песне, важно, что он показывает необходимость наличия налов.зависит от структуры, в которой вы собираетесь это хранить и считать давай пример! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 15:53 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Не используйте интервалы - и минуют вас печали и геморрои. Но они нужны. Часто любят всё пересчитывать задним числом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 06:22 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Не используйте интервалы - и минуют вас печали и геморрои. Но они нужны. Часто любят всё пересчитывать задним числом. Увы, ты так ничего и не понял. Надо переквалифицироваться в управдомы. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 07:41 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Надо переквалифицироваться в управдомы. Зачем переквалифицироваться? Я и так управдом на 0,25 ставки. aleks222 Увы, ты так ничего и не понял. Что я должен был понять? Что не надо было идти работать в РИЦ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 07:52 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Надо переквалифицироваться в управдомы. Зачем переквалифицироваться? Я и так управдом на 0,25 ставки. aleks222 Увы, ты так ничего и не понял. Что я должен был понять? Что не надо было идти работать в РИЦ? Начало действия параметра однозначно определяет диапазон. Поэтому скулеж: "пересечение диапазонов" - удел управдомов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 08:24 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
andreymx a_voronin Правило 10: Независимость контроля целостности (Integrity Independence): Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных. буду искренне рад )) На вертике есть конструкции, ориентированные на интервалы. INTERPOLATE PREVIOUS VALUE ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 09:11 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 ачало действия параметра однозначно определяет диапазон. 1 : 01.05.2020 - 04.05.2020 2 : 07.05.2020 - 11.05.2020 3 : 23.05.2020 - бессрочно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 09:54 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Наличие конца диапазона позволяет контролировать правильность данных. Хотя и усложняет процесс обновления данных. По теме хочу напомнить varchar2 Oracle, ColumnName_IsNull SSIS и nullable типы C# - другими словами, никакой единой и общепризнанной схемы работы с пустыми значениями пока не существует. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:37 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster 1: 01.05.2020 null: 05.05.2020 2 : 07.05.2020 null: 12.05.2020 3 : 23.05.2020 Учитесь, шура. Заодно полезность null осознаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:28 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Учитесь, шура. Тому, как просрать на ровном месте ключ? Или нажить себе еще проблем с предыдущими/следующими записями?? Давайте задачки: 1.Есть дата, как проверить в какой диапазон она попадает? 2.Есть две даты. Надо найти все ид, которые попадают в создаваемый ими отрезок времени. 3.Как узнать сроки действия 1,2 и 3. Только без субд-специфичного изврата. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:38 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Учитесь, шура. Тому, как просрать на ровном месте ключ? Или нажить себе еще проблем с предыдущими/следующими записями?? Давайте задачки: 1.Есть дата, как проверить в какой диапазон она попадает? 2.Есть две даты. Надо найти все ид, которые попадают в создаваемый ими отрезок времени. 3.Как узнать сроки действия 1,2 и 3. Только без субд-специфичного изврата. Обучаю. Дорого. Поэтому только 1 Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:43 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Обучаю. Дорого. То есть не умею. Запросы тупейшие в случае когда есть дата начала, дата конца. aleks222 Код: sql 1.
crutchmaster без субд-специфичного изврата. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:45 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Модератор: Други! Здесь форум по MSSQL, поэтому со специфичным БД-извратом. Будете устраивать холивары -- изгоню в "Сравнение СУДБ" или "Проектирование" И да, ведите себя дружно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:47 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster 1. Чем твой запрос лучше или быстрее этого? 2. Откуда мне знать что ты понимаешь под "без субд-специфичного изврата"? Тебя научить писать коррелированные запросы для MS SQL 2000? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:48 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Чем твой запрос лучше или быстрее этого? Тем, что он не делает join там, где он не нужен? aleks222 Откуда мне знать что ты понимаешь под "без субд-специфичного изврата"? То есть максимально переносимый запрос на другие субд запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:53 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, Я не холивара ради, может оно правда лучше и сейчас aleks222 меня задавит аргументами. Просто речь про сам подход хранения интервалов и от особенностей разных субд хотелось бы абстрагироваться. Так-то я вообще могу вытащить выборку куда-нибудь и там танцевать с ней вприсядку. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:55 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Чем твой запрос лучше или быстрее этого? Тем, что он не делает join там, где он не нужен? aleks222 Откуда мне знать что ты понимаешь под "без субд-специфичного изврата"? То есть максимально переносимый запрос на другие субд запрос. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:56 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Чем твой запрос лучше или быстрее этого? Тем, что он не делает join там, где он не нужен? Смешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:59 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Код: sql 1.
Ладно, теперь есть еще одно свойство и параметров больше одного. 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:00 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Код: sql 1.
Ладно, теперь есть еще одно свойство и параметров больше одного. 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 и фсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:07 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Это ничего не меняет. Ну я вижу, что ты ничего не поменял. И что? Фсё? Надо выбрать все параметры, например у entityId 55 актуальные на дату. Как это будет выглядеть, когда dt1, dt2 нет? Два запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:13 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster, aleks222, Лично мое мнение: ваш спор кажется не очень умным оффтопиком. есть три способа хранения данных: за каждую дату, за начало периода и за период. У каждого способа есть свои достоинства и недостатки. Но ни один из способов не является принципиально лучшим или худшим. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:24 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
.Евгений crutchmaster, aleks222, Лично мое мнение: ваш спор кажется не очень умным оффтопиком. есть три способа хранения данных: за каждую дату, за начало периода и за период. У каждого способа есть свои достоинства и недостатки. Но ни один из способов не является принципиально лучшим или худшим. Страдалец жаловался на необходимость проверки пересечения периодов. Хранение только даты начала ликвидирует эту проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:56 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
crutchmaster aleks222 Это ничего не меняет. Ну я вижу, что ты ничего не поменял. И что? Фсё? Надо выбрать все параметры, например у entityId 55 актуальные на дату. Как это будет выглядеть, когда dt1, dt2 нет? Два запроса? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 14:02 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Страдалец жаловался на необходимость проверки пересечения периодов. Хранение только даты начала ликвидирует эту проблему. Ликвидирует эту проблему посредством отказа от проверки (проверка данных по определению требует их избыточности). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 14:25 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
.Евгений aleks222 Страдалец жаловался на необходимость проверки пересечения периодов. Хранение только даты начала ликвидирует эту проблему. Ликвидирует эту проблему посредством отказа от проверки (проверка данных по определению требует их избыточности). Хватит пороть чушь. Ей больно. ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 14:28 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок. Если исходные данные представлены в виде диапазонов, то преобразование в начальные даты скроет возможные ошибки исходных данных. Ваша реакция на связь избыточности и проверки данных мне непонятна. Уже десятилетия существует практика использования битов четности, контрольных сумм и хешей. Для времязависимых данных избыточность организовывают в виде полей окончания диапазона (конечной даты), порядкового номера периода и т.п. Кроме очистки данных, конечная дата может ускорять и облегчать читающие запросы, избавляя их от этапа сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 16:49 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
.Евгений aleks222 ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок. Если исходные данные представлены в виде диапазонов, то преобразование в начальные даты скроет возможные ошибки исходных данных. Ваша реакция на связь избыточности и проверки данных мне непонятна. Уже десятилетия существует практика использования битов четности, контрольных сумм и хешей. Для времязависимых данных избыточность организовывают в виде полей окончания диапазона (конечной даты), порядкового номера периода и т.п. Кроме очистки данных, конечная дата может ускорять и облегчать читающие запросы, избавляя их от этапа сортировки. Если бы у бабушки был х... - она была бы дедушкой. Не стоит мешать в кучу проблемы ввода данных и хранение данных. ЗЫ. Ну а сортировка... так индексы придумали давно. Зачем сортировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 16:55 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
Тема какая-то из пустого в порожнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 17:03 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Если бы у бабушки был х... - она была бы дедушкой. Не стоит мешать в кучу проблемы ввода данных и хранение данных. Чтобы разделять ввод и хранение данных, надо заниматься фронтендом. На уровне СУБД нет никакого отдельного ввода данных. Есть только введенные и хранящиеся данные разной чистоты. aleks222 ЗЫ. Ну а сортировка... так индексы придумали давно. Зачем сортировать? Я правильно понял ваши слова, что индекс по начальной дате должен полностью устранить потребность оптимизатора в сортировке по данному полю для любых запросов? P.S. Индекс по начальной дате заведомо не поможет, если интересует продолжительность диапазона. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 17:16 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Хранение только даты начала ликвидирует эту проблему. И добавляет пачку других. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 04:46 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 Код: sql 1. 2. 3. 4. 5. 6.
Отличный запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 04:47 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
aleks222 ЗЫ. Хочешь избыточности - введи дату два раза. И ошибись еще разок. Ну или делай две записи вместо одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 04:47 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
.Евгений Но ни один из способов не является принципиально лучшим или худшим. Вот это надо доказать и обосновать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 04:50 |
|
NULL vs NOT NULL
|
|||
---|---|---|---|
#18+
.Евгений На уровне СУБД нет никакого отдельного ввода данных. А триггеры на insert/update? А проверка уникальности ключа? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 04:51 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1685774]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 193ms |
0 / 0 |