Ich habe eine Anwendung (Daten werden in PostgreSQL gespeichert), in der die meisten Felder in den Tabellen immer nicht null sind, aber das Schema für diese Tabellen erzwingt dies nicht. Schauen Sie sich zum Beispiel diese gefälschte Tabelle an:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
Auch name
, num
, time
nicht explizit angegeben ist, wie NOT NULL
, in Wirklichkeit sind sie, weil die Durchsetzung auf der Anwendungsseite passiert.
Meiner Meinung nach sollte es geändert werden, aber der Kontrapunkt ist, dass die Anwendungsebene sicherstellt, dass hier keine Nullwerte angezeigt werden können und niemand anderes die Tabelle manuell ändert.
Meine Frage lautet : Was sind die Vorteile (Leistung, Speicher, Konsistenz, etwas anderes) und die Nachteile (vorausgesetzt, ich habe bereits überprüft, dass im Moment keine Nullen vorhanden sind, und aus der Geschäftslogik sollten keine Nullen vorhanden sein), indem Sie eine setzen explizite NOT NULL
Einschränkung?
Wir haben einen guten Codeüberprüfungsprozess und eine einigermaßen gute Dokumentation, sodass die Möglichkeit, dass eine neue Person etwas festlegt, das diese Einschränkung verletzt, nicht ausreicht, um die Änderung zu rechtfertigen.
Dies ist nicht meine Entscheidung, deshalb suche ich genau nach anderen Rechtfertigungen. Meiner Meinung nach, wenn etwas nicht null sein kann und Sie in einer Datenbank angeben können, dass etwas nicht null ist, dann tun Sie es einfach. Besonders wenn die Änderung super einfach ist.
NOT NULL
Einschränkungen haben keine direkte Auswirkung auf Speichergröße. Da alle Spalten definiert sind NOT NULL
, kann es natürlich zunächst keine Null-Bitmap geben. Auf der anderen Seite: Die Speichergröße ist normalerweise viel kleiner, wenn Sie NULL anstelle von "leeren" oder Dummy-Werten für Spalten ohne tatsächlichen Wert verwenden, da die Null-Bitmap vergleichsweise viel kleiner ist (mit Ausnahme seltener Kantenfälle).