_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › 정규화정리
|
|
[edit]
1 현상들 #OLTP시스템에서 다음의 현상이 발생하는가?
[edit]
2 현상들에 대한 원인은? #문제의 원인은 데이터의 중복에 있다. 애시당초 데이터의 중복이 될 수 밖에 없는 구조로 설계를 한 것이 문제다. '데이터의 중복이 될 수 밖에 없는 구조로 설계'는 하나의 릴레이션(테이블)에 2가지 이상의 주제를 포함하고 있는 것을 말한다. 릴레이션은 2차원 구조이고, 각 셀에 해당하는 값은 원자값으로 아주 단순한 의미를 가지게 된다. 관계형 모델은 1가지의 주제만으로 벅찬 구조인데, 2가지 이상의 주제를 하나의 테이블에 표현하려니 복잡해질 수 밖에 없다. 복잡성의 증가는 유연성과 성능을 저하 현상으로 우리의 눈에 보이게 된다.
예를 들어, 릴레이션 R에 A,B 이렇게 2개의 주제를 표현했다고 가정해보자. 만약 B주제가 변경되었다면 릴레이션 R을 변경해야 한다. 이 변경은 단순한 변경이 아니다. 릴레이션 R에는 B주제 뿐만 아니라 A주제도 있다. 그러므로 B주제의 변화에 대해 A주제가 얼마나 영향을 받는지에 대한 고려도 필요하게 된다. 또한 릴레이션 R에 관련된 SQL이나 프로시저도 모두 점검하고 변경해줘야 한다. 또한 여러가지 이상현상(삽입이상, 삭제이상, 갱신이상)이 발생하여 이를 땜빵하기 위한 여러 땜빵용 테이블과 복잡한 로직이 만들어지게 된다. 그 결과로 약한 응집력과 강한 결합도를 가진 시스템이 되어 버린다. 한 부분을 변경하는데 시스템의 여기 저기를 모두 뜯어 고쳐야 하는 것은 변화에 취약함과 복잡함을 의미한다. 복잡하다는 것은 시스템이 처리해야 할 일이 많음을 의미하며 이는 시스템의 자원을 많이 사용해야 함을 뜻한다. 즉, 변화에 대한 늦은 대응과 성능저하로 우리의 눈에 비치게 된다. 결국은 라이프 사이클 동안에 전체적인 비용증가를 가져온다.
만약, 릴레이션R1에 A주제, 릴레이션R2에 B주제의 데이터를 담고 있다면 어떨까? 당연히 관련된 부분만 살짝 변경해주면 된다. 이렇게 되면 모델도 단순해져 전체적인 유지보수 비용을 떨어뜨리게 된다. 결론은? 정규화를 해야 한다는 것이다. 정규화는 유연성과 성능 문제를 해결하는 최고의 솔루션이다.
[edit]
3 함수종속과 키(key) #x값을 알 수 있을 때 y의 값도 알 수 있으면, y는 x에 함수적으로 종속되어 있다고 말한다. 이를 x -> y 로 표시하고, x를 결정자, y를 종속자라고 말한다. 키는 릴레이션의 각 인스턴스를 식별할 수 있는 속성 또는 속성들을 말한다.
[edit]
4 2차 정규화 #다음의 릴레이션을 보자.
2차 정규화 정리
[edit]
5 3차 정규화 #3차 정규형은 2차 정규형이면서 이행종속(transitive denpendent)이 없는 릴레이션을 말한다. 이행종속이란 릴레이션R 에 속성 A,B,C가 있다면 C를 알기 위해서 B를 통해 간접적으로 알 수 있는 종속(A->B->C)을 말한다. 2차 정규화에서 쓰인 릴레이션에서 "한명의 학생은 단 하나의 특별활동만 할 수 있다"는 제약조건이 있다는 가정을 해보자.
[edit]
6 보이스-코드 정규화 #보이스-코드 정규형은 3차 정규형이면서 모든 결정자가 후보키인 릴레이션을 말한다. 다음의 릴레이션을 보자. 이 릴레이션에는 "각각의 특별활동에는 단 1명의 코치만 있다"는 제약조건이 있다.
[edit]
7 4정규화 #4차 정규형은 보이스-코드 정규형이면서, 다치종속(multi-value dependent)가 없는 릴레이션을 말한다. 다치종속이란 하나의 값이 여러 값을 결정하는 것을 말한다. "->>"과 같이 표기한다. 이 릴레이션에는 한 학생이 여러 특별활동을 할 수 있고, 복수전공이 가능하다는 제약조건이 있다.
이런 현상이 발생하는 이유는 관계(relationship)이 제대로 파악되지 않았기 때문이다. 또한 어떤 학생이 어떤 특별활동과 어떤 전공을 하는 지에 2가지의 주제를 하나의 릴레이션에 포함했기 때문에 발생한 현상이다. 그림으로 표현하면 다음과 같다. 3원관계(3진관계)를 제거하라고 모델링 책에서 떠드는 이유가 다치종속 때문이기도 하다. ![]() 흔한 경우는 아니지만, "특별활동"과 "전공"도 관계를 가진다면, 3원관계를 그대로 둬도 괜찮지만, 5차 정규화의 이슈가 있다. 그러므로 3원 관계는 3개의 릴레이션의 관계를 따져보고 2원관계로 만들어주는 것이 속 편하다. 2원 관계로 만들다보면 자연스럽게 "특별활동"과 "전공"이 엮일 업무적인 이유를 찾지 못해서 자연스러운 4차 정규형이 될 것이다.
|
야구심판은 잘 하고 있을 때는 있는지 없는 지 모른다. (박경호) |