Должен ли я разрешить нулевые значения в схеме БД? - PullRequest
27 голосов
/ 08 июня 2009

Я знаю, что логически, в некоторых случаях значения NULL имеют смысл в схеме БД, например, если некоторые значения не были заданы. Тем не менее, работа вокруг DBNull в коде имеет тенденцию быть королевской болью. Например, если я отрисовываю представление и хочу увидеть строку, я не ожидал бы, что значение будет пустой строкой, а не «Null», и я ненавижу кодировать этот сценарий.

Кроме того, это облегчает выполнение запросов. По общему признанию, вы можете сделать "foo is not null" очень легко, но для младших разработчиков SQL это интуитивно понятно, если вы не сможете использовать "foo! = Null" (и да, я знаю об опциях отключения нулей ANSI и т. Д. , но это определенно НЕ проще, и мне не нравится работать вне стандарта).

Какая веская причина для того, чтобы иметь / разрешать нули в схеме базы данных?

Ответы [ 15 ]

0 голосов
/ 09 июня 2009

Я согласен с большинством ответов, приведенных здесь, но для поэтапного определения этого вопроса «вы не можете иметь значение, которое означает две вещи» Это просто сбивает с толку. 0 действительно означает 0? или это значит, что мы еще не знаем? и т.д.

0 голосов
/ 09 июня 2009

НИКОГДА не бывает случая, когда NULL имеет смысл логически. NULL не является частью реляционной модели, и реляционная теория не имеет такого понятия, как NULL.

NULL "полезен" в том смысле, что дрянные СУБД не оставляют вам другого выбора, кроме как использовать его на ФИЗИЧЕСКОМ уровне, который сами эти дрянные СУБД серьезно путают с логическим уровнем и более или менее заставляют их пользователи делают то же самое.

0 голосов
/ 08 июня 2009
0 голосов
/ 08 июня 2009

Для чего стоит SQL-99 определяет предикат IS [NOT] DISTINCT FROM, который возвращает истину или ложь, даже если операнды равны NULL.

foo IS DISTINCT FROM 1234

Эквивалентно:

foo <> 1234 OR foo IS NULL

Поддержка PostgreSQL, IBM DB2 и Firebird IS DISTINCT FROM.

Oracle и Microsoft SQL Server не (пока).

MySQL имеет свой собственный оператор <=>, который работает как IS NOT DISTINCT FROM.

0 голосов
/ 08 июня 2009

Причины наличия нулей

  1. Это общепринятая практика, и каждый, кто работает с базой данных, знает, как работает ноль.
  2. Это ясно показывает, что значение отсутствует.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...