За пределами аргумента о том, следует ли использовать NULL: я несу ответственность за существующую базу данных, которая использует NULL для обозначения "отсутствующих или никогда не вводимых" данных. Он отличается от пустой строки, что означает, что "пользователь установил это значение, и они выбрали" empty "."
Другой подрядчик по проекту твердо уверен в том, что "NULL не существуют для меня, я никогда не использую NULL, и никто другой не должен, либо" стороны аргумента ". Однако меня смущает то, что, поскольку команда-подрядчик ДОЛЖНА признать разницу между" отсутствующим/никогда не введенным "и" намеренно пустым или указанным пользователем как неизвестным ", они используют один символ" Z "на протяжении всего своего кода и хранимых процедур для представляют" отсутствующие/никогда не введенные" с тем же значением, что и NULL во всей остальной базе данных.
Хотя наш общий клиент попросил изменить это, и я поддержал этот запрос, команда ссылается на это как "стандартную практику" среди администраторов баз данных, гораздо более продвинутых, чем я; они неохотно меняются на использование NULL на основе моего невежественного запроса. Так может ли кто-нибудь помочь мне преодолеть мое невежество? Есть ли стандарт или небольшая группа людей или даже один громкий голос среди экспертов SQL, который выступает за использование "Z" вместо NULL?
Update
У меня есть ответ от подрядчика, чтобы добавить. Вот что он сказал, когда клиент попросил удалить специальные значения, чтобы разрешить NULL в столбцах без данных:
В принципе, я создал базу данных, чтобы избежать NULL, когда это возможно. Вот логическое обоснование:
• NULL в поле строки [VARCHAR] никогда не требуется, поскольку пустая (нулевая) строка предоставляет точно такую же информацию.
• NULL в целочисленном поле (например, значение ID) может обрабатываться с использованием значения, которое никогда не будет происходить в данных (например, -1 для целочисленного поля IDENTITY).
• NULL в поле даты может легко вызвать осложнения при расчете дат. Например, в логике, которая вычисляет различия по дате, такие как разница между днями между [RecoveryDate] и [OnsetDate], логика взорвется, если одна или обе даты будут NULL - если явно не будет дано четкое разрешение для обеих дат NULL. Эта дополнительная работа и дополнительная обработка. Если для [RecoveryDate] и [OnsetDate] (например, "1/1/1900" ) используются даты "default" или "placeholder", математические вычисления могут показывать "необычные" значения, но логика даты не взорвется.
Обработка NULL традиционно была областью, где разработчики допускают ошибки в хранимых процедурах.
В мои 15 лет как администратор базы данных, я нашел, что лучше избегать NULL, где это возможно.
Это, похоже, подтверждает негативную реакцию на этот вопрос. Вместо применения принятого подхода 6NF к разработке NULL специальные значения используются для "избежания NULL, где это возможно". Я опубликовал этот вопрос с открытым сознанием, и я рад, что узнал больше о том, что "NULLs являются полезными /NULLs являются злыми" дебатами, но теперь я довольно удобен, обозначая подход "специальных ценностей", чтобы быть полной ерундой.
пустая (нулевая) строка предоставляет точно такую же информацию.
Нет, это не так; в существующей базе данных мы модифицируем, NULL означает "никогда не вводится", а пустые строки означают "введено как пустое".
Обработка NULL традиционно была областью, где разработчики ошибались в хранимых процедурах.
Да, но эти ошибки тысячи раз были сделаны тысячами разработчиков, а уроки и предостережения для предотвращения этих ошибок известны и документированы. Как уже упоминалось: принимаются или отклоняются NULL, представление недостающих значений является решаемой проблемой. Нет необходимости изобретать новое решение только потому, что разработчики продолжают делать легко преодолеваемые (и легко идентифицируемые) ошибки.
В качестве сноски: я уже более 20 лет являюсь разработчиком DBE и разработчиком (для меня, безусловно, достаточно времени, чтобы узнать разницу между инженером базы данных и администратором базы данных). На протяжении всей моей карьеры я всегда был в лагере "NULLs полезны", хотя я знал, что несколько очень умных людей не согласились. Я очень скептически относился к подходу "специальных ценностей", но не достаточно хорошо разбирался в науках "Как избежать NULL на правильном пути", чтобы сделать устойчивую позицию. Мне всегда нравится изучать новые вещи, и у меня еще есть много возможностей учиться через 20 лет. Спасибо всем, кто внес свой вклад в это полезное обсуждение.