65. 관계형 데이터베이스의 제약 조건 - 무결성
![post-thumbnail](https://velog.velcdn.com/images/alpaka206/post/cb3d87a8-011a-408b-9d29-d42d2f6b22c7/image.png)
무결성(Integrity)의 개념 및 종류
- 무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 정확성을 의미한다.
- 무결성 제약 조건은 데이터베이스에 들어 있는 데이터의 정확성을 보장하기 위해 부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건을 말한다.
- 무결성의 종류에는 개체 무결성, 도메인 무결성, 참조 무결성, 사용자 정의 무결성 등이 있다.
![](https://velog.velcdn.com/images/alpaka206/post/78758902-9f3c-4839-b8ac-0932906bb774/image.png)
개체 무결성(Entity Integrity, 실체 무결성)
- 개체 무결성은 기본 테이블의 기본키를 구성하는 어떤 속성도 Null 값이나 중복값을 가질 수 없다는 규정이다.
- <학생> 릴레이션에서 '학번'이 기본키로 정의되면 튜플을 추가할 때 '주민번호'나 '성명' 필드에는 값을 입력하지 않아도 되지만 '학번' 속성에는 반드시 값을 입력해야 한다. 또한 '학번' 속성에는 이미 한 번 입력한 속성 값을 중복하여 입력할 수 없다.
도메인 무결성(Domain Integrity, 영역 무결성)
- 도메인 무결성은 주어진 속성 값이 정의된 도메인에 속한 값이어야 한다는 규정이다.
- <수강> 릴레이션의 '과목명' 속성에는 영어, 수학, 전산 세 가지만 입력되도록 유효값이 지정된 경우 반드시 해당 값만 입력해야 한다.
참조 무결성(Referential Integrity)
- 참조 무결성은 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다. 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정이다.
- 외래키와 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 한다.
- <수강> 릴레이션의 '학번' 속성에는 <학생> 릴레이션의 '학번' 속성에 없는 값은 입력할 수 없다.
- <수강> 릴레이션의 '학번'과 <학생> 릴레이션의 '학번' 속성에는 같은 종류의 데이터가 입력되어 있어야 하며, <학생> 릴레이션의 기본키가 '학번'+'이름'이었다면 <수강> 릴레이션의 외래키도 학번'+'이름'으로 구성되어져야 한다.
사용자 정의 무결성(User-Defined Integrity)
- 사용자 정의 무결성은 속성 값들이 사용자가 정의한 제약조건에 만족해야 한다는 규정이다.
데이터 무결성 강화
- 데이터 무결성은 데이터 품질에 직접적인 영향을 미치므로 데이터 특성에 맞는 적절한 무결성을 정의하고 강화해야 한다.
- 프로그램이 완성되고 데이터가 저장된 상태에서 무결성을 정의할 경우 많은 비용이 발생하므로 데이터베이스 구축 과정에서 정의한다.
- 데이터 무결성은 애플리케이션, 데이터베이스 트리거, 제약 조건을 이용하여 강화 할 수 있다.
애플리케이션
- 데이터 생성, 수정, 삭제 시 무결성 조건을 검증하는 코드를 데이터를 조작하는 프로그램 내에 추가한다.
- 코드를 이용한 복잡한 규칙 등을 검토하는 무결성 검사는 데이터베이스에서 수행하기 어려우므로 애플리케이션 내에서 처리한다.
- 장점: 사용자 정의 같은 복잡한 무결성 조건의 구현이 가능하다.
- 단점: 소스 코드에 분산되어 있어 관리가 힘들고, 개별적인 시행으로 인해 적정성 검토가 어렵다.
데이터베이스 트리거
- 트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가한다.
- 장점: 통합 관리가 가능하고, 복잡한 요구 조건의 구현이 가능하다.
- 단점: 운영 중 변경이 어렵고, 사용상 주의가 필요하다.
제약 조건
- 데이터베이스에 제약 조건을 설정하여 무결성을 유지한다.
- 장점: 통합 관리 가능, 간단한 선언으로 구현 가능, 변경 용이, 오류 데이터 발생방지 등이 있다.
- 단점: 복잡한 제약 조건의 구현과 예외적인 처리가 불가능하다.