## 테이블 구성: 필드와 레코드
- 필드 타입: 각 필드로 사용가능한 데이터 유형
- 키: 테이블 내의 특정 레코드를 식별할 수 있는 값
- 각 레코드를 식별하고, 테이블 간의 참조를 위해 사용, 테이블의 접근 속도를 높이기 위해 사용
키 종류
| 키 | 조건 | 학생 테이블 예시 |
| 슈퍼키 | 유일성 만족 | {학번, 이름} |
| 후보키 | 유일성 + 최소성 | 학번, 이메일 |
| 기본키 | 후보 키 중 하나를 선정, NULL 불가 | 학번 |
| 외래키 | 다른 테이블의 기본 키를 참조 | 수강 테이블의 학번 |
| 대체키 | 기본 키로 선정되지 않은 후보 키 | 이메일 |
| 복합키 | 두 개 이상의 필드로 구성 | 수강 테이블의 {학번, 강의번호} |
기본 키(PRIMARY KEY, PK)
- 한 레코드를 식별하도록 선정되어 테이블당 하나만 존재 하는 키
- 유일성과 최소성 만족
- 중복된 값이 없어야 하고, 반드시 값이 존재해야 하며 레코드를 구분하기 위한 최소한의 정보만으로 이루어져야 한다.
외래 키(FOREIGN KEY, FK)
- 다른 테이블의 기본 키를 참조하는 필드로, 테이블 간의 참조 관계를 형성할때 사용
## 테이블 관계
- 1:1 관계
- 하나의 레코드가 다른 테이블의 한개 레코드와 대응되는 관계
- 1:N 관계
- 하나의 레코드가 다른 테이블의 여러 레코드와 대응되는 관계
- N:N 관계
- 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 대응되는 관계
- 테이블 간 N:N 대응 관계는 일반적으로 중간 테이블을 수반
## 무결성 제약 조건
- 데이터베이스에 저장된 데이터의 일관성과 유효성을 유지하기 위해 마땅히 지켜야하는 조건
제약조건
1. 도메인 제약
2. 키 제약
3. 엔티티 무결성 제약
4. 참조 무결성 제약
도메인 제약
- 테이블이 가질 수 있는 필드 타입과 범위에 대한 규칙
- 각 필드 데이터는 원자 값을 가져야 함(더 이상 쪼갤 수 없는)
- 지정된 필드 타입을 준수해야 함
- 값의 범위나 기본값이 지정되었을 경우 그를 따라야 함
키 제약
- 중복 값이 존재해서는 안된다.
엔티티 무결성
- 기본키로 지정한 필드는 고유값이어야 하며, null 이 되어서는 안됨 (NOT NULL)
참조 무결성
- 외래키를 통해 다른 테이블을 참조할 때 데이터의 일관성을 지키기 위한 조건
- 외래키는 참조하는 테이블의 기본 키와 같은 값을 갖거나 null 값을 가져야 함
* 만약 참조하는 테이블의 레코드가 수정 or 삭제 되었을 땐?
1. 연산제한(Restrict)
- 주어진 연산을 수행하지 않는다
2. 기본값 설정(SET DEFAULT)
- 설정된 기본값으로 대체한다.
3. Null 설정(SET NULL)
- Null로 대체한다.
4. 연쇄변경(Cascade)
- 참조하는 레코드도 함께 수정 or 삭제한다.
## 마무리
- Imprint를 개발할 당시 supabase를 통해 DB를 만들었다. Claude Code가 테이블 간 참조에 Cascade를 적용해줬다. 당시에는 뭔지는 정확히 몰랐다. 하지만 강의를 통해서 Cascade의 정확한 기능을 알게되었다.
- Foreign key는 항상 헷갈렸는데 이번에 개념도 제대로 잡을 수 있었다.
참고. 이것이 컴퓨터 과학이다 - 강민철
'Coding > CS' 카테고리의 다른 글
| CS - 데이터베이스 설계 (0) | 2026.10.22 |
|---|---|
| CS - 효율적 쿼리 (0) | 2026.10.21 |
| CS - Database SQL (0) | 2026.10.19 |
| CS - Database 용어 정리 및 사용이유 (0) | 2026.10.16 |