ComputerScience/ERD와 정규화 과정

ERD

dev_swan 2023. 11. 22.

✏️ ERD

ERD(Entity Relationship Diagram)는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것입니다.

 

 ERD의 중요성

ERD는 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축합니다. 데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우 설계도 역할을 담당하기도 합니다.

 

하지만 ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있습니다.

더보기

💡 비정형 데이터

비구조화 데이터를 말하며, 미리 정의된 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말합니다.


⚙️ 정규화 과정

정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정입니다.

 

데이터베이스 이상 현상이란 회원이 한 개의 등급을 가져야 하는데 세 개의 등급을 갖거나 삭제할 때 필요한 데이터가 같이 삭제되고, 데이터를 삽입해야 하는데 하나의 필드 값이 NULL이 되면 안 되어서 삽입하기 어려운 현상을 말합니다.

 

정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정이며, 정규화된 정도는 정규형(NF, Normal Form)으로 표현합니다. 기본 정규형인 제1 정규형, 제2 정규형, 제3 정규형, 보이스/코드 정규형이 있고 고급 정규형인 제4 정규형, 제5 정규형이 있습니다. 하지만, 고급 정규형은 실무적으로 잘 사용되지 않습니다.

 

정규형 원칙

정규형의 원칙이란 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야 하고, 자료의 중복성은 감소해야 하고, 독립적인 관계는 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것을 말합니다.

 

제1 정규형

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야 합니다. 릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안 됩니다.

제1정규형

기존 제품 주문 릴레이션은 주문번호와 고객주소가 제품번호에 대해 두 개 이상의 값을 가지고 있습니다. 이를 아래와 같이 반복 집합을 제거하여 제1 정규형을 만족하게 됩니다.

 

제2 정규형

릴레이션이 제1 정규형이며 부분 함수의 종속성을 제거한 형태를 말합니다. 부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말합니다.

더보기

💡 함수 종속

함수 종속(Functional Dependency)은 관계형 데이터베이스의 한 릴레이션에서 속성 간의 특별한 종류의 제약 조건을 나타냅니다.

 

릴레이션 R에서 속성 집합 A와 B에 대해 A의 값이 B의 값을 유일하게 결정할 때, A → B라고 표현하며, A가 B에 함수 종속적이라고 합니다.

제2정규형

제1 정규형을 만족하는 릴레이션에서 두 릴레이션으로 분리함으로써, 각 릴레이션에서는 기본키에 대한 완전한 함수 종속성만을 가지게 되어 제2 정규형을 만족하게 됩니다.

 

제3 정규형

제2 정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태를 말합니다.

더보기

💡 이행적 함수 종속

이행적 함수 종속이란 A → B와 B → C가 존재하면 논리적으로 A → C가 성립하는데, 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 합니다.

제3정규형

제2 정규형을 만족하는 릴레이션에서 이행적 함수 종속성을 제거하여 데이터의 중복을 최소화하고 데이터의 무결성을 유지할 수 있습니다.

 

보이스/코드 정규형

보이스/코드 정규형(BCNF)은 제3 정규형이고, 릴레이션 R에 대해, X → Y가 R의 모든 비자기종속 중 하나라 할 때, X는 R의 슈퍼키여야 합니다. 다시 말해, R이 BCNF를 만족한다면, R의 모든 결정자는 슈퍼키가 되어야 합니다.

더보기

💡 비자기종속

비 자기 종속(Non-Trivial Functional Dependency)이란, 함수 종속 A → B에서 A가 B를 포함하지 않는 종속을 의미합니다.

더보기

💡 결정자

함수 종속 관계에서 특정 종속자를 결정짓는 요소로 X → Y일 때 X는 결정자, Y는 종속자입니다.

보이스/코드 정규형

기존 릴레이션에서, 교수는 특정 과목만 가르칩니다. 따라서 교수명 → 과목명이라는 함수 종속이 존재합니다. 하지만 교수명은 이 릴레이션의 슈퍼키가 아닙니다. 따라서 이 릴레이션은 BCNF를 만족하지 않습니다.

 

이를 BCNF에 만족하게 수정하려면, 수정된 릴레이션처럼 교수와 과목에 대한 별도의 릴레이션을 만들고, 원래 릴레이션에서는 학생 ID와 교수명만을 사용하면 됩니다.

 

이렇게 수정하면, 모든 릴레이션에서의 함수 종속은 슈퍼키에만 기반하게 되므로 BCNF를 만족하게 됩니다.

댓글