Saya memiliki aplikasi (data disimpan dalam PostgreSQL), di mana sebagian besar bidang dalam tabel selalu tidak nol, tetapi skema untuk tabel ini tidak memberlakukan ini. Sebagai contoh, lihat tabel palsu ini:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
Juga name
, num
, time
tidak secara eksplisit dinyatakan sebagai NOT NULL
, dalam kenyataannya mereka, karena penegakan terjadi di sisi aplikasi.
Perasaan saya adalah bahwa itu harus diubah, tetapi sebaliknya adalah bahwa tingkat aplikasi memastikan bahwa nilai nol tidak dapat muncul di sini dan tidak ada orang lain yang secara manual memodifikasi tabel.
Pertanyaan saya adalah : Apa manfaatnya (kinerja, penyimpanan, konsistensi, sesuatu yang lain) dan kelemahannya (dengan asumsi saya sudah memverifikasi bahwa tidak ada null yang ada saat ini, dan dari logika bisnis seharusnya tidak ada null) dengan menetapkan NOT NULL
kendala eksplisit ?
Kami memiliki proses peninjauan kode yang baik dan dokumentasi yang cukup baik, sehingga kemungkinan bahwa beberapa orang baru akan melakukan sesuatu yang melanggar batasan ini tidak benar-benar cukup untuk membenarkan perubahan.
Ini bukan keputusan saya, jadi inilah tepatnya mengapa saya mencari pembenaran lain. Menurut pendapat saya, jika sesuatu tidak bisa menjadi nol dan database memungkinkan Anda menentukan bahwa sesuatu itu bukan nol - maka lakukan saja. Apalagi jika ubahannya super sederhana.
NOT NULL
kendala tidak memiliki efek langsung pada ukuran penyimpanan. Tentu saja, dengan semua kolom didefinisikan NOT NULL
, tidak mungkin ada bitmap nol untuk memulai. Di sisi lain: ukuran penyimpanan biasanya jauh lebih kecil jika Anda menggunakan NULL alih-alih nilai "kosong" atau dummy untuk kolom tanpa nilai aktual, karena bitmap null relatif jauh lebih kecil (kecuali untuk kasus tepi langka).