데이터베이스 정규화 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
4번째 줄: | 4번째 줄: | ||
;;Database Normalization | ;;Database Normalization | ||
== | ==이상(Anomaly) 현상== | ||
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상 | *정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상 | ||
12번째 줄: | 12번째 줄: | ||
===이상 종류=== | ===이상 종류=== | ||
; | ;삽입할때 잘못 삽입됨, 갱신할때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고 | ||
*'''삽입 이상(Insertion Anomaly)''' | *'''삽입 이상(Insertion Anomaly)''' | ||
27번째 줄: | 27번째 줄: | ||
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함 | *어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함 | ||
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소 | *데이터 삽입 시 릴레이션을 재구성할 필요성 감소 | ||
*효과적인 검색 | *효과적인 검색 알고리즘을 생성 가능 | ||
51번째 줄: | 51번째 줄: | ||
|사회 | |사회 | ||
|홍길동, 임꺽정 | |홍길동, 임꺽정 | ||
|} | |} | ||
:*수강자 속성이 원자값이 아니다. | :*수강자 속성이 원자값이 아니다. | ||
* '''발생할 수 있는 이상(Anomaly)의 예''' | *'''발생할 수 있는 이상(Anomaly)의 예''' | ||
**''' | **'''갱신이상''': 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다. | ||
*** UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동' | ***UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동' | ||
**'''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다. | **'''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다. | ||
***DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정' | ***DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정' | ||
87번째 줄: | 64번째 줄: | ||
!수강과목 | !수강과목 | ||
!수강자 | !수강자 | ||
!일련번호 | !일련번호 | ||
|- | |- | ||
|수학 | |수학 | ||
101번째 줄: | 78번째 줄: | ||
|3 | |3 | ||
|- | |- | ||
|사회 | |사회 | ||
|홍길동 | |홍길동 | ||
|4 | |4 | ||
109번째 줄: | 86번째 줄: | ||
|5 | |5 | ||
|} | |} | ||
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다. | :*가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다. | ||
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다. | :*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다. | ||
141번째 줄: | 118번째 줄: | ||
|천교수 | |천교수 | ||
|- | |- | ||
| 1925 | |1925 | ||
|장영실 | |장영실 | ||
|컴퓨터과 | |컴퓨터과 | ||
149번째 줄: | 126번째 줄: | ||
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다. | :*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다. | ||
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다. | :*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다. | ||
:*지도교수 사무실도 학번에 | |||
*'''발생할 수 있는 이상(Anomaly)의 예''' | *'''발생할 수 있는 이상(Anomaly)의 예''' | ||
** | **삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다. | ||
** | **갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다. | ||
** | **삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다. | ||
*'''2NF를 만족시키는 릴레이션''' | *'''2NF를 만족시키는 릴레이션''' | ||
166번째 줄: | 144번째 줄: | ||
|- | |- | ||
|1845 | |1845 | ||
|임꺽정 | |임꺽정 | ||
|전자과 | |전자과 | ||
|- | |- | ||
|1706 | |1706 | ||
| 신사임당 | |신사임당 | ||
|기계과 | |기계과 | ||
|- | |- | ||
|1925 | |1925 | ||
|장영실 | |장영실 | ||
|컴퓨터과 | |컴퓨터과 | ||
|} | |} | ||
:{| class="wikitable" | :{| class="wikitable" | ||
!학과 | !학과 | ||
! 학과장 | !학과장 | ||
|- | |- | ||
|컴퓨터과 | |컴퓨터과 | ||
187번째 줄: | 165번째 줄: | ||
|박교수 | |박교수 | ||
|- | |- | ||
| 기계과 | |기계과 | ||
|천교수 | |천교수 | ||
|} | |} | ||
200번째 줄: | 178번째 줄: | ||
*3NF를 만족하지 않는 릴레이션 | *3NF를 만족하지 않는 릴레이션 | ||
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다. | **소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다. | ||
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, | **홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홀길동→공대인 관계가 성립한다. | ||
{| class="wikitable" | {| class="wikitable" | ||
! 학번 | !학번 | ||
!이름 | !이름 | ||
!소속학과 | !소속학과 | ||
209번째 줄: | 187번째 줄: | ||
|- | |- | ||
|1901 | |1901 | ||
|홍길동 | |홍길동 | ||
|컴퓨터과 | |컴퓨터과 | ||
|공대 | |공대 | ||
|- | |- | ||
|1845 | |1845 | ||
| 임꺽정 | |임꺽정 | ||
|전자과 | |전자과 | ||
|공대 | |공대 | ||
|- | |- | ||
|1706 | |1706 | ||
|신사임당 | |신사임당 | ||
|경제 | |경제 | ||
|경상 | |경상 | ||
|- | |- | ||
|1925 | |1925 | ||
230번째 줄: | 208번째 줄: | ||
*'''발생할 수 있는 이상(Anomaly)의 예''' | *'''발생할 수 있는 이상(Anomaly)의 예''' | ||
**''' | **'''삽입이상''': 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다. | ||
**''' | **'''갱신이상''': 컴퓨터과의 소속 대학이 'IT대학'으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다. | ||
**''' | **'''삭제이상''': 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다. | ||
*3NF를 만족시키는 릴레이션 | *3NF를 만족시키는 릴레이션 | ||
246번째 줄: | 224번째 줄: | ||
|1845 | |1845 | ||
|임꺽정 | |임꺽정 | ||
|전자과 | |전자과 | ||
|- | |- | ||
|1706 | |1706 | ||
|신사임당 | |신사임당 | ||
|경제 | |경제 | ||
258번째 줄: | 236번째 줄: | ||
{| class="wikitable" | {| class="wikitable" | ||
!소속학과 | !소속학과 | ||
!대학 | !대학 | ||
|- | |- | ||
|컴퓨터과 | |컴퓨터과 | ||
|공대 | |공대 | ||
|- | |- | ||
| 전자과 | |전자과 | ||
|공대 | |공대 | ||
|- | |- | ||
272번째 줄: | 250번째 줄: | ||
|경상 | |경상 | ||
|} | |} | ||
===BCNF=== | ===BCNF=== | ||
;Boyce and Codd Normal Form | ;Boyce and Codd Normal Form | ||
;BCNF를 만족하려면 결정자이면서 | ;BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다. | ||
*BCNF를 만족하지 않는 릴레이션 | *BCNF를 만족하지 않는 릴레이션 | ||
282번째 줄: | 259번째 줄: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
! 학번 | !학번 | ||
!과목 | !과목 | ||
!교수 | !교수 | ||
295번째 줄: | 272번째 줄: | ||
|- | |- | ||
|200 | |200 | ||
|네트워크 | |네트워크 | ||
|장영실 | |장영실 | ||
|- | |- | ||
|300 | |300 | ||
307번째 줄: | 280번째 줄: | ||
|} | |} | ||
*제약사항 | * 제약사항 | ||
**한 학생은 동일한 과목에 | ** 한 학생은 동일한 과목에 대애 한교수에게만 수강가능 | ||
**각 교수는 하나의 과목만 담당 | ** 각 교수는 하나의 과목만 담당 | ||
**한 과목은 여러 교수가 | ** 한 과목은 여러 교수가 담당가능 | ||
* | * 분석 | ||
* | ** (학번 + 과목)은 교수를 결정 짓는다. | ||
** | ** 교수는 과목을 결정 짓는다. | ||
** 즉, 교수 또한 결정자인데 교수는 학번을 결정 지을 수 없으므로 후보키는 아니다. | |||
*'''발생할 수 있는 이상(Anomaly)의 예''' | *'''발생할 수 있는 이상(Anomaly)의 예''' | ||
**''' | **'''삽입이상''': 200학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다. | ||
**''' | **'''갱신이상''': 홍길동의 담당 과목이 알고리즘으로 바뀌었다. 담당 과목을 변경할 경우, 학생의 수강 과목이 변경되어 버린다. | ||
**''' | **'''삭제이상''': 300학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다. | ||
*BCNF를 만족시키는 릴레이션 | *BCNF를 만족시키는 릴레이션 | ||
{| class="wikitable" | {| class="wikitable" | ||
!학번 | !학번 | ||
! | !과목코드 | ||
|- | |- | ||
|100 | |100 | ||
| | |DB01 | ||
|- | |- | ||
|100 | |100 | ||
| | |DS01 | ||
|- | |- | ||
|200 | |200 | ||
| | |NW01 | ||
|- | |- | ||
|300 | |300 | ||
| | |AI01 | ||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" | ||
!과목코드 | |||
!과목 | !과목 | ||
! 교수 | !교수 | ||
|- | |- | ||
|DB01 | |||
|데이터베이스 | |데이터베이스 | ||
|홍길동 | |홍길동 | ||
|- | |- | ||
|DS01 | |||
|자료구조 | |자료구조 | ||
|임꺽정 | |임꺽정 | ||
|- | |- | ||
|NW01 | |||
|네트워크 | |네트워크 | ||
|장영실 | |장영실 | ||
|- | |||
|AI01 | |||
|인공지능 | |||
|유관순 | |||
|} | |} | ||
368번째 줄: | 340번째 줄: | ||
*4NF를 만족하지 않는 릴레이션 | *4NF를 만족하지 않는 릴레이션 | ||
*'''발생할 수 있는 이상(Anomaly)의 예''' | *'''발생할 수 있는 이상(Anomaly)의 예''' | ||
* 4NF를 만족시키는 릴레이션 | *4NF를 만족시키는 릴레이션 | ||
===5NF=== | ===5NF=== | ||
;Fifth Normal Form | ;Fifth Normal Form | ||
;5NF를 만족하려면 조인 종속성 제거해야 한다 | ;5NF를 만족하려면 조인 종속성 제거해야 한다 | ||
*5NF를 만족하지 않는 릴레이션 | *5NF를 만족하지 않는 릴레이션 | ||
*'''발생할 수 있는 이상(Anomaly)의 예''' | *'''발생할 수 있는 이상(Anomaly)의 예''' | ||
*5NF를 만족시키는 릴레이션 | *5NF를 만족시키는 릴레이션 |