본문 바로가기

Programming Theory/Data Modeling

정규화

정규화 (Normalization)

- data integrity 보장을 위해 중복을 최소화 

- 중복을 최소화 : 1개의 table 을 2개 table로 분리


1) 1NF (1 Normal Form)

- repeating group 을 다른 테이블로 분리


2) 2NF (2 Normal Form)

- 전체 주식별자(PK)에 종속되지 않은 속성을 다른 테이블로 분리


3) 3NF (3 Normal Form)

- 일반 속성에 종속되지 않은 속성을 다른 테이블로 분리


예시)

1) 정규화 이전

<단점>

- 취득한 자격증이 4개 이상이 될 경우, table 컬럼 개수를 늘려야 함 (table 구조 변경)

- null 인 컬럼이 多 가능 (자격증을 1개만 취득한 경우 자격증명2, 자격증취득일자2, 자격증명3, 자격증취득일자3 은 null), 단, null 이기 때문에 table record 개수가 늘어나는 것은 아니다.

- 자격증명이 변경된 경우, 자격증명1, 자격증명2, 자격증명3 컬럼에 대해 모두 update 를 쳐야 하는데, 빠트릴 수 있고, 따라서 data integrity 문제가 발생 가능


2) 1NF 적용

<단점>

- '자격증코드'와 '자격증명'이 학생자격증에 중복해서 들어가있으므로, table record가 불필요하게 커짐

- 자격증명이 변경 -> update할 table record 개수가 多

- 자격증에 대한 table이 별도로 없다고 하자. 1개의 자격증을 1명의 학생이 가지고 있었는데, 해당 학생에 대한 record가 삭제되면 해당 1개 자격증 정보가 함께 삭제됨


3) 2NF 적용

<단점>

- '전공코드', '전공명', '전공사무실위치'가 학생에 중복해서 들어가있으므로, table record가 불필요하게 커짐

- 전공명이 변경 -> update할 table record 개수가 多

- 전공에 대한 table이 별도로 없다고 하자. 1개의 전공을 1명의 학생이 가지고 있었는데, 해당 학생에 대한 record가 삭제되면 해당 1개 전공 정보가 함께 삭제된다. 


4) 3NF 적용

'Programming Theory > Data Modeling' 카테고리의 다른 글

Data Modeling pattern  (0) 2016.07.22
논리 모델링  (0) 2016.07.21
Data Modeling 절차  (0) 2016.07.21