Стандарты разработки базы данных в нашей организации указывают, что поля varchar не должны допускать нулевые значения. Они должны иметь значение по умолчанию пустой строки (""). Я знаю, что это упрощает запрос и конкатенацию, но сегодня один из моих коллег расспросил меня о том, почему этот стандарт существует только для типов varchar, а не для других типов данных (int, datetime и т. Д.). Я хотел бы знать, считают ли другие это действительным, оправданным стандартом, или если varchar следует рассматривать так же, как поля других типов данных?Varchar columns: Nullable or not
Я считаю, что этот стандарт действует по следующей причине:
Я считаю, что пустая строка и нулевые значения, хотя технически разные, концептуально одинаковы. Пустая строка с нулевой длиной - это строка, которая не существует. Это не имеет значения. Однако числовое значение 0 не совпадает с NULL.
Например, если поле с именем OutstandingBalance имеет значение 0, значит, осталось $ 0.00. Однако, если одно и то же поле равно NULL, это означает, что значение неизвестно. С другой стороны, поле CustomerName со значением «» в основном совпадает с значением NULL, поскольку оба представляют собой несуществование имени.
Я где-то читал, что аналогия для пустой строки против NULL - это чистый CD и CD. Тем не менее, я считаю, что это ложная аналогия, потому что пустой компакт-диск все еще существует и имеет физическое пространство данных, которое не содержит каких-либо значимых данных. В принципе, я считаю, что пустой CD является эквивалентом строки пробелов (""), а не пустой строки. Поэтому я считаю, что строка пробелов является фактическим значением, отличным от NULL, но пустая строка является отсутствием значения, концептуально эквивалентного NULL.
Пожалуйста, дайте мне знать, если мои убеждения относительно строк переменной длины действительны или, пожалуйста, просветите меня, если они не являются. Я прочитал несколько блогов/аргументов по этому вопросу, но до сих пор не вижу истинного концептуального различия между NULL и пустыми строками.
+1: Необязательный код столбца бизнес-правил, а не тип данных. Кроме того, нет экономии пространства, используя строки NULL vs zero length: http://vampirebasic.blogspot.com/2009/01/sql-server-null-varchar-vs-empty.html –