정규화 (Normalization)

2021. 7. 29. 11:29
728x90

Database 정규화 (Normalization)
: 불필요하게 중복되는 데이터를 제거하고, table을 논리적이고 직관적으로 구성하여 효율성과 일관성에 초점을 맞춤

- 정규화의 각 단계를 수행할 때마다 더욱 정제된 논리적 구조(정규형(Normal Form, NF))를 도출함.
- 어떤 relation이 특정 제약 조건의 집합을 만족하는지에 따라 특정 정규형에 속하게 되고, 상위 단계로 갈수록 (하위단계 + 알파 제약조건) 을 한 형태.
- 함수 종속 (functional dependency) : X 는 결정자 (기본키), Y는 종속자 (나머지 후보키)


정규화되지 않은 논리적 구조의 이상 현상
: 여러가지 종류의 정보들을 1개의 relation으로 표현하면서 발생하는 문제들

1. 삭제 (delete) : 
예를 들어, 특정 고객이 식당 예약을 취소했다고 하자. 해당 예약 record는 고객의 point정보를 가진 유일한 튜플이므로 그 record를 table에서 삭제하게 되면 고객의 point 속성도 함께 삭제되어서 정보손실을 초래한다.

2. 갱신 (update) :
특정 고객의 point 데이터가 변경되었을 때, 여러 record를 전부 똑같이 수정해야 data의 일관성을 높일 수 있게되므로 성능 저하를 초래한다.

3. 삽입 (insert) :
새로운 고객이 예약을 하면 첫 방문이므로 이 전에 식당을 방문한 기록이 없을 것이다. 이런 경우, 기본키 속성에 NULL값이 들어가게 되므로 삽입할 수 없다. 만약 강제로 삽입할 경우, 기본키에 가상의 data를 저장해야해서 불필요한 data까지 삽입하게 되는 문제가 발생한다.

위의 3가지 문제들을 해결하기 위해서 우리는 database를 정규화하여 중복성을 피하고 1개의 정보는 1개의 relation으로만 표현하도록 분해하는 과정을 거쳐야한다.

여기부터는 정규형(Normal Form)을 줄여서 "NF"라 부르도록 하겠다

 [ 정규화 종류 ]

1. 제 1정규형 (First Normal Form, 1NF) : 모든 row에 대해 각 column은 1개의 값("원자값")만을 가진다.

 

2. 제 2정규형 (Second Normal Form, 2NF) : (1NF) + 모든 속성이 완전 함수적 종속을 만족한다. 즉, 기본키가 특정 column에만 종속되는 부분 종속일 수 없다.

 

3. 제 3정규형 (Third Normal Form, 3NF) : (2NF) + 기본키가 아닌 일반 속성들 간의 종속관계가 존재하지 않는다. 복잡한 table의 경우, 2NF에서 갱신 이상을 겪게되므로 그걸 보완한게 3NF이다.

 

*(1NF)+ 또는 (2NF)+ 를 앞에 작성한 이유는, 정규화 상위단계로 올라갈수록 이전 단계의 내용을 내포하고 있다는 의미이다. 맨 위의 사진을 참고할 것.

*BCNF, 4NF, 5NF도 있지만, 위의 3가지가 가장 기본이다

728x90

'Database' 카테고리의 다른 글

실행계획 예제  (1) 2023.10.23
Database 개요 (3)  (0) 2021.07.29
Database 개요 (2)  (0) 2021.07.29
Database 개요 (1)  (0) 2021.07.29

BELATED ARTICLES

more