В большинстве БД NOT NULL
столбец будет более эффективным с точки зрения хранимых данных по причине, которую вы указали, а также более эффективным для запроса и индексации - поэтому, если вы не хотите разрешить пустые значения в столбце, вы должны явно запретить их.
Это будет иметь незначительное влияние на производительность, поскольку дополнительные NOT NULL
ограничения, возможно, потребуется проверять для каждой строки, на которую вы влияете, с помощью любого INSERT или UPDATE, но, поскольку большинство баз данных имеют относительную легкость записи и интенсивность чтения, это, вероятно, не является проблемой (мало дополнительное время вряд ли будет вообще заметно, поскольку это операция с привязкой к процессору, где остальная часть операции вставки / обновления будет привязана к вводу-выводу и, таким образом, гораздо более значительным узким местом), и это дает вам некоторое «бесплатное» "проверка данных, чтобы ваш код (или код других людей) не мог случайно поместить значения NULL там, где их не ожидает другой код, и поэтому может давать неверные результаты в их присутствии.
Редактировать: Как отмечает Питер в своем комментарии, вышеизложенное является обобщением и может не выполняться для всех DMBS, хотя я почти уверен, что это верно для mysql и mssql. К другим сложностям в этой области могут относиться такие функции, как разреженные таблицы (как, например, реализовано в MSSQL 2008), которые изменят динамику производительности (не) пустых столбцов.
NULL
если и только еслиNULL
значение имеет интерпретацию для моделируемой вещи.