정규화란?
데이터베이스 정규화는 관계형 데이터베이스 데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정을 뜻한다. 일반적으로 크고 제대로 조직되지 않은 테이블들을 잘 조직된 여러 개의 테이블을 나누는 과정이라고 생각하면 이해하기 쉽다. 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하는데에 그 목적이 있다.
- 불필요하거나 중복되는 데이터들을 제거.
- 이상현상(Anomaly)을 방지.
- 데이터 저장을 논리적으로 함.
- 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지.
- 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할.
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함.
- 데이터 삽입 시 릴레이션을 재구성할 필요성 감소.
- 효과적인 검색 알고리즘 생성 가능.
데이터를 효율적으로 관리하기 위해서는 위의 3가지를 고려해 데이터모델을 재설계해야 한다. 이렇게 정규화를 수행하면 비즈니스 로직에 변화가 생기더라도 데이터 모델의 변경을 최소화할 수 있다.
이상현상(Anomaly)이란?
- 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
- 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생
- 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생
이상현상의 종류
- 삭제 이상
: 데이터 삭제 시 의도와는 상관없이 다른 정보까지 연쇄적으로 삭제되는 현상
- 삽입 이상
: 데이터 삽입 시 의도와는 상관없이 원하지 않는 값들도 함께 삽입되는 현상
- 수정 이상
: 데이터 수정 시 의도와는 상관없이 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상
정규화 절차
정규화 절차 | 설명 |
제 1정규화 | 속성(Attribute)의 원자성을 확보하고 원자값이 아닌 도메인을 분해한다. |
제 2정규화 | 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다. |
제 3정규화 | 기본키를 제외한 컬럼간의 종속성을 제거한다. 즉 이행 함수 종속성을 제거한다. |
정규화는 제 1정규화부터 제 5정규화까지 있지만, 실질적으로는 제3 정규화까지만 수행한다.
1NF
First Normal Form
1NF를 만족하려면 도메인이 원자값이어야 한다.
- 1NF를 만족하지 않는 릴레이션
수강과목수강자
수학 | 홍길동 |
과학 | 임꺽정, 신사임당 |
사회 | 홍길동, 임꺽정 |
국어 | 홍길동 | ||
수학 | 신사임당 | 홍길동 | |
영어 | 고길동 | 신사임당 | 홍길동 |
- 수강자 속성이 원자값이 아니다.
- 유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다
- 발생할 수 있는 이상(Anomaly)의 예
- 갱신이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
- UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
- 삭제 이상: 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
- DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'
- 갱신이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
- 1NF를 만족시키는 릴레이션
수강과목수강자일련번호
수학 | 홍길동 | 1 |
과학 | 임꺽정 | 2 |
과학 | 신사임당 | 3 |
사회 | 홍길동 | 4 |
사회 | 임꺽정 | 5 |
- 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
- 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.
2NF
Second Normal Form2NF를 만족하려면 부분적 함수 종속을 제거해야 한다.
- 즉 완전 함수 종속이 되도록 해야 한다.
- 2NF를 만족하지 않는 릴레이션
학번이름소속학과학과장
1901 | 홍길동 | 컴퓨터과 | 김교수 |
1845 | 임꺽정 | 전자과 | 박교수 |
1706 | 신사임당 | 기계과 | 천교수 |
1925 | 장영실 | 컴퓨터과 | 김교수 |
- 학번 <-> 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)
- 하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
- 즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.
- 지도교수 사무실도 학번에
- 발생할 수 있는 이상(Anomaly)의 예
- 삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.
- 갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
- 삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.
- 2NF를 만족시키는 릴레이션
학번이름소속학과
1901 | 홍길동 | 컴퓨터과 |
1845 | 임꺽정 | 전자과 |
1706 | 신사임당 | 기계과 |
1925 | 장영실 | 컴퓨터과 |
학과학과장
컴퓨터과 | 김교수 |
전자과 | 박교수 |
기계과 | 천교수 |
- 이와 같이 릴레이션을 구분하는 것이 바람직하다.
3NF
Third Normal Form3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
- 이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계
- 3NF를 만족하지 않는 릴레이션
- 소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.
- 홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.
1901 | 홍길동 | 컴퓨터과 | 공대 |
1845 | 임꺽정 | 전자과 | 공대 |
1706 | 신사임당 | 경제 | 경상 |
1925 | 장영실 | 경영 | 경상 |
- 발생할 수 있는 이상(Anomaly)의 예
- 삽입이상: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
- 갱신이상: 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
- 삭제이상: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.
- 3NF를 만족시키는 릴레이션
1901 | 홍길동 | 컴퓨터과 |
1845 | 임꺽정 | 전자과 |
1706 | 신사임당 | 경제 |
1925 | 장영실 | 경영 |
컴퓨터과 | 공대 |
전자과 | 공대 |
경제 | 경상 |
경영 | 경상 |
BCNF
Boyce and Codd Normal FormBCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
- BCNF를 만족하지 않는 릴레이션
100 | 데이터베이스 | 홍길동 |
100 | 자료구조 | 임꺽정 |
200 | 네트워크 | 장영실 |
300 | 인공지능 | 유관순 |
- 제약사항
- 한 학생은 동일한 과목에 대해 한교수에게만 수강가능
- 각 교수는 하나의 과목만 담당
- 한 과목은 여러 교수가 담당가능
- 분석
- (학번 + 과목)은 교수를 결정 짓는다.
- 교수는 과목을 결정 짓는다.
- 즉, 교수 또한 결정자인데 교수는 학번을 결정 지을 수 없으므로 후보키는 아니다.
- 발생할 수 있는 이상(Anomaly)의 예
- 삽입이상: 200학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
- 갱신이상: 홍길동의 담당 과목이 알고리즘으로 바뀌었다. 담당 과목을 변경할 경우, 학생의 수강 과목이 변경되어 버린다.
- 삭제이상: 300학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.
- BCNF를 만족시키는 릴레이션
100 | DB01 |
100 | DS01 |
200 | NW01 |
300 | AI01 |
DB01 | 데이터베이스 | 홍길동 |
DS01 | 자료구조 | 임꺽정 |
NW01 | 네트워크 | 장영실 |
AI01 | 인공지능 | 유관순 |
4NF
Fourth Normal Form4NF를 만족하려면 다치 종속성을 제거해야 한다.
- 4NF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- 4NF를 만족시키는 릴레이션
5NF
Fifth Normal Form5NF를 만족하려면 조인 종속성 제거해야 한다.
- 5NF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- 5NF를 만족시키는 릴레이션
출처-
https://mangkyu.tistory.com/110
https://hongcoding.tistory.com/147
'1일1CS' 카테고리의 다른 글
49. IPC(Inter Process Communication)란? (0) | 2023.02.06 |
---|---|
48. HTTP의 GET과 POST 비교 (0) | 2023.02.03 |
46. 애자일이란? (0) | 2023.02.01 |
45. TDD(Test Driven Development)란? (2) | 2023.01.31 |
44 . DB index (0) | 2023.01.30 |
댓글