정규화
지난 글에서 이상 현상에 대해서 알아봤습니다.
https://youngxdev.tistory.com/14
이상 현상은 결국 데이터베이스가 잘못 설계되어 나타납니다. 데이터베이스가 복잡해질수록 설계가 어렵고, 잘 설계인지 판단하기조차 어렵습니다. 이러한 문제를 해결하고자 데이터베이스 설계를 잘 했는지 판단하는 기준을 만들게 되었는데 그것이 바로 정규화입니다.
정규화는 데이터베이스의 데이터를 효율적이고 유연하며 이상 징후가 없도록 정리하는 프로세스입니다. 정규화의 목표는 데이터 중복을 최소화하고 각 정보가 한 곳에만 저장되도록 하는 것입니다. 즉, 테이블에 필요 없는 컬럼을 다른 테이블로 옮기는 과정입니다.
데이터베이스를 설계부터 구축까지 완료한 뒤, 나중에 변경하려고 하면 엄청 골치 아프기 때문에 최대한 설계 단계에서 정규화를 통해 구조를 단순화하는 게 좋습니다.
패션 온라인 커머스의 데이터베이스를 예로 들어 보겠습니다. 처음에 데이터베이스는 다음과 같이 보일 수 있습니다.
id | 상품명 | 카테고리 | 가격 | 설명 | 수량 | 공급업체 |
1 | 반팔티 | 의류 | 20,000 | 부드러운 면 | 1 | A |
2 | 청바지 | 의류 | 40,000 | 와이드 핏 | 2 | B |
3 | 신발 | 신발 | 50,000 | 러닝화 | 1 | A |
4 | 후드티 | 의류 | 30,000 | 와이드 핏 | 2 | B |
위 테이블을 공급업체 컬럼을 보면, 각 제품에 대해 공급업체 이름이 반복되고 중복이 있습니다. 만약 공급업체가 사명을 변경하면 여러 row에서 업데이트해야 합니다. 이 테이블을 정규화하기 위해 이 테이블을 각각 고유 식별자를 가진 여러 테이블로 나눌 수 있습니다.
상품 테이블
id | 상품명 | 카테고리 | 가격 | 설명 | 수량 |
1 | 반팔티 | 의류 | 20,000 | 부드러운 면 | 1 |
2 | 청바지 | 의류 | 40,000 | 와이드 핏 | 2 |
3 | 신발 | 신발 | 50,000 | 러닝화 | 1 |
4 | 후드티 | 의류 | 30,000 | 와이드 핏 | 2 |
공급업체 테이블
id | 공급업체 |
1 | A |
2 | B |
정규화를 통해서 이제 공급업체 정보가 별도의 테이블에 저장되어 중복을 줄이고 각 공급업체가 한 번만 저장됩니다. 이렇게 하면 공급업체 정보를 더 쉽게 업데이트할 수 있고 불일치 가능성을 방지할 수 있습니다
정규형식
정규화에는 첫 번째 정규형(1NF), 두 번째 정규형(2NF), 세 번째 정규형(3NF)의 세 가지 수준이 있습니다. 사실 더 많은 여러 규칙이 있지만, 일반적으로 1정규형, 2정규형, 3정규형만 적용해도 좋은 데이터베이스라고 할 수 있습니다. 다음에는 정규화 1정규형, 2정규형, 3정규형에 대해 알아보겠습니다.
댓글