ฉันมีแอปพลิเคชัน (ข้อมูลถูกเก็บไว้ใน PostgreSQL) ซึ่งส่วนใหญ่ของเขตข้อมูลในตารางจะไม่ว่างเสมอ แต่สคีมาสำหรับตารางเหล่านี้ไม่ได้บังคับใช้สิ่งนี้ ตัวอย่างเช่นดูที่ตารางปลอมนี้:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
นอกจากนี้ยังname
, num
, time
ไม่ได้ระบุไว้อย่างชัดเจนว่าNOT NULL
ในความเป็นจริงพวกเขาเป็นเพราะการบังคับใช้ที่เกิดขึ้นในด้านการประยุกต์ใช้
ความรู้สึกของฉันคือมันควรจะเปลี่ยน แต่ความแตกต่างคือระดับแอปพลิเคชันทำให้แน่ใจว่าค่า Null ไม่สามารถปรากฏที่นี่และไม่มีใครปรับเปลี่ยนตารางด้วยตนเอง
คำถามของฉันคืออะไรประโยชน์ (ประสิทธิภาพการจัดเก็บความสอดคล้องอย่างอื่น) และข้อเสีย (สมมติว่าฉันได้ตรวจสอบแล้วว่าไม่มีโมฆะในปัจจุบันและจากตรรกะทางธุรกิจควรไม่มีโมฆะ) โดยการตั้งค่าNOT NULL
ข้อ จำกัด ที่ชัดเจน?
เรามีขั้นตอนการตรวจสอบโค้ดที่ดีและมีเอกสารที่ดีพอสมควรดังนั้นความเป็นไปได้ที่คนใหม่บางคนจะส่งมอบสิ่งที่ทำลายข้อ จำกัด นี้ไม่เพียงพอที่จะพิสูจน์การเปลี่ยนแปลง
นี่ไม่ใช่การตัดสินใจของฉันดังนั้นนี่คือเหตุผลที่ฉันกำลังมองหาเหตุผลอื่น ๆ ในความคิดของฉันถ้าสิ่งที่ไม่สามารถเป็นโมฆะและฐานข้อมูลช่วยให้คุณระบุว่าสิ่งที่ไม่เป็นโมฆะ - เพียงแค่ทำมัน โดยเฉพาะอย่างยิ่งถ้าการเปลี่ยนแปลงนั้นง่ายมาก
NOT NULL
ข้อ จำกัด ไม่มีผลกระทบโดยตรงกับขนาดของที่เก็บข้อมูล แน่นอนว่าเมื่อมีการกำหนดคอลัมน์ทั้งหมดNOT NULL
จะไม่มีบิตแมปว่างเปล่าที่จะเริ่มต้นด้วย ในทางกลับกัน: ขนาดพื้นที่จัดเก็บโดยทั่วไปจะเล็กกว่ามากหากคุณใช้ค่า NULL แทนค่า "ว่าง" หรือดัมมี่สำหรับคอลัมน์ที่ไม่มีค่าจริงเนื่องจากบิตแมป null มีขนาดเล็กกว่ามาก (ยกเว้นกรณีขอบหายาก)