У меня есть приложение (данные хранятся в PostgreSQL), где большинство полей в таблицах всегда не равны NULL, но схема для этих таблиц не обеспечивает этого. Например, посмотрите на эту фальшивую таблицу:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
Кроме того name
, num
, time
которые явно не указано , как NOT NULL
, в действительности они, потому что исполнение происходит на стороне приложения.
Мне кажется, что это должно быть изменено, но в отличие от этого, уровень приложения гарантирует, что нулевые значения не могут появиться здесь, и никто больше не изменяет таблицу вручную.
Мой вопрос : каковы преимущества (производительность, хранение, согласованность, что-то еще) и недостатки (при условии, что я уже проверил, что в настоящий момент нет нулевых значений, а из бизнес-логики не должно быть нулевых значений), установив явное NOT NULL
ограничение?
У нас есть хороший процесс проверки кода и достаточно хорошая документация, поэтому вероятность того, что какой-то новый человек совершит что-то, что нарушит это ограничение, на самом деле не достаточна, чтобы оправдать это изменение.
Это не мое решение, поэтому именно поэтому я ищу другие оправдания. На мой взгляд, если что-то не может быть нулевым, а база данных позволяет вам указать, что что-то не является нулевым - просто сделайте это. Особенно, если изменение супер просто.
NOT NULL
ограничения не оказывают прямого влияния на размер хранилища. Конечно, со всеми определенными столбцами NOT NULL
не может быть нулевого растрового изображения для начала. С другой стороны: размер хранилища обычно намного меньше, если вы используете NULL вместо «пустых» или фиктивных значений для столбцов без фактического значения, потому что нулевое растровое изображение сравнительно намного меньше (за исключением случаев редких краев).