Это огромная банка червей, потому что NULL может означать очень много вещей:
- Нет даты смерти, потому что человек все еще жив.
- Нет номера мобильного телефона, потому что мы не знаем, что это такое или даже существует ли он.
- Нет номера социального страхования, потому что этот человек, как известно, не имеет номера.
Некоторых из них можно избежать с помощью нормализации, некоторых из них можно избежать с помощью наличия значения в этом столбце («N / A»), некоторые из них могут быть смягчены наличием отдельного столбца для объяснения наличия NULL («N / K», «N / A» и т. д.).
Это также может быть червем, потому что синтаксис SQL, необходимый для их поиска, отличается от синтаксиса ненулевых значений, к ним трудно присоединиться, и они, как правило, не включаются в записи индекса.
По первой причине вы найдете случаи, когда ноль неизбежен.
По последней причине вы все равно должны приложить все усилия, чтобы свести их к минимуму.
Независимо от того, всегда используйте ограничения NOT NULL для защиты от нулей, где требуется значение.