슈퍼키, 후보키, 기본키, 대체키
슈퍼키와 후보키의 구분
슈퍼키 (super key)
- 유일성을 갖지만 최소성을 만족시키지 못하는 애트리뷰트 집합
- 하나의 키 값으로 하나의 튜플을 유일하게 식별할 수 있는 애트리뷰트들의 조합
후보키 (candidate key)
- 유일성과 최소성의 2가지 특징을 모두 만족하는 애트리뷰트의 집합
- 유일성: 릴레이션에 있는 모든 튜플에 대해 키 값이 모두 다른 경우
- 최소성(비분해성): 키에 속하는 애트리뷰트 집합 K중에서 어떤 애트리뷰트 하나라도 제외할 때 키의 유일성이 없어지는 키의 성질을 갖는 것
- 후보키의 슈퍼집합은 슈퍼키
예시
- 슈퍼키 (유일성만 만족)
- 학번+주민번호, 학번+이름, 학번+주소, 학번+전공, 주민번호+이름, 주민번호+주소, 주민번호+전공
- 후보키 (유일성과 최소성 모두 만족)
기본키와 대체키의 구분
기본키 (primary key)
- 후보키 중에서 데이터베이스 설계자가 지정한 하나의 키(key)를 말하며 튜플을 유일하게 식별할 수 있는 애트리뷰트 집합
- 기본키는 널 값을 가질 수 없음
대체키 (alternate key)
- 후보키가 둘 이상 되는 경우에 그 중에서 어느 하나를 기본키로 지정하면, 나머지 후보키들은 대체키가 됨
- 예를 들면, 후보키가 3개면 1개가 기본키, 나머지 2개가 대체키
외래키
- foreign key
- 릴레이션 R1에 속한 한 애트리뷰트 집합을 FK로 가정, 만일 이 FK의 값은 반드시 어떤 릴레이션 R2의 기본키 값이어야 한다고 할 때 이 FK를 릴레이션 R1의 외래키라 함
- 이 경우에 애트리뷰트 FK는 릴레이션 R2를 참조(reference)한다고 하고 릴레이션 R1을 참조 릴레이션(referencing relation), 릴레이션 R2를 피참조 릴레이션(referenced relation)이라 함
- 값 변경의 제약을 받음
- 외래키와 참조 기본키의 도메인은 동일해야 함
- 주어진 외래키의 모든 값은 기본키와 부합되는 값을 가져야 함
- 외래키는 참조할 튜플을 결정하지 못한 경우 널 값을 가질 수 있음
외래키 예시
- 교수(교수번호, 교수명, 학과번호, 직급): 기본키(교수번호), 외래키(학과번호)
- 학과(학과번호, 학과명, 학과장교수번호, 학생수): 기본키(학과번호), 외래키(학과장교수번호)
외래키 정의 시 고려사항
- Cascaded Option: 기본키 삭제 및 수정 시 외래키 튜플 함께 삭제, 수정
- Nullified Option: 기본키 삭제 및 갱신 시 외래키 값을 Null로 세팅
- Restricted Option: 외래키가 존재하면 기본키 삭제 및 갱신 거부
- Default Option: 기본키 삭제 및 갱신 시 외래키 값을 default 값으로 세팅
SQL에서 기본키, 대체키, 외래키 표현 방법
- 기본키는 SQL 문에서 PRIMARY KEY라는 키워드를 통해 표현
- 대체키는 SQL 문에서 UNIQUE라는 키워드를 통해 표현
- 외래키는 SQL 문에서 FOREIGN KEY라는 키워드를 통해 표현
- 참조무결성 제약조건(constraint) 옵션: SET NULL, SET DEFAULT, CASCADE, NO ACTION
무결성의 종류
- 무결성 제약 (Integrity Constraint)
개체 무결성
- entity integrity
- 실체는 각 인스턴스를 유일하게 식별할 수 있는 속성이나 속성 그룹을 가져야 함
- 데이터베이스에서 가장 중요한 무결성 조건으로 기본키 값은 NOT NULL이고 유일(UNIQUE)
- 기본키는 널 값을 가질 수 없으나 대체키는 널 값을 가질 수 있음
도메인 무결성
- domain integrity
- 칼럼 데이터 타입, 길이, 유효 값이 일관되게 유지되어야 함
- 각 속성이 갖는 값들은 그 속성의 도메인 범위 내에 속해야 함
- 점수 속성이 0∼100이면 120 입력 시 입력을 거부함으로서 데이터의 무결성 유지
- 주문일 칼럼 값이 20200230이라면 유효한 데이터가 아님 → 2월 30일은 존재할 수 없기 때문임
- 근무상태를 1: 정상, 2: 휴직, 3: 퇴직 등으로 3가지 상태를 비즈니스 규칙에 의해서 유효값으로 정의된 경우 4: 복직이나 NULL 상태는 존재할 수 없음 → 칼럼 유효 값에 대한 제약 조건으로 CHECK를 이용하여 해결
- 상품 테이블에 상품명은 필수 입력 사항이면 상품명에 NULL 값은 존재할 수 없음 → 상품명이 반드시 존재하기 위해 NOT NULL 제약 조건을 사용
참조 무결성
- referential integrity
- 데이터 모델에서 정의된 실체 간의 관계 조건을 유지하는 것
- 외래키는 널이거나 참조되는 릴레이션에 있는 기본키와 같아야 하며 이때 외래키가 널이라는 것은 아직까지 참조할 튜플을 결정하지 못했다는 의미
- 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음
- 참조 무결성은 SQL 내에 trigger condition을 두어 어떤 연산의 전(before)이나 후(after)에 혹은 연산 시에 참조 무결성의 제약 조건을 검사하게 함으로써 가능
- 입력 참조 무결성
- DEPENDENT: 참조되는(부모) 테이블에 PK 값이 존재할 때만 입력을 허용
- AUTOMATIC: 참조되는(부모) 테이블에 PK 값이 없는 경우는 PK를 생성 후 입력
- DEFAULT: 참조되는(부모) 테이블에 PK 값이 없는 경우 지정된 기본값으로 입력
- CUSTOMIZED: 특정한 조건이 만족할 때만 입력을 허용
- NULL: 참조되는(부모) 테이블에 PK 값이 없는 경우 외부키를 NULL 값으로 처리
- NO EFFECT: 조건 없이 입력을 허용
- 수정/삭제 참조 무결성
- RESTRICT: 참조하는(자식) 테이블에 PK 값이 없는 경우 삭제/수정 허용
- CASCADE: 참조되는(부모) 테이블과 참조하는 테이블의 외부키를 연쇄적 삭제/수정
- DEFAULT: 참조되는(부모) 테이블의 수정을 항상 허용하고 참조하는(자식) 테이블의 외부키를 지정된 기본값으로 변경
- CUSTOMIZED: 특정한 조건이 만족할 때만 수정/삭제 허용
- NULL: 참조되는(부모) 테이블의 수정을 항상 허용하고 참조하는(자식) 테이블의 외부키를 NULL 값으로 수정
- NO EFFECT: 조건 없이 삭제/수정 허용
의미 무결성
- semantic integrity
- 다양하게 정의될 수 있는 비즈니스 규칙이 데이터적으로 일관성을 유지하는 것
- 사용자의 의미적 요구사항 준수를 의미
- 예를 들면 쇼핑몰에서 배송 수량은 주문 수량보다 클 수 없음