DB 무결성
개체 무결성
테이블은 기본 키를 지정하고 그에 따른 무결성 원칙을 지켜야 하는 조건 → 기본 키 제약
- 기본 키는 NULL 값이 올 수 없음
- 기본 키는 테이블 내 오직 하나의 값만 존재
참조 무결성
테이블 간의 참조 관계를 선언하는 제약 조건 → 외래 키 제약
- 외래 키는 NULL이거나 참조 릴레이션의 기본 키 값과 동일해야 함
- 외래 키 속성은 참조할 수 없는 값을 지닐 수 없음
- 외래 키 속성 값이 참조 릴레이션의 기본 키에 존재하는 데이터이어야 함
도메인 무결성
테이블에 존재하는 필드의 무결성을 보장하기 위한 것
- 필드의 타입, NULL 값 허용 등에 대한 사항 정의하고 올바른 데이터가 입력되었는지 확인하는 조건
- ex) 성별 필드에
male
, female
외의 맞지 않는 값 넣은 경우 도메인의 무결성이 깨짐
키(Key)란?
DB에서 각 튜플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임
키(Key) 종류
유일성: 하나의 키 값으로 튜플을 유일하게 식별할 수 있는 성질
최소성: 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질

슈퍼 키(Super Key)
한 릴레이션 내의 특정 튜플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
→ 유일성을 만족하는 키
[특징]
- 튜플을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있음
- 어떤 속성끼리의 조합이든 중복값 없이 서로 구별만 가능하면 가능 → 최소성 만족 X
[예시]

- [학번], [이메일] → 중복되는 경우 X ⇒ 슈퍼 키 O
- [이름], [학년] → 중복 될 수 O ⇒ 슈퍼 키 X
- [학번, 이름, 학년] → 학번이 각 튜플 구분 가능 ⇒ 슈퍼 키 O
후보 키(Candidate Key)
기본키가 될 수 있는 후보들, 유일성과 최소성을 동시에 만족하는 키
[특징]
- 튜플을 유일하게 구별하기 위해 꼭 필요한 최소한의 속성들로만 이루어짐
- 두 개 이상의 애트리뷰트로 이루어 질 수 있음 → 복합키

- [학번, 이름, 학년] → 이름과 학년은 튜플을 식별하는 데 굳이 필요하지 않음, 학번으로만으로 튜플 식별 가능 → 후보 키 X
- [학번], [이메일] → 튜플 식별 가능 → 후보 키 O
기본 키(Primary Key)
후보 키 중 선택된 키, 유일성과 최소성 모두 만족하는 키 → 후보 키 중 딱 하나만 가능
❗️ 자연 키와 인조 키
자연 키(Natural Key): 해당 릴레이션 내에 있는 속성
- 학생 릴레이션에서 학번, 이름, 이메일, 학년 속성이 있다고 가정
- 이름과 학년은 중복된 값이 존재하는 경우가 있기 때문에 기본 키로 사용할 수 없음
- 학번, 이메일 중 기본 키로 사용 가능
- 이때, 해당 릴레이션에 있는 속성들 중 하나를 ‘자연스레’ 뽑은 키를 자연 키라고 함
인조 키(Artificial Key): 릴레이션 내에 있는 속성이 아닌 인조적으로 키 역할을 부여하기 위해 만든 키
- 예를 들어, Auto Increment가 있음 → 1부터 시작해서 숫자 부여
- 자연 키는 중간에 데이터가 변할 위험이 있지만, 인조 키는 변할 위험이 없음
- 속성들 중 기본 키가 보안이 중요한 데이터인 경우, 자연 키 대신 인조 키 사용
- 대부분 상황에서 자연 키보다 인조 키 사용
⇒ 자연 키: UK로 사용, 인조 키: PK로 사용
[기본 키 선택 기준] → 데이터 베이스 관리자나 설계자의 몫
- NULL 값 들어갈 수 X
- 값이 자주 변경될 수 있는 속성 X
- 단순한 후보키를 선택 → 작은 정수 값 or 짧은 문자열

대체 키(Alternate Key)
후보 키 중 기본 키로 선택되지 않은 키 → 기본 키를 대신할 수 있는 키

- 기본 키가 없어지면 대체 키가 기본 키가 될 수 있음
복합 키(Composite Key)
다수(2개 이상)의 속성을 사용한 키
ex) 학번+이메일, 학번+학년, 이름+이메일, 학번+이름, 이름+학년 등
외래 키(Foreign Key)
다른 테이블의 기본키를 그대로 참조하는 값

[특징]
- 개체와의 관계 식별할 때 사용
- 참조 될 테이블이 먼저 만들어진 후, 참조하는 테이블에 값이 입력되어야 함
- 참조되는 테이블의 기본키와 동일한 키 속성 가짐
- 참조되는 테이블 먼저 삭제 안됨 → 참조하는 테이블 먼저 삭제 후 참조되는 테이블 삭제 가능
- 중복되어도 괜찮음
유일(고유) 키(Unique Key)
테이블에서 특정 필드의 값을 고유하게 만들기 위해 사용
- 기본 키와 달리 NULL값을 포함할 수 있음
- 중복은 허용하지 않음
- 여러 개 설정 가능
❗️ 기본 키와 유일 키의 차이
기본 키는 릴레이션 내의 각 레코드를 식별하기 위해 사용되며, null 값과 중복 값을 허용하지 않음. 또한, 하나의 릴레이션 안에 오직 하나만 설정 가능
유일 키는 어떠한 속성의 유일성을 확보하기 위해 사용되며, 중복 값은 허용하지 않지만 null 값은 허용함. 기본 키와 달리 한 릴레이션 안에 여러 개 지정 가능
[데이터베이스] 키의 개념과 종류
[DB] 📚 데이터베이스 키(KEY) 종류 🕵️ 정리
[Database] 자연키(Natural key)와 대체키(Surrogate Key), PK(기본키)를 대체키로 설정해야 하는 이유
[MySQL] 10. SQL 테이블 제약조건(기본키, 외래키, 고유키)
[Database] 데이터 무결성(Data Integrity)이란?