📐 ERD와 정규화 과정

2025. 12. 2. 01:27·Computer Science/Database

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


🏗️ ERD의 중요성

ERD는 시스템의 요구 사항을 기반으로 작성되며, 이를 토대로 실제 데이터베이스가 구축됩니다. DB 구축 이후에도 디버깅을 하거나 비즈니스 프로세스를 재설계해야 할 때, 길잡이가 되는 설계도 역할을 담당합니다.

하지만 ERD는 관계형 구조로 표현할 수 있는 데이터에는 유용하지만, 비정형 데이터를 표현하는 데는 한계가 있다는 단점이 있습니다.

 

용어 설명: 

  • 비정형 데이터:
    비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 정해진 규칙으로 정리되지 않은 정보(예: 동영상, 오디오, 소셜 미디어 피드 등)를 뜻합니다.

📚 예제로 배우는 ERD

🆚 승원 영업부서의 ERD

요구 사항

  • 영업사원은 0~n명의 고객을 관리한다.
  • 고객은 0~n개의 주문을 넣을 수 있다.
  • 주문에는 1~n개의 상품이 들어간다.

🆚 무무오브레전드의 ERD

요구 사항

  • 선수들은 1명의 챔피언을 고를 수 있다.
  • 챔피언은 한 개 이상의 스킬을 갖는다.
  • 스킬은 한 개 이상의 특성을 갖는다.


🧹 정규화 과정(Normalization)

정규화는 릴레이션 간의 잘못된 종속 관계로 인해 발생하는 데이터베이스 이상 현상(Anomaly)을 해결하고, 저장 공간을 효율적으로 쓰기 위해 릴레이션을 여러 개로 분리하는 과정입니다.

  • 데이터베이스 이상 현상이란?
    • 회원이 하나의 등급만 가져야 하는데 세 개의 등급을 갖게 되는 경우
    • 데이터를 삭제할 때 꼭 필요한 다른 정보까지 같이 삭제되는 경우 (삭제 이상)
    • 데이터를 삽입해야 하는데 특정 필드 값이 없어(NULL) 삽입이 불가능한 경우 (삽입 이상)

정규화는 정규형(NF, Normal Form) 원칙을 기반으로 진행됩니다. 기본 정규형인 제1, 2, 3정규형과 보이스/코드 정규형(BCNF)이 있으며, 더 나아가 제4, 5정규형 같은 고급 정규형도 존재합니다.

📏 정규형 원칙

정규형의 목표는 명확합니다. 같은 의미를 표현하되 구조를 개선하여 자료의 중복성을 줄이고, 독립적인 관계는 별개의 릴레이션으로 분리하여 각각 독립적인 표현이 가능하도록 하는 것입니다.

1️⃣ 제1정규형(1NF)

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(Atomic Value)만으로 구성되어야 합니다. 쉽게 말해, 하나의 칸(컬럼)에는 하나의 값만 들어가야 합니다.

  • 예시: '홍철'이라는 ID가 수강명으로 {C++코딩테스트, 프런트특강} 두 개를 가지고 있다면, 이는 원자 값이 아닙니다. 이를 분리하여 반복되는 집합을 제거해야 합니다.

2️⃣ 제2정규형(2NF)

제1정규형을 만족하면서, 부분 함수의 종속성을 제거한 형태입니다. 기본키가 아닌 모든 속성이 기본키 전체에 대해 완전 함수 종속되어야 합니다. (기본키의 일부분에만 종속되면 안 됩니다.)

  • 예시: 기본키가 {유저ID, 수강명}인 테이블에서, '성취도'는 둘 다 알아야 알 수 있지만, '유저번호'는 유저ID만 알면 알 수 있습니다(부분 종속). 따라서 {유저ID, 유저번호} 테이블과 {유저ID, 수강명, 성취도} 테이블로 분리해야 합니다.
  • 주의: 분해할 때는 정보 손실이 없는 무손실 분해가 되어야 합니다.

3️⃣ 제3정규형(3NF)

제2정규형을 만족하면서, 기본키가 아닌 모든 속성이 이행적 함수 종속(Transitive FD)을 만족하지 않는 상태입니다. 즉, A->B, B->C 같은 연결 고리를 끊어야 합니다

  • 예시: 유저ID -> 등급 -> 할인율의 관계가 있다면, 등급이 바뀌면 할인율도 바뀝니다. 이를 하나의 테이블에 두지 않고, 유저ID-등급 테이블과 등급-할인율 테이블로 분리합니다.

용어 설명: 

  • 이행적 함수 종속:
    A → B이고 B → C일 때, 논리적으로 A → C가 성립하는 관계입니다. 이때 C는 A에 이행적으로 함수 종속되었다고 합니다.

4️⃣ 보이스/코드 정규형(BCNF)

제3정규형을 만족하면서, 모든 결정자가 후보키인 상태를 말합니다. 결정자이지만 후보키가 아닌 함수 종속 관계를 제거해야 합니다.

  • 예시 상황:
    1. 한 학생은 수강명에 대해 오직 한 강사의 강의만 듣는다.
    2. 각 강사는 한 수강명만 담당한다.
    3. 한 수강명은 여러 강사가 담당할 수 있다.
  • 문제점: {학번, 수강명}이 키가 되는데, 강사가 수강명을 결정합니다(강사 -> 수강명). 하지만 강사는 후보키가 아닙니다. 이 경우 강사 정보를 삽입하려 할 때 학번이 없으면 삽입이 불가능한 문제가 발생합니다. 따라서 강사 속성을 분리해야 합니다.

용어 설명: 

  • 결정자(Determinant):
    함수 종속 관계에서 다른 속성을 결정짓는 요소입니다. 'X → Y'일 때 X는 결정자, Y는 종속자입니다.

정규화와 성능 정규화 과정을 거쳐 테이블을 나눈다고 해서 무조건 성능이 좋아지는 것은 아닙니다. 테이블이 쪼개지면 데이터를 조회할 때 조인(Join) 연산이 많아져 오히려 속도가 느려질 수도 있습니다. 따라서 서비스의 특성에 따라 정규화를 할지, 아니면 성능을 위해 역정규화(비정규화)를 할지 전략적으로 결정해야 합니다.

'Computer Science > Database' 카테고리의 다른 글

🔗조인  (0) 2025.12.03
🔖 인덱스  (0) 2025.12.03
🔍 데이터베이스의 종류  (0) 2025.12.03
🔐 트랜잭션과 무결성  (0) 2025.12.03
🗄️ 데이터베이스의 기본  (0) 2025.12.02
'Computer Science/Database' 카테고리의 다른 글
  • 🔖 인덱스
  • 🔍 데이터베이스의 종류
  • 🔐 트랜잭션과 무결성
  • 🗄️ 데이터베이스의 기본
TECHNING
TECHNING
Hi! I'm techning
  • TECHNING
    TECHNING
    TECHNING
    • 분류 전체보기 (54)
      • Computer Science (45)
        • Design Pattern (11)
        • Programming Paradigm (4)
        • Network (15)
        • Operating System (6)
        • Database (6)
        • Data Structure (3)
      • Algorithm (5)
        • Python (3)
        • Java (1)
      • IT Insight (4)
  • hELLO· Designed By정상우.v4.10.4
TECHNING
📐 ERD와 정규화 과정
상단으로

티스토리툴바