정규화 (Normalization)

Q. 데이터베이스의 정규화(Normalization)은 무엇이며, 왜 필요한가요?

데이터베이스 정규화는 데이터 중복을 최소화하고 데이터 무결성을 보장하기 위해 데이터베이스 테이블을 설계하는 과정입니다. 이를 통해 데이터가 일관되게 유지되고, 데이터 변경 시 발생할 수 있는 이상 현상(Anomalies)을 방지할 수 있습니다. 하지만 과도한 정규화를 하게 된다면 테이블 간의 관계가 복잡해질 수 있고, 조인 연산이 많아져 데이터 조회 성능이 저하될 수 있습니다.


Q. 그럼 그러한 성능 저하 문제를 해결할 수 있는 방법은 있나요?

성능 저하 문제를 해결하기 위해서는 반정규화(Denormalization)를 사용할 수 있습니다. 비정규화는 데이터 중복을 허용하면서 일부 테이블을 병합하거나 조인을 줄여 성능을 개선하는 방법입니다. 반정규화를 사용하면 Join으로 인한 읽기성능 감소를 해결하여 읽기 속도를 증가 시킬 수 있습니다. 따라서 데이터베이스를 설계할 때는 정규화와 비정규화를 적절히 사용하여 설계해야합니다.


Q. 정규화는 어떠한 방식으로 진행하나요?

정규화는 여러 단계에 걸쳐 진행되며, 각 단계마다 특정한 이상 현상을 방지하는 규칙을 적용합니다.

  1. 제 1 정규형 - 컬럼에 여러 값이 저장되지 않도록 여러 컬럼이나 행으로 데이터를 분리합니다.

  2. 제 2 정규형 - 제 1 정규형을 만족하고, 기본 키의 일부에만 종속된 컬럼이 있다면, 이를 별도의 테이블로 분리하여 종속성을 제거합니다.

  3. 제 3 정규형 - 제 2 정규형을 만족하고, 기본 키가 아닌 컬럼들 간의 종속성을 제거합니다.

  4. 보이스 코드 정규형(BCNF) - 제 3 정규형에서 추가로, 모든 결정자가 후보 키이어야 한다는 조건을 만족하도록 테이블을 설계합니다. 이 뒤로 제 4 정규형과 제 5 정규형이 있지만, 보통 BCNF에서 마무리됩니다.

Last updated