문제
다음 중 아래 <고객>과 <구매리스트> 테이블 관계에 참조 무결성이 항상 유지되도록 설정할 수 없는 경우는?
(관계: <고객>의 '고객번호'(기본 키, 1) ↔ <구매리스트>의 '고객번호'(외래 키, ∞))
| 고객 | 구매리스트 |
|---|---|
| 고객번호(PK) | 구매번호(PK) |
| 고객이름 | 고객번호(FK) |
| 전화번호 | 작품명 |
| 우편번호 | 구매일 |
| 주소 | 구매금액 |
| 구매포인트 |
① <고객> 테이블의 '고객번호' 필드 값이 <구매리스트> 테이블의 '고객번호' 필드에 없는 경우 ② <고객> 테이블의 '고객번호' 필드 값이 <구매리스트> 테이블의 '고객번호' 필드에 하나만 있는 경우 ③ <구매리스트> 테이블의 '고객번호' 필드 값이 <고객> 테이블의 '고객번호' 필드에 없는 경우 ④ <고객> 테이블의 '고객번호' 필드 값이 <구매리스트> 테이블의 '고객번호' 필드에 두 개 이상 있는 경우
정답
3번
해설
정답: 3. 참조 무결성은 외래 키(<구매리스트>의 고객번호) 값이 반드시 부모 테이블(<고객>의 고객번호)에 존재해야 한다는 규칙이다. 따라서 <구매리스트>의 고객번호가 <고객>에 없는 경우는 참조 무결성이 위반되어 설정을 유지할 수 없다.
오답 풀이
- 1번: 고객 중 구매 기록이 없는 경우로, 부모에만 있고 자식엔 없어도 참조 무결성에는 문제가 없다.
- 2번: 한 고객이 한 번 구매한 경우로, 정상적인 1:M 관계이므로 문제가 없다.
- 3번: 자식의 외래 키 값이 부모에 없으면 참조 무결성이 깨지므로 설정을 유지할 수 없어 정답이다.
- 4번: 한 고객이 여러 번 구매한 경우로, 1:M 관계상 자연스러워 문제가 없다.
보충 개념 참조 무결성: 외래 키 값은 항상 부모 테이블의 기본 키에 존재해야 한다. 부모에 없는 외래 키 값(고아 레코드)은 허용되지 않는다.