02_정규화

PLO·2023년 5월 20일
post-thumbnail

01_정규화의 기본 개념

정규화는 본질적으로 데이터베이스의 설계 과정에서 중복을 줄이고 효율성을 높이기 위해 사용되는 과정입니다.
이는 데이터의 무결성을 유지하고 이상현상(Anomalies)을 방지하는데 도움이 됩니다.
이상현상에는 삽입 이상, 삭제 이상, 갱신 이상 등이 포함됩니다.

02_정규화 형식

제 1 정규화(1NF)
제 1 정규화는 가장 기본적인 정규화 단계로, 모든 속성이 원자적(atomic)이어야 한다는 원칙에 기반합니다.
즉, 각 속성은 더 이상 분해할 수 없는 가장 작은 단위이어야 합니다.
이로 인해 테이블에서 데이터를 더욱 쉽게 찾고 이해할 수 있게 됩니다.

Ex)

예를 들어, 고객 정보가 저장된 테이블에서
고객 이름을 '이름'과 '성'으로 나누면 이는 1NF를 만족합니다.
왜냐하면 각각의 속성이 더 이상 분해할 수 없는 원자적인 값이기 때문입니다.

제 2 정규화(2NF)
제 2 정규화는 제 1 정규화를 만족하며, 추가로
모든 부분적 함수 종속성(Partial Functional Dependency)을 제거하는 것을 목표로 합니다.
부분적 함수 종속성이란 결정자의 일부에만 종속성이 있는 경우를 말합니다.

Ex)

예를 들어, '고객 ID', '상품 ID', '상품명'으로 구성된 테이블에서 '상품명'은 '상품 ID'에만 종속적이므로,
이는 부분적 함수 종속성입니다. 이를 제거하기 위해
'상품 ID'와 '상품명'을 별도의 테이블로 분리하는 것이 2NF를 만족하는 방법입니다.

제 3 정규화(3NF)
제 3 정규화는 제 2 정규화를 만족하면서 동시에 이행적 함수 종속성(Transitive Functional Dependency)을 제거합니다. 이행적 함수 종속성은 한 속성이 다른 속성을 통해 간접적으로 종속되는 경우를 말합니다.

Ex)

'고객 ID', '지역 코드', '지역명'이 있는 테이블에서
'지역명'은 '지역 코드'에, '지역 코드'는 '고객 ID'에 종속되는 이행 함수 종속성이 발생합니다.
이를 제거하기 위해 '지역 코드'와 '지역명'을 별도의 테이블로 분리하는 것이 3NF를 만족하는 방법입니다.

보이스-코드 정규화(BCNF), 제 4 정규화(4NF), 제 5 정규화(5NF)
보이스-코드 정규화는 3NF를 만족하면서 동시에 모든 결정자가 후보키의 일부가 되는 것을 요구합니다.
제 4 정규화는 다치 종속성(Multivalued Dependency)을 제거하고,
제 5 정규화는 모든 조인 종속성이 후보키에 기반하도록 요구합니다.

하지만 실제 상황에서는 대부분의 데이터베이스가 3NF 혹은 BCNF까지만 정규화하고,
4NF와 5NF는 매우 특수한 상황에서만 사용됩니다.

마무리
정규화는 데이터베이스 설계에서 중요한 원칙이며,
데이터의 중복성을 줄이고 무결성을 보장하기 위한 데 큰 도움이 됩니다.
하지만 항상 높은 단계의 정규화가 좋은 것은 아닙니다.
정규화 수준이 너무 높으면 쿼리 성능이 떨어질 수 있으므로,
실제 환경에서는 적절한 균형을 찾는 것이 중요합니다.
이를 통해 효율적이고 안정적인 데이터베이스를 만들 수 있을 것입니다.

profile
주니어 개발자 Plo입니다. 🙇‍♂️

0개의 댓글