💡 핵심 인사이트
개체 무결성은 데이터베이스 테이블 내의 모든 행(개체)들이 자신만의 고유한 신분증을 가져야 한다는 절대 규칙입니다.
이를 강제하기 위해 지정된 '기본 키(Primary Key)' 컬럼에는 절대 NULL 값(비어있음)이 들어갈 수 없고, 다른 행과 똑같은 중복 값도 들어갈 수 없다는 두 가지 금지 사항으로 요약됩니다.
Ⅰ. 개체 무결성의 정의와 주체
관계형 데이터베이스(RDB)에서 릴레이션의 모든 튜플(행)은 현실 세계에 존재하는 독립적인 개체(Entity, 예: 학생 1명, 상품 1개)를 나타냅니다. 이 개체들을 남들과 헷갈리지 않고 정확히 콕 집어내기 위해 우리는 테이블 설계 시 **기본 키(Primary Key, PK)**를 하나 선정합니다.
**개체 무결성(Entity Integrity)**은 바로 이 "기본 키는 반드시 개체를 유일하게 식별하는 본연의 임무를 완벽하게 수행해야 한다"는 제약 조건입니다.
Ⅱ. 개체 무결성의 2대 절대 룰
어떤 컬럼이 기본 키(PK)로 지정되는 순간, 데이터베이스 엔진은 그 컬럼에 데이터를 넣을 때 다음 두 가지를 현미경처럼 검사합니다.
1. NOT NULL (비어 있으면 안 됨)
- 기본 키 값의 일부, 또는 전부에 NULL(알 수 없는 값)을 허용하지 않습니다.
- 이유: 번호판(PK)이 아예 없는 유령 자동차가 고속도로를 달리면, 나중에 속도위반을 했을 때 그 차를 식별(추적)할 방법이 원천적으로 불가능해지기 때문입니다.
2. UNIQUE (유일해야 함, 중복 불가)
- 테이블 내에서 다른 어떤 행과도 동일한(중복된) 값을 가질 수 없습니다.
- 이유: 1001번이라는 똑같은 번호판을 단 자동차가 2대 존재하면, 과태료 고지서를 보낼 때 어느 차인지 식별할 수 없는 혼란(식별의 상실)이 오기 때문입니다.
(실무 SQL 메모: 테이블을 만들 때
PRIMARY KEY라고 선언하면, 시스템이 내부적으로 알아서NOT NULL과UNIQUE인덱스를 동시에 걸어버립니다.)
Ⅲ. 복합 기본 키(Composite PK)에서의 개체 무결성
기본 키가 단일 컬럼이 아니라, {학번, 과목코드}처럼 두 개의 컬럼이 찰떡같이 뭉쳐진 복합키일 때는 어떻게 될까요?
- 학번(1001), 과목코드(NULL) ➔ 위반 (에러 발생)
- 학번(NULL), 과목코드(DB1) ➔ 위반 (에러 발생)
복합키를 구성하는 여러 속성 중 단 하나라도 NULL 값을 가지면 전체 개체 무결성 위반으로 간주하여 데이터 삽입을 거부합니다. 기둥 두 개 중 하나가 부러지면 건물이 무너지는 것과 같은 이치입니다.
📢 섹션 요약 비유: 개체 무결성은 정부의 **'주민등록번호 발급 원칙'**입니다. 대한민국 국민으로 태어났다면 "주민번호 발급을 거부하고 얼굴 없는 유령으로 살겠다(NULL)"는 것은 용납되지 않으며, 반대로 "남의 주민번호를 똑같이 도용해서 쓰겠다(중복)"는 것 역시 시스템의 근간을 흔드는 행위이므로 철저히 차단(제약)됩니다.