[CS] DB - ERD와 정규화
ERD는 데이터 베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션간의 관계들을 정의한다.
ERD의 중요성
시스템의 요구사항을 기반으로 작성되고, 이 ERD를 기반으로 데이터 베이스를 구축한다.
DB 구축 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우 설계도 역할을 하기도 한다.
관계형 데이터를 구성하는데는 유용하나, 비정형 데이터를 충분히 표현할 수 없다.
정규화 과정
정규화 과정은 릴레이션 간의 잘못된 종속관계로 인해 데이터베이스 이상현상이 일어나서 이를 해결하거나,
저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러개로 분리하는 과정이다.
여기서 말하는 데이터 이상 현상이란,
회원이 한 개의 등급을 가져야 하는데 세개의 등급을 갖거나,
데이터 삽입 시, 하나의 필드값이 NULL이 되면 안되어서 삽입하기 어려운 현상을 말한다.
정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어 가는 과정을 의미한다.
기본 정규형인 제1, 제2, 제3, 보이스/코드(BCNF)와
고급 정규형인 제4, 제5 정규형이 있다.
정규형 원칙
정규형 원칙이란 같은 의미를 표현하지만,
좀 더 좋은 구조로, 자료의 중복성은 감소시키고, 독립적인 관계는 별개의 릴레이션으로,
각각의 릴레이션은 독립적인 표현이 가능해야 하는 것을 말한다.
제 1정규형
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값으로 구성되어야한다.
userId name mission merged
--------------------------------------------------
1 polo [ladder, racingcar] [true, false]
2 eclips [ladder, racingcar] [false, true]
위의 테이블은 하나의 컬럼에 두개의 값을 담고 있다.
이를 제 1정규형을 적용해 정규화를 하면 다음과 같다.
userId name mission merged
--------------------------------------------------
1 polo ladder true
1 polo racingcar false
2 eclips ladder false
2 eclips racingcar true
제 2정규형
릴레이션이 제1정규형이며, 부분함수의 종속성을 제거한 형태이다.
부분함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말한다.
..무슨 말인지도 감이 안잡히는데,
천천히 살펴 보자.
merged의 결과는 name + mission 에 종속적이다. (위 테이블에선 userId + mission 도 가능)
1번 row를 문장으로 펼쳐보면,
userId가 1번인 폴로의 사다리 미션은 merge 되었다. 라는 문장으로 풀어쓸 수 있는데,
이 문장은 두개의 문장으로 쪼갤 수 있다.
폴로의 유저 아이디는 1번이다.
폴로의 사다리 미션은 merge 되었다. (또는 1번의 사다리 미션은 merge 되었다.)
위의 문장을 다시 테이블로 표현하면, 다음과 같다.
userId name name mission merged
-------------- ------------------------------------
1 polo polo ladder true
2 eclips polo racingcar false
eclips ladder false
eclips racingcar true
제 3정규형
제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태를 말한다.
... 진짜 ... 말 어렵게 하기 대회 나가면 일등할 것 같은 문장이다.
여기서 말하는 이행적 함수 종속이란, A-> B이고, B->C 이면, A->C 이다. 라는 삼단논법 비스무리한 무언가인듯 하다.
예를 들어 등급에 따라 할인율이 달라지는 쇼핑몰의 경우 "홍철은 플래티넘 등급이고, 할인율이 30%이다." 의 문장은
"홍철은 플래티넘 등급이다.", "플래티넘등급은 할인율이 30%이다." 두개의 문장으로 나눌 수 있다.
또한 다음의 문장 또한 성립한다. "홍철의 할인율은 30%이다."
A->B, B->C, A->C 가 성립하는 모습을 볼수 있다.
테이블로 보면 다음과같다.
BCNF정규형
제 3정규형을 만족하고, 모든 결정자가 후보키인 상태를 말한다.
후보키
함수 종속 관계에서 특정 종속자를 결정 짓는 요소
A->B 일때 A는 결정자, B는 종속자이다.