개체 무결성 제약조건 entity integrity constraint
기본키를 구성하는 모든 속성은 NULL 값을 가질수 없습니다. 기본키를 구성하는 속성 전체나 일부가 NULL 값을 가지게 되면 튜플의 유일성을 판단할 수가 없어지므로 기본키의 본래 목적을 상실하게 됩니다.
개체 무결성 제약조건을 만족시키려면 새로운 튜플이 삽입되는 연산과 기존 튜플의 기본키 속성 값이 변경되는 연산이 발생할 때에도 기본키에 NULL값이 포함되는 상황에서는 연산을 거부하면 되는데요. 이것은 일반 사용자가 직접 수행하기보다는 데이터베이스 관리 시스템이 자동으로 수행합니다.
새로운 릴레이션을 생성할 때마다 기본키를 어떤 속성들로 구성할 것인지 데이터베이스 관리 시스템에 알려주기만 하면 됩니다.
중복값도 가질 수 없습니다.
예) "학생" 릴레이션에서 '학번'이 기본키로 정의되면 튜플을 추가할 때, '학과','이름' 속성에는 값을 입력하지 않아도 에러가 나지 않습니다. 하지만 '학번' 속성에는 반드시 값이 저장되야합니다. 또한 '학번' 속성에는 이미 입력된 속성값을 중복하여 입력할 수 없습니다.
참조 무결성 제약조건 Referential integrity constraint
개체 무결성 제약조건이 기본키에 대한 규칙으로 각 릴레이션마다 적용된다면, 참조 무결성 제약조건은 외래키에 대한 규칙으로 연관된 릴레이션들에 적용됩니다.
외래키는 참조할 수 없는 값을 가질 수 없습니다. 외래키는 다른 릴레이션의 기본키를 참조하는 속성이고, 릴레이션 간의 관계를 표현하는 역할을 하는데 외래키가 자신이 참조하는 릴레이션의 기본키와 상관없는 값을 가지게 되면 두 릴레이션을 연관시킬 수 없게 되므로 외래키의 본래 의미가 없어지게 됩니다. 그러므로 외래키는 자신이 참조하는 릴레이션에 기본키 값을 존재하는 값, 즉 참조 가능한 값만 가져야 합니다.
외래키가 NULL값을 가진다면 참조 무결성 제약조건을 위반했다고 판단 할 수 있을까요? 그렇지는 않습니다. NULL 값을 가진다고 해서 참조 무결정제약조건을 위반한 것으로 판단해서는 안됩니다.
예) "수강" 릴레이션의 '학번' 속성에는 "학생" 릴레이션의 '학번' 속성에 없는 값은 입력 할 수 없습니다.
도메인 무결성
특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정입니다.
예) '학년' 속성의 도메인에는 '1', '2', '3', '4'로, 그 외의 값은 입력할 수 없습니다.
잠깐, 간단 연습문제
- '릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다.'는 제약 조건은 ? ( 참조 무결성 제약조건 )
- 두 릴레이션에 저장된 튜플 간에 데이터 일관성을 유지하기 위한 것으로서, 릴레이션 R1에 저장된 튜플이 릴레이션 R2에 있는 튜플을 참조하려면 참조되는 튜플이 반드시 R2에 존재해야 한다는 조건은 ? ( 참조 무결성 제약 조건 )
- 한 릴레이션의 기본키를 구성하는 어떠한 속성도 NULL 값이나 중복값을 가질 수 없다는 제약 조건은 ? ( 개체 무결성 제약조건 )
- 외래키의 속성명과 참조하려는 테이블의 기본키의 속성명은 동일해야 한다. ( X )
- 외래키의 속성들은 참조하려는 테이블과 기본키, 도메인, 기본키의 속성 개수 등이 돌일해야 하지만 속성명은 동일하지 않아도 됩니다. ( O )