본 게시글은 아래의 게시물을 필사하였습니다.
이상(Anomaly)현상
- 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
- 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제가 발생
- 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생
이상 종류
:삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고
- 삽입 이상(Insertion Anomaly)
- 데이터 삽입 시 의도와 다른 값들도 삽입됨
- 삭제 이상(Delete Anomaly)
- 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨
- 갱신 이상(Update Anomaly)
- 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생
정규화 목적
- 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
- 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
- 데이터 삽입 시 릴레이션을 재구성할 필요성 감소
- 효과적인 검색 알고리즘을 생성 가능
정규화 과정
1NF : First Normal Form
1NF를 만족하려면 도메인이 원자값이어야 한다.
- 1NF를 만족하지 않는 릴레이션
- 수강자 속성이 원자값이 아니다.
수강과목 | 수강자 |
수학 | 홍길동 |
과학 | 임꺽정, 신사임당 |
사회 | 홍길동, 임꺽정 |
- 발생할 수 있는 이상(Anomaly)의 예
- 갱신 이상 : 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어 버린다.
- UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
- 삭제 이상 : 임꺽정이 '과목'과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제 된다.
- DELETE FROM 과목 WHERE 수강과목 = '과목' AND 수강자 = '임꺽정'
- 갱신 이상 : 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어 버린다.
- 1NF를 만족시키는 릴레이션
- 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
- 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복문제들이 많이 생겨 테이블 구조를 따져봐야 한다.
수강과목 | 수강자 | 일렬번호 |
수학 | 홍길동 | 1 |
과학 | 임꺽정 | 2 |
과학 | 신사임당 | 3 |
사회 | 홍길동 | 4 |
사회 | 임꺽정 | 5 |
2NF : Second Normal Form
2NF를 만족하려면 부분적 함수 종속을 제거해야 한다. 즉 1NF에 속하면서 키본키가 아닌 모든 속성이 기본키에 완전 함수 종속되야한다.
- 즉 완전 함수 종속이 되도록 해야 한다.
- 2NF를 만족하지 않는 릴레이션
- 학번 <-> 이름 + 소속 + 학과장은 종속 관계가 있다.(학 학과내의 이름은 중복되지 않는다고 가정)
- 하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
- 즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재될것이다.
- 컴퓨터과인 칼럼이 추가될 때하다 김교수는 중복된다는 의미이다.
학번 | 이름 | 소속학과 | 학과장 |
1901 | 홍길동 | 컴퓨터과 | 김교수 |
1845 | 임꺽정 | 전자과 | 박교수 |
1706 | 신사임당 | 기계과 | 천교수 |
1925 | 장영실 | 컴퓨터과 | 김교수 |
- 발생할 수 있는 이상(Anomaly)의 예
- 삽입이상 : 컴퓨터과, 전기과, 기계과 학생을 추가하고자 할 경우 더 이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.
- 갱신이상 : 컴퓨터학과의 학과장이 변경될 경우. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
- 삭제이상 : 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.
- 2NF를 만족시키는 릴레이션
- 아래와 같이 릴레이션을 구분하는 것이 바람직하다.
학번 | 이름 | 소속학과 |
1901 | 홍길동 | 컴퓨터과 |
1845 | 임꺽정 | 전자과 |
1706 | 신사임당 | 기계과 |
1925 | 장영실 | 컴퓨터과 |
학과 | 학과장 |
컴퓨터과 | 김교수 |
전자과 | 박교수 |
기계과 | 천교수 |
3NF : Thrid Normal Form
3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
- 이행적 함수 종속 : A → B 이고 B → C 일때 A → C 인 관계
- 3NF를 만족하지 않는 릴레이션
- 소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.
- 홍길동 → 컴퓨터과이고 컴퓨터과 → 공대일 때, 홍길동 → 공대인 관계가 성립한다.
학번 | 이름 | 소속학과 | 대학 |
1901 | 홍길동 | 컴퓨터과 | 공대 |
1845 | 임꺽정 | 전자과 | 공대 |
1706 | 신사임당 | 경제 | 경상 |
1925 | 장영실 | 경영 | 경상 |
- 발생할 수 있는 이상(Anomaly)의 예
- 삽입이상 : 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더 이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.
- 갱신이상 : 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
- 삭제이상 : 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.
학번 | 이름 | 소속학과 |
1901 | 홍길동 | 컴퓨터과 |
1845 | 임꺽정 | 전자과 |
1706 | 신사임당 | 경제 |
1925 | 장영실 | 경영 |
소속학과 | 대학 |
컴퓨터과 | 공대 |
전자과 | 공대 |
경제 | 경상 |
경영 | 경상 |
BCNF : Boyce and Codd Normal Form
BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
- BCNF를 만족하지 않는 릴레이션
학번 | 과목 | 교수 |
100 | 데이터베이스 | 홍길동 |
100 | 자료구조 | 임꺽정 |
200 | 네트워크 | 장영실 |
300 | 인공지능 | 유관순 |
- 제약사항
- 한 학생은 동일한 과목에 대해 한 교수에게만 수강가능
- 각 교수는 하나의 과목만 담당
- 한 과목은 여려 교수가 담당가능
- 분석
- ( 학번 + 과목 )은 교수를 결정한다.
- 교수는 과목을 결정한다.
- 즉, 교수 또한 결정자인데 교수는 학번을 결정 지을 수 없으므로 후보키가 아니다.
- 발생할 수 있는 이상(Anomaly)의 예
- 삽입이상 : 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.
- 갱신이상 : 홍길동의 담당 과목이 알고리즘으로 바뀌었다. 담당 과목을 변경할 경우, 학생의 수강과목이 변경되어 버린다.
- 삭제이상 : 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순교수가 담당하고 있다는 정보가 사라진다.
- BCNF를 만족시키는 릴레이션
학번 | 과목코드 |
100 | DB01 |
100 | DS01 |
200 | NW01 |
300 | AI01 |
과목코드 | 과목 | 교수 |
DB01 | 데이터베이스 | 홍길동 |
DS01 | 자료구조 | 임꺽정 |
NW01 | 네트워크 | 장영실 |
AI01 | 인공지능 | 유관순 |
본 게시글에서는 보이스코드 정규형까지만 나와 있기 때문에 추가로 4, 5정규형도 정리하겠습니다.
4NF : Fourth Normal Form
4NF를 만족하려면 다치 종속성을 제거해야한다.
- 다치(multi-valued) 종속성이란 두 개의 독립된 애트리뷰트가 1 : N 관계로 대응하는 관계이다.
- 개발자가 다수의 자격증을 소유할 수 있고, 다수의 노트북을 사용한다면 아래와 같은 릴레이션을 생각할 수 있다.
개발자 | 자격증 | 사용 노트북 |
데니스 리치 | 정보처리기사 | HP |
데니스 리치 | 리눅스마스터 | LG Gram |
스티브 워즈니악 | 정보처리기사 | Lenovo |
- 자격증과 사용 노트북은 독립된 애트리뷰트이므로 개발자에겐 다치 종속에 해당된다. 아래와 같이 정규화를 진행한다.
개발자 | 자격증 |
데니스 리치 | 정보처리기사 |
데니스 리치 | 리눅스 마스터 |
스티브 워즈니악 | 정보처리기사 |
개발자 | 사용 노트북 |
데니스 리치 | HP |
데니스 리치 | LG Gram |
스티브 워즈니악 | Lenovo |
5NF : Fifth Normal Form
5NF를 만족하려면 조인 종속성 제거해야 한다.
- 위 제 4정규형을 만족하는 릴레이션을 조인하면 아래와 같은 릴레이션이 나온다.
개발자 | 자격증 | 사용 노트북 |
데니스 리치 | 정보처리기사 | HP |
데니스 리치 | 리눅스 마스터 | LG Gram |
데니스 리치 | 정보처리기사 | LG Gram |
데니스 리치 | 리눅스마스터 | HP |
스티브 워즈니악 | 정보처리기사 | Lenovo |
- 개발자 <-> 자격증, 자격증 <-> 사용 노트북, 개발자 <-> 사용노트북 각각의 조인 종속을 제거해주면 아래와 같은 릴레이션이 된다.
개발자 | 자격증 |
데니스 리치 | 정보처리기사 |
데니스 리치 | 리눅스 마스터 |
스티브 워즈니악 | 정보처리기사 |
자격증 | 사용 노트북 |
정보처리기사 | HP |
리눅스 마스터 | LG Gram |
정보처리기사 | Lenovo |
개발자 | 사용 노트북 |
데니스 리치 | HP |
데니스 리치 | LG Gram |
스티브 워즈니악 | Lenovo |
이상으로 정규화와 이상현상에 대해 알아보았습니다.
정규화를 단순하게 암기하기보다는 정규화의 목적을 먼저 살펴보고
각 정규형의 이상현상을 알아보면 왜 정규화를 진행하는지 이해하는데에 훨씬 수월할 것 같습니다.
감사합니다. : )
'필사적 필사' 카테고리의 다른 글
[MYSQL] JOIN과 UNION 문법과 개념 정리 (0) | 2021.06.18 |
---|---|
computed와 watch (0) | 2020.04.24 |
Vue 인스턴스 (0) | 2020.04.24 |
상태 | Vuex (0) | 2020.04.24 |
시작하기 | Vuex (0) | 2020.04.24 |