Tôi có một ứng dụng (dữ liệu được lưu trữ trong PostgreSQL), trong đó phần lớn các trường trong các bảng luôn không phải là null, nhưng lược đồ cho các bảng này không thực thi điều này. Ví dụ nhìn vào bảng giả mạo này:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
Ngoài ra name
, num
, time
không được quy định rõ ràng như NOT NULL
trên thực tế họ đang có, bởi vì thực thi xảy ra ở phía ứng dụng.
Cảm giác của tôi là nó nên được thay đổi, nhưng điều ngược lại là mức độ ứng dụng đảm bảo rằng các giá trị null không thể xuất hiện ở đây và không ai khác tự sửa đổi bảng.
Câu hỏi của tôi là : lợi ích (hiệu suất, lưu trữ, tính nhất quán, cái gì khác) và nhược điểm (giả sử rằng tôi đã xác minh rằng hiện tại không có null nào và từ logic nghiệp vụ sẽ không có null) bằng cách đặt ràng NOT NULL
buộc rõ ràng?
Chúng tôi có quy trình xem xét mã tốt và tài liệu hợp lý tốt, vì vậy khả năng một số người mới sẽ cam kết điều gì đó phá vỡ ràng buộc này là không thực sự đủ để biện minh cho sự thay đổi.
Đây không phải là quyết định của tôi, vì vậy đây chính xác là lý do tại sao tôi đang tìm kiếm những lời biện minh khác. Theo tôi, nếu một cái gì đó không thể là null và cơ sở dữ liệu cho phép bạn chỉ định rằng một cái gì đó không phải là null - thì hãy làm điều đó. Đặc biệt nếu thay đổi là siêu đơn giản.
NOT NULL
ràng buộc không có bất kỳ ảnh hưởng trực tiếp đến kích thước lưu trữ. Tất nhiên, với tất cả các cột được xác định NOT NULL
, không thể có một bitmap null để bắt đầu. Mặt khác: kích thước lưu trữ thường nhỏ hơn nhiều nếu bạn sử dụng NULL thay vì giá trị "trống" hoặc giá trị giả cho các cột không có giá trị thực tế, vì bitmap null tương đối nhỏ hơn nhiều (trừ trường hợp cạnh hiếm).