데이터베이스 정규화 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
;;Database Normalization | ;;Database Normalization | ||
== | == 이상(Anomaly) 현상 == | ||
* 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상 | |||
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상 | * 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생 | ||
*데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생 | * 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생 | ||
*애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생 | |||
== 이상 종류 == | |||
;삽입할때 잘못 삽입됨, 갱신할때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고 | |||
* '''삽입 이상(Insertion Anomaly)''' | |||
** 데이터 삽입 시 의도와 다른 값들도 삽입됨 | |||
* '''삭제 이상(Delete Anomaly)''' | |||
** 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨 | |||
* '''갱신 이상(Update Anomaly)''' | |||
** 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생 | |||
==정규화 과정== | == 정규화 과정 == | ||
===1NF=== | === 1NF === | ||
;First Normal Form | ;First Normal Form | ||
1NF를 만족하려면 '''도메인이 원자값'''이어야 한다. | 1NF를 만족하려면 '''도메인이 원자값'''이어야 한다. | ||
* '''1NF를 만족하지 않는 릴레이션''' | |||
*'''1NF를 만족하지 않는 릴레이션''' | |||
:{| class="wikitable" | :{| class="wikitable" | ||
!수강과목 | ! 수강과목 | ||
!수강자 | ! 수강자 | ||
|- | |- | ||
|수학 | | 수학 | ||
|홍길동 | | 홍길동 | ||
|- | |- | ||
|과학 | | 과학 | ||
|임꺽정, 신사임당 | | 임꺽정, 신사임당 | ||
|- | |- | ||
|사회 | | 사회 | ||
|홍길동, 임꺽정 | | 홍길동, 임꺽정 | ||
|} | |} | ||
:* 수강자 속성이 원자값이 아니다. | |||
:*수강자 속성이 원자값이 아니다. | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | * '''발생할 수 있는 이상(Anomaly)의 예''' | ||
**''' | ** '''갱신이상''': 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다. | ||
*** UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동' | *** UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동' | ||
**'''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다. | ** '''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다. | ||
***DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정' | *** DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정' | ||
*'''1NF를 만족시키는 릴레이션''' | * '''1NF를 만족시키는 릴레이션''' | ||
:{| class="wikitable" | :{| class="wikitable" | ||
!수강과목 | ! 수강과목 | ||
!수강자 | ! 수강자 | ||
!일련번호 | ! 일련번호 | ||
|- | |- | ||
|수학 | | 수학 | ||
|홍길동 | | 홍길동 | ||
|1 | | 1 | ||
|- | |- | ||
|과학 | | 과학 | ||
|임꺽정 | | 임꺽정 | ||
|2 | | 2 | ||
|- | |- | ||
|과학 | | 과학 | ||
|신사임당 | | 신사임당 | ||
|3 | | 3 | ||
|- | |- | ||
|사회 | | 사회 | ||
|홍길동 | | 홍길동 | ||
|4 | | 4 | ||
|- | |- | ||
|사회 | | 사회 | ||
|임꺽정 | | 임꺽정 | ||
|5 | | 5 | ||
|} | |} | ||
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다. | :* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다. | ||
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다. | :* 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다. | ||
== 2NF == | |||
== | |||
;Second Normal Form | ;Second Normal Form | ||
;2NF를 만족하려면 '''부분적 함수 종속'''을 제거해야 한다. | ;2NF를 만족하려면 '''부분적 함수 종속'''을 제거해야 한다. | ||
* 즉 완전 함수 종속이 되도록 해야 한다. | |||
*즉 완전 함수 종속이 되도록 해야 한다. | * '''2NF를 만족하지 않는 릴레이션''' | ||
*'''2NF를 만족하지 않는 릴레이션''' | |||
:{| class="wikitable" | :{| class="wikitable" | ||
!학번 | ! 학번 | ||
!이름 | ! 이름 | ||
!소속학과 | ! 소속학과 | ||
!학과장 | ! 학과장 | ||
|- | |- | ||
|1901 | | 1901 | ||
|홍길동 | | 홍길동 | ||
|컴퓨터과 | | 컴퓨터과 | ||
|김교수 | | 김교수 | ||
|- | |- | ||
|1845 | | 1845 | ||
|임꺽정 | | 임꺽정 | ||
|전자과 | | 전자과 | ||
|박교수 | | 박교수 | ||
|- | |- | ||
|1706 | | 1706 | ||
|신사임당 | | 신사임당 | ||
|기계과 | | 기계과 | ||
|천교수 | | 천교수 | ||
|- | |- | ||
| 1925 | | 1925 | ||
|장영실 | | 장영실 | ||
|컴퓨터과 | | 컴퓨터과 | ||
|김교수 | | 김교수 | ||
|} | |} | ||
:*학번 <-> 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정) | :* 학번 <-> 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정) | ||
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다. | :* 하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다. | ||
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다. | :* 즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다. | ||
:* 지도교수 사무실도 학번에 | |||
*'''발생할 수 있는 이상(Anomaly)의 예''' | * '''발생할 수 있는 이상(Anomaly)의 예''' | ||
** | ** 삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다. | ||
** | ** 갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다. | ||
** | ** 삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다. | ||
*'''2NF를 만족시키는 릴레이션''' | * '''2NF를 만족시키는 릴레이션''' | ||
:{| class="wikitable" | :{| class="wikitable" | ||
!학번 | ! 학번 | ||
!이름 | ! 이름 | ||
!소속학과 | ! 소속학과 | ||
|- | |- | ||
|1901 | | 1901 | ||
|홍길동 | | 홍길동 | ||
|컴퓨터과 | | 컴퓨터과 | ||
|- | |- | ||
|1845 | | 1845 | ||
|임꺽정 | | 임꺽정 | ||
|전자과 | | 전자과 | ||
|- | |- | ||
|1706 | | 1706 | ||
| 신사임당 | | 신사임당 | ||
|기계과 | | 기계과 | ||
|- | |- | ||
|1925 | | 1925 | ||
|장영실 | | 장영실 | ||
|컴퓨터과 | | 컴퓨터과 | ||
|} | |} | ||
:{| class="wikitable" | :{| class="wikitable" | ||
!학과 | ! 학과 | ||
! 학과장 | ! 학과장 | ||
|- | |- | ||
|컴퓨터과 | | 컴퓨터과 | ||
|김교수 | | 김교수 | ||
|- | |- | ||
|전자과 | | 전자과 | ||
|박교수 | | 박교수 | ||
|- | |- | ||
| 기계과 | | 기계과 | ||
|천교수 | | 천교수 | ||
|} | |} | ||
:*이와 같이 릴레이션을 구분하는 것이 바람직하다. | :* 이와 같이 릴레이션을 구분하는 것이 바람직하다. | ||
== 3NF == | |||
;Third Normal Form | ;Third Normal Form | ||
;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다. | ;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다. | ||
* 3NF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* 3NF를 만족시키는 릴레이션 | |||
== 4NF == | |||
;Fourth Normal Form | ;Fourth Normal Form | ||
;4NF를 만족하려면 | ;4NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다. | ||
* 4NF를 만족하지 않는 릴레이션 | |||
*4NF를 만족하지 않는 릴레이션 | * '''발생할 수 있는 이상(Anomaly)의 예''' | ||
*'''발생할 수 있는 이상(Anomaly)의 예''' | |||
* 4NF를 만족시키는 릴레이션 | * 4NF를 만족시키는 릴레이션 | ||
== | == BCNF == | ||
;Boyce and Codd Normal Form | |||
;BCNF를 만족하려면 다치 종속성을 제거해야 한다. | |||
* BCNF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* BCNF를 만족시키는 릴레이션 | |||
== 5NF == | |||
;Fifth Normal Form | ;Fifth Normal Form | ||
;5NF를 만족하려면 | ;5NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다. | ||
* 5NF를 만족하지 않는 릴레이션 | |||
*5NF를 만족하지 않는 릴레이션 | * '''발생할 수 있는 이상(Anomaly)의 예''' | ||
*'''발생할 수 있는 이상(Anomaly)의 예''' | * 5NF를 만족시키는 릴레이션 | ||
*5NF를 만족시키는 릴레이션 |