Стандарты разработки баз данных в нашей организации гласят, что поля varchar не должны допускать пустых значений. Они должны иметь значение по умолчанию пустой строки (""). Я знаю, что это упрощает запросы и конкатенацию, но сегодня один из моих коллег спросил меня, почему этот стандарт существует только для типов varchar, а не для других типов данных (int, datetime и т. д.). Я хотел бы знать, считают ли другие это допустимым, защищенным стандартом, или следует ли рассматривать varchar так же, как поля других типов данных?
Я считаю, что этот стандарт действителен по следующей причине:
Я считаю, что пустая строка и нулевые значения, хотя и различаются технически, концептуально одинаковы. Пустая строка нулевой длины — это несуществующая строка. Это не имеет значения. Однако числовое значение 0 не равно NULL.
Например, если поле OutstandingBalance имеет значение 0, это означает, что осталось 0,00 долларов США. Однако, если то же поле имеет значение NULL, это означает, что значение неизвестно. С другой стороны, поле CustomerName со значением "" в основном совпадает со значением NULL, поскольку оба представляют несуществующее имя.
Я где-то читал, что аналогия между пустой строкой и NULL - это пустой компакт-диск и отсутствие компакт-диска. Однако я считаю, что это ложная аналогия, потому что чистый компакт-диск все еще физически существует и все еще имеет физическое пространство данных, на которое не записаны какие-либо значимые данные. По сути, я считаю, что пустой компакт-диск эквивалентен строке пробелов (""), а не пустой строке. Поэтому я считаю, что строка пробелов является фактическим значением, отличным от NULL, но пустая строка является отсутствием значения, концептуально эквивалентным NULL.
Пожалуйста, дайте мне знать, верны ли мои убеждения относительно строк переменной длины, или, пожалуйста, просветите меня, если это не так. Я прочитал несколько блогов/аргументов по этому вопросу, но до сих пор не вижу истинной концептуальной разницы между NULL и пустыми строками.