관계형 데이터 베이스를 사용 -> 정규화 해야함.
EX) mysql, oracledb, h2 등...
비관계형 데이터 베이스를 사용 -> 정규화 안함.
EX) mongoDB, cassandra, dynamoDB 등...
제 1정규화 - 1 Normal Form
정의 : 최소한 테이블은 관계이며, 중복되는 항목이 없는 테이블.
- 한 칸에 한 데이터만 저장 -> 제 1 정규화 만족
1NF 만족
학번 | 수강목록 |
1001 | 수학 |
1002 | 영어 |
1003 | 과학 |
1NF 불만족
학번 | 수강목록 |
1001 | 수학 |
1002 | 영어 |
1003 | 과학, 국어 |
제 2정규화 - 2 Normal Form
- 관련이 없는 테이블은 분리
- 테이블을 최소 단위로 분리
2NF 불만족 예시)
수강신청목록 테이블
학번 | 수강목록 | 가격 |
1001 | 수학 | 1000 |
1002 | 영어 | 2000 |
1003 | 과학 | 3000 |
1004 | 수학 | 1000 |
문제 : 위 수강신청목록 테이블처럼 관리하면, 수학 과목의 가격이 변동될 경우, 1행과 4행의 가격 컬럼을 수정해야함 -> 비효율
2NF 만족 예시)
수강신청목록 테이블
학번 | 수강목록 |
1001 | 수학 |
1002 | 영어 |
1003 | 과학 |
1004 | 수학 |
강의단가 테이블
학번 | 수강목록 |
수학 | 1000 |
영어 | 2000 |
과학 | 3000 |
2NF를 만족하도록 테이블을 분리하면, 강의 단가가 변경될 경우, 강의단가 테이블에서 1번만 수정하면 된다.
patial dependency를 제거한 테이블에 대한 추가 설명)
학번 | 수강목록 | 가격 |
1001 | 수학 | 1000 |
1002 | 영어 | 2000 |
1003 | 과학 | 3000 |
1004 | 수학 | 1000 |
위 테이블에서 학번과 수강목록을 합쳐 복합 키로 만들 수 있다.
이때, 가격 컬럼은 복합 키(학번+수강목록) 중 수강목록에만 부분 종속(patial dependency)된다.
-> 따라서, 가격과 수강목록 컬럼에 대한 테이블을 따로 빼주면, 부분 종속(patial dependency)가 제거된다.
제 3정규화 - 3 Normal Form
PK가 아닌 다른 컬럼에 종속되는 컬럼을 분리
( 2NF와 비슷하다. 차이점은 2NF는 복합키에 대한 부분 종속, 3NF는 PK를 제외한 다른 컬럼에 대한 종속 )
참고 영상:
https://www.youtube.com/watch?v=Y1FbowQRcmI
'CS' 카테고리의 다른 글
[JAVA] 제네릭 - Generic (0) | 2023.03.07 |
---|---|
[컴퓨터구조] 중앙처리장치(CPU) 정리 (0) | 2023.02.21 |
[컴퓨터구조] 용어 별 정리 (0) | 2023.02.20 |
[컴퓨터구조] 컴퓨터의 흐름 - 프로그램의 흐름 , 데이터의 흐름 , 제어신호의 흐름 (0) | 2023.02.20 |
[AI] 신경망 기초 - pytorch (0) | 2022.07.26 |