정규화
정규화란 데이터베이스의 테이블을 규정된 올바를 형태로 개선해나가는 것
대부분 설계 단계에서 행해지나 기존 시스템을 재검토할 때 정규화 하는 경우도 있음
속성들의 종속성을 분석해서 하나의 종속성이 하나의 표로 관리되도록 분해해가는 과정
하나의 종속성이 하나의 표로 분리되어 성격이 명확해 지고, 중복을 없애 데이터 이상 현상이 최소화되고, 결국 데이터 무결성이 극대화된 구조
(1) 제 1 정규형
테이블 구성에서 중복 또는 반복, 복합값 등을 포함한 구조를 '제 1정규형이 아닌 테이블' 이라고 한다.
RDBMS(관계형 데이터베이스)의 테이블에는 하나의 셀에 하나의 값만 저장
반복 속성, 다수의 값을 갖는 속성은 별도 엔터티로 분리
1단계 : 반복되는 데이터를 가로(열 방향)가 아닌 세로(행 방향)로 늘리는 것
2단계 :테이블 분할과 기본키 지정
(2) 제 2 정규형
기본 키가 여러 열로 구성되어 있고 그 중 일부 열의 값을 의해서만 결정되는 열이 있는 경우, 해당 테이블을 '제2정규형이 아닌 테이블'이라고 부른다.
데이터 중복하는 부분을 찾아내어 테이블로 분할 (기본키에 중복이 없는지 조사)
부분 함수종속성을(키 값을 이용해 데이터를 특정) 찾아내서 테이블을 분할
아래 표에서 created는 emp_id 와 dept_id를 모르면 특정할 수 없지만, dept_name은 dept_id만 정해지면 확인할 수 있기 때문에 이 테이블에 속하는 것이 적철치 않다. 이에 대한 문제점은 동일 dept_id 인데도 부서명(dept_name)이 서로 다른 레코드가 등록될 가능성이 있다는 것이다.
emp_id(PK) |
dept_id(PK) |
dept_name |
created |
1 |
100 |
개발부 |
2017-11-02 |
2 |
100 |
개발부 |
2017-11-02 |
(3) 제 3 정규형
기본 키 이외에 중복이 없는지 조사, 원칙적으로 테이블의 모든 열은 기본 키 값에 따라 단 하나로 결정되여야 한다. (기본 키의 열 값이 키본 키가 아닌 열에 의해 결정되는 상태)
대부분의 시스템에서 제3 정규형까지의 정규화를 체택함.
이 처럼 정규화를 통해 테이블을 분할하고, 분할할 때에는 서로 겹할할 수 있도록 기본키를 추가해 분할
※ 정규화의 목적
정규화에서는 중복하거나 반복되는 부분을 찾아내서 테이블을 분할하고 기본키를 작성해 사용하는 것을 기본 개념으로 삼음.
' 하나의 데이터는 한 곳에 있어야 한다 '
1) 속성 간의 종속성을 기준으로 성격이 유사한 속성들은 모이고 관계없는 속성들은 분리된다. 즉, 속성들이 자연스럽게 자기 자리를 찾게 되면서 데이터 집합의 범주화가 이루어진다.
2) 하나의 주제로 집약된 데이터 구조, 제대로 된 엔터티가 도출된다. 정규화는 함수 종속을 없애고 밀접한 속성을 하나의 표에 집약시키는 체계적인 방법이다. 따라서 데이터는 응집도는 높고 결합도는 낮게 분리된다. 결국 데이터 본질에 충실한 제대로 된 엔터티가 도출될 수 밖에 없다.
3) 데이터 중복이 최소화된 효율적인고 구조화된 모델이 나온다. 중복에 따른 데이터 이상 현상이 사라지며, 저장 용량 측면에서도 당연히 이익을 본다.
4) 데이터 간의 종속성을 분석하기 때문에 엔터티명과 더불어 엔터티의 정체성을 가장 잘 표현하는 주 식별자가 정확히 도출된다. 주 식별자는 인스턴스를 구분하는 기준이므로, 집합의 개체 발생 규칙도 검증되어 더 정확해진다.
5) 엔터티가 명확하고 정확해졌기 때문에 업무 변경에 따른 확장성이 좋아진다.
6) 데이터를 최적의 상태로 담게 된다. 데이터 무결성을 극대화
7) 정규화된 모델은 그렇지 않은 모델에 비해 대부분 성능이 좋다.
※ 정규화를 수행하지 않으면 무슨 일이 발생하는 것일까?
1) 데이터를 입력할 때 불필요한 데이터와 같이 입력을 해야 한다.
2) 데이터를 수정할 때 한 건의 데이터만 수정하고 싶어도 불필요하게 여러 건의 데이터를 수정해야 하는 경우가 생긴다.
3) 데이터를 삭제하기 원할 때 원하지 않는 데이터까지 삭제되려고 하기 때문에 정상적으로 데이터를 삭제하지 못하고 수정으로 삭제를 처리해야 하는 경우가 생긴다.
4) 부가적으로 과다하게 데이터가 여러 테이블에 분산되어 있기 때문에 데이터 저장 공간이 너무 켜져 스토리지 낭비가 나타난다.
※ 함수의 종속성 (Functional Dependeny)
데이터들이 어떤 기준 값에 의해 종속되는 현상
예)
주민등록번호 (결정자, Determinant) -----> 이름, 출생지, 호주 (종속자, Dependent)
이름, 출생지, 호주는 주민등록 번호에 함수종속성을 가지고 있음
※ 제 4, 5차 정규화
1) 제 4차 정규화
: 함수적 종속성에 의해 정규화가 수행되었다고 할지라도 데이터 값이 여러개(Multi value)임으로 인해 입력/수정/삭제현상이 나타나는 것을 방지하기 위해 4차 정규화가 정립
2) 제 5차 정규화
: 테이블의 다중 조인관계에 의해 상호 관련이 없는 데이터가 통합되었을 때 나타나는 입력/수정/삭제현상이 나타나는 것을 방지
'ⓟrogramming > DataBase' 카테고리의 다른 글
[데이터베이스] RAID - 디스크 이중화로 데이터 손실 방지하기 (0) | 2017.11.03 |
---|---|
[데이터베이스] 분산 데이터베이스 환경 (0) | 2017.11.03 |
[데이터베이스] 업데이트 비용 절감을 위한 노력 (0) | 2017.11.02 |
[데이터베이스] B+Tree 인덱스 (0) | 2017.11.02 |
[데이터 베이스] 인덱스 구조 (0) | 2017.11.02 |