반응형
데이터베이스를 하게 되면 정규화 라는 단어를 접하게 된다.
특정 조건에 맞추어 어떠한 형태를 해두는것이 정규화인데,
조건에 만족이 되어있다면 정규형이고, 다음차 정규화 대상이라고 표현한다.
데이터베이스에서는 1-5차 정규화가 존재하며 가장 많이 쓰이는 1-3 차 정규화에 대해 다뤄볼 것이다.
먼저 예시를 위해 아래 처럼 테이블이 존재한다고 가정하자.
학번(기본키) | 이름 | 과목번호 | 과목 | 성적 |
A0001 | 홍길동 | S1,S2 | 수학,과학 | 80,90 |
A0002 | 이순신 | S3 | 영어 | 70 |
먼저 1차 정규화는 테이블의 컬럼이 원자값을 갖도록, 한개의 값만 갖도록 하게 하는것이다.
지금 위 표에서 과목과 성적에 홍길동 학생이 두개의 값이 있다.
예시를 1차 정규화를 적용시켜보겠다.
1차 정규화 결과
(모든 값은 원자값으로 구성)
학번 | 이름 | 과목번호 | 과목 | 성적 |
A0001 | 홍길동 | S1 | 수학 | 80 |
A0001 | 홍길동 | S2 | 과학 | 90 |
A0002 | 이순신 | S3 | 영어 | 70 |
이렇게 하면 1차 정규형이 된다.
그러고 나서 보면 학번과 이름은 종속적이다. 학번과 이름은 항상 1대 1인 관계인 셈이다.
이걸 분리해줘야한다.
2차 정규화를 적용시켜보겠다.
2차 정규화 결과
(부분함수 종속 제거)
학번 | 이름 |
A0001 | 홍길동 |
A0002 | 이순신 |
학번 | 과목번호 | 과목 | 성적 |
A0001 | S1 | 수학 | 80 |
A0001 | S2 | 과학 | 90 |
A0002 | S3 | 영어 | 70 |
이렇게 테이블을 분리해줄수 있다.
이렇게하고 나면 2차 정규형이 된다.
그리고 나서 보면 기본키인 학번을 제외하고도 과목번호와 과목은 이행적 종속이 되어있다.
해당 부분을 3차 정규화 적용시켜보겠다.
3차 정규화 결과
(이행적 함수 종속 제거)
학번 | 이름 |
A0001 | 홍길동 |
A0002 | 이순신 |
학번 | 과목번호 | 성적 |
A0001 | S1 | 80 |
A0001 | S2 | 90 |
A0002 | S3 | 70 |
과목번호 | 이름 |
S1 | 수학 |
S2 | 과학 |
S3 | 영어 |
이렇게 까지 하면 3차 정규형 까지 완성이 된다.
쉽게 정리하면
- 1차
- 콤마 지워서 값은 하나씩
- 2차
- 기본키에 묶여있는 종속되어있는것들 제외
- 3차
- 기본키랑은 상관없는 컬럼에 대해 종속 제외
반응형
'IT > Database' 카테고리의 다른 글
[Oracle] (+) Join 의미 (43) | 2023.11.20 |
---|---|
[Oracle] savepoint (33) | 2023.11.11 |
[Oracle] 테이블 명 조회 쿼리 / 뷰 조회 쿼리 / 프로시저 / 시퀀스 조회 쿼리 (43) | 2023.11.03 |
그룹함수 (GROUP BY, ROLLUP, CUBE, GROUPING-SET, GROUPING) (44) | 2023.11.02 |
[Mssql/Sqlserver] Top N with ties (48) | 2023.11.01 |
댓글