DB 설계시 정규화



정규화(normalization)이란 무엇인가?
DB 설계란 자료의 중복성과 비정규성을 제거하고 검색키를 설정하기 위해 데이타베이스의 logical schema를 작성하는 것입니다. 데이타베이스 설계시 가장 중요한 관심사는 릴레이션 구조를 결정하는 것이라고 할 수 있다. 데이타베이스에 어떤 릴레이션을 두고, 그 릴레이션에 어떠한 속성을 포함시킬 것인지는 데이타관리 및 사용의 성패에 큰 영향을 미친다. 바로 정규화이론은 어떠한 릴레이션 구조가 바람직한 것인지, 바람직하지 못한 릴레이션을 어떻게 분해하여야 하는지에 관한 구체적인 판단기준을 제공한다.

정규화의 목적
자료정규화작업의 가장 큰 목적은 자료저장의 중복성 배제이다. 정규화이론에서는 릴레이션의 형태가 여러단계로 구분된다. 가장 기본적인 정규화조건도 만족하지 못하는 릴레이션을 비정규형, 만족하는 릴레이션을 제1정규형이라고 부른다. 조건이 점점 엄격해짐에 따라 제2, 제3, 제4, 제5정규형으로 구분된다. 정규화이론에서는 보다 높은 단계의 정규형으로 나아갈수록 보다 바람직한 릴레이션 구조를 가진다고 간주한다. 즉 높은 단계의 정규형으로 나아갈수록 데이타의 본질적 의미가 릴레이션 구조에 보다 정확히 반영되고, 데이타 중복을 줄이고, 데이타 변경시 발생하는 문제점을 방지하고, 궁극적으로 데이타 무결성(data integrity)을 제고할 수 있다고 가정된다.

제 1 정규형
- 개별 테이블에서 반복되는 그룹을 제거합니다.
- 관련 데이터의 각 집합에 대해 별도의 테이블을 만듭니다.
- 기본 키를 사용하여 관련 데이터의 각 집합을 식별합니다.

제 2 정규형
- 여러 레코드에 적용되는 값 집합에 대해 별도의 테이블을 만듭니다.
- 이러한 테이블을 연결할 때는 외래 키를 사용합니다.

제 3 정규형
- 키에 종속되지 않는 필드를 제거합니다.

기타 정규형
BCNF(Boyce Codd Normal Form)라고도 하는 제 4 정규형과 제 5 정규형도 있지만 이 형식은 실제 디자인에서 거의 고려되지 않습니다. 이러한 규칙은 무시해도 데이터베이스 디자인의 완벽성은 덜하겠지만 기능적으로는 영향이 없습니다.

문제점

때로는 정규화 이론에 어긋나는 릴레이션 구조를 선택해야 할, 실용적인 필요성이 우선하는 경우도 있습니다. 정규화 작업은 특히 처리속도와의 trade-off관계가 심사숙고의 대상이 되며 고도의 정규화를 추구하다보면 레코드의 종류가 늘어나고 프로그래밍도 복잡해 져서 결국은 전체적인 performance가 떨어지게 됩니다. 이는 양자간의 절충으로 어느정도 해결될 수 있지만 개발자와 사용자간에 깊이 생각해 보아야 할 문제라고 할수 있겠군요.

From : 아이헬퍼스
내용출처 : http://database.sarang.net/?inc=read&criteria=dbms&subcrit=columns&aid=862

 

-----------------------

예제참고 : http://vtheonev.blog.me/40117422434