테이블의 필드 대부분이 항상 null이 아니지만이 테이블의 스키마가 이것을 강제하지 않는 응용 프로그램 (데이터가 PostgreSQL에 저장 됨)이 있습니다. 예를 들어이 가짜 테이블을보십시오.
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
또한 name
, num
, time
명시 적으로 언급되지 않은 NOT NULL
그들이 실제로 시행 응용 프로그램 측에서 발생하기 때문에.
내 느낌은 그것이 변경되어야한다는 것입니다. 그러나 반격 점은 응용 프로그램 수준이 null 값을 여기에 표시 할 수 없으며 다른 사람은 테이블을 수동으로 수정하지 않는다는 것입니다.
내 질문은 : 성능, 스토리지, 일관성, 그 밖의 다른 이점과 단점 (현재 Null이 없음을 이미 확인했으며 비즈니스 논리에서 Null이 없어야한다고 가정 함) 명시 적 NOT NULL
제약?
우리는 좋은 코드 검토 프로세스와 합리적으로 좋은 문서를 가지고 있기 때문에 일부 새로운 사람이이 제약 조건을 어기는 무언가를 저지를 가능성은 실제로 변경을 정당화하기에 충분하지 않습니다.
이것은 내 결정이 아니므로 다른 정당화를 찾는 이유입니다. 내 의견으로는, 무언가가 null이 될 수없고 데이터베이스가 무언가가 null이 아닌 것을 지정할 수 있다면-그냥하십시오. 특히 변경이 매우 간단한 경우.
NOT NULL
제한 조건은 스토리지 크기에 직접적인 영향을 미치지 않습니다. 물론 모든 열이 정의 된 상태 NOT NULL
에서 시작하기 위해 null 비트 맵이있을 수 없습니다. 반면에 , 널 비트 맵이 비교적 더 작기 때문에 (값이 희소 한 경우는 제외) 실제 값이없는 열에 대해 "빈"또는 더미 값 대신 NULL을 사용하는 경우 스토리지 크기는 일반적으로 훨씬 작습니다 .