Tablolarda alanların çoğunluğu her zaman boş olmayan bir uygulama (veri PostgreSQL saklanır) var, ama bu tablolar için şema bunu zorlamıyor. Örneğin şu sahte tabloya bakın:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
Ayrıca name
, num
, time
açıkça olarak belirtilmeyen NOT NULL
oldukları gerçeklik içinde icra uygulama tarafında olur, çünkü.
Benim düşüncem, değiştirilmesi gerektiğidir, ancak kontrpuan, uygulama seviyesinin boş değerlerin burada görünemediğinden ve başka hiç kimse tabloyu manuel olarak değiştirmediğinden emin olmasıdır.
Benim sorum : Avantajları (performans, depolama, tutarlılık, başka bir şey) ve dezavantajları (şu anda hiç boş değer olmadığını doğruladığımı varsayarak ve iş mantığından boş olmamalı) varsayarak açık NOT NULL
kısıtlama?
İyi bir kod inceleme sürecine ve oldukça iyi bir dokümantasyona sahibiz, bu nedenle bazı yeni kişilerin bu kısıtlamayı ihlal eden bir şey yapma olasılığı gerçekten değişikliği haklı çıkarmak için yeterli değildir.
Bu benim kararım değil, bu yüzden başka gerekçeler de arıyorum. Bence, bir şey null olamazsa ve bir veritabanı bir şeyin null olmadığını belirtmenize izin veriyorsa - sadece yapın. Özellikle değişiklik çok basitse.
NOT NULL
kısıtlamaların depolama boyutu üzerinde doğrudan bir etkisi yoktur. Tabii ki, tüm sütunlar tanımlandığında NOT NULL
, başlamak için boş bir bitmap olamaz. Öte yandan: gerçek değeri olmayan sütunlar için "boş" veya kukla değerler yerine NULL kullanırsanız, depolama boyutu genellikle çok daha küçüktür , çünkü boş bitmap nispeten daha küçüktür (nadir kenar durumları hariç).