У мене є додаток (дані зберігаються в PostgreSQL), де більшість полів у таблицях завжди є недійсними, але схема цих таблиць цього не примушує. Наприклад, подивіться на цю підроблену таблицю:
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 замість «порожніх» або фіктивних значень для стовпців без фактичного значення, оскільки нульова растрова карта порівняно набагато менша (за винятком випадків рідкісного краю).