PE Notes · DB
데이터 무결성 제약조건 여섯 가지
개체·참조·도메인·키·열·사용자 정의 무결성과 기본키·외래키·후보키, DB·트리거·애플리케이션 구현을 정리합니다.
앱에서만 나이를 검사하면, 다른 경로로 음수가 들어옵니다. 은 DB가 잘못된 입력을 거절하게 하는 규칙입니다. 정확·일관·유효를 스키마가 지킵니다.
여섯 제약
| 무결성 | 규칙 | 구현 |
|---|---|---|
| 개체 | 기본키는 NULL·중복 불가 | PRIMARY KEY |
| 참조 | 외래키는 상대 기본키이거나 NULL | FOREIGN KEY |
| 도메인 | 타입·범위·형식 안 | CHECK, NOT NULL, 타입 |
| 키 | 튜플을 가리는 키가 유일 | UNIQUE |
| 열 | 컬럼 허용 값 | CHECK, DEFAULT |
| 사용자 정의 | 업무 규칙 | 트리거, 프로시저 |
개체와 참조를 관계 모델에서 묶어 릴레이션 무결성이라고 부르기도 합니다. 도메인과 열은 겹쳐 보이지만, 도메인은 속성 집합의 규칙, 열은 그 컬럼에 붙인 검사입니다.
은 학번이 비거나 두 번 나오는 삽입을 막습니다. 은 없는 고객으로 주문을 넣거나, 주문이 남은 고객을 지우지 못하게 합니다. 부모를 지울 때는 (자식도 삭제), SET NULL, RESTRICT로 정책을 고릅니다.
도메인은 나이 18~65, 성별 코드처럼 집합을 닫습니다. 키 무결성은 주민번호·이메일 같은 후보키에 UNIQUE를 겁니다. 사용자 정의는 ‘재고보다 많이 주문하면 거절’처럼 한 컬럼 CHECK로 안 되는 규칙을 트리거에 둡니다.
키의 자리
| 키 | NULL | 중복 | 역할 |
|---|---|---|---|
| 기본키 | 불가 | 불가 | 튜플 식별에 고른 후보키 |
| 후보키 | 불가 | 불가 | 식별 가능한 속성 집합 |
| 대리키 | 불가 | 불가 | 후보키 중 PK가 아닌 것 |
| 외래키 | 허용 | 허용 | 다른 릴레이션 PK 참조 |
| 슈퍼키 | — | 불가 | 후보키를 품은 더 큰 집합 |
어디에 둘 것인가
| 수준 | 장점 | 단점 |
|---|---|---|
| DB 제약 | 경로와 무관하게 강제 | 엔진 의존, 잠금·검사 비용 |
| 트리거 | 복잡한 업무 | 숨은 로직, 성능 |
| 애플리케이션 | 유연 | 우회 가능 |
답안에서는 DB 제약을 1차로 두고, 앱은 사용자 메시지, 트리거는 재고처럼 교차 테이블 규칙으로 적습니다. 스키마가 느슨한 저장소는 앱과 파이프라인 검사가 더 무거워집니다.