MySQL의 정규형(Normal Forms)은 데이터베이스 설계를 최적화하고 데이터의 무결성을 유지하기 위한 규칙입니다. 정규형을 따르면 데이터 중복을 최소화하고, 일관성과 안정성을 높일 수 있습니다. 예비 개발자를 위해 정규형의 개념과 종류를 설명하겠습니다.

정규형(Normal Forms)이란?

정규형은 데이터베이스의 테이블을 구조화하는 규칙으로, 데이터를 중복 없이 저장하고, 데이터 무결성을 유지하며, 쿼리 성능을 최적화하기 위한 원칙입니다. 정규화 과정을 통해 데이터를 분해하여 이상(Anomalies)을 제거합니다.

정규형의 종류

제1정규형 (1NF)

  • 설명: 모든 열의 값이 원자값(Atomic Value)이어야 합니다. 즉, 각 열에는 단일 값만 포함되어야 합니다.
  • 규칙:
    1. 각 필드는 하나의 값을 가져야 합니다.
    2. 반복되는 그룹이 없어야 합니다.
  • 예시:
    • 비정규형 테이블:
      | 학생ID | 이름     | 좋아하는 과목     |
      |--------|----------|------------------|
      | 1      | 철수     | 수학, 영어         |
      | 2      | 영희     | 과학, 역사         |
    • 제1정규형 테이블:
      | 학생ID | 이름     | 좋아하는 과목 |
      |--------|----------|--------------|
      | 1      | 철수     | 수학         |
      | 1      | 철수     | 영어         |
      | 2      | 영희     | 과학         |
      | 2      | 영희     | 역사         |

제2정규형 (2NF)

  • 설명: 제1정규형을 만족하고, 부분적 종속성(Partial Dependency)이 없어야 합니다. 기본 키의 일부가 아닌 전체에 대해 종속성을 가져야 합니다.

    엔티티의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야 한다.

  • 규칙:

    1. 제1정규형을 만족해야 합니다.
    2. 기본 키의 일부가 아닌 전체에 대해 종속성을 가져야 합니다.
  • 예시:

    • 제1정규형 테이블:
      | 학생ID | 과목     | 성적 | 학생이름 |
      |--------|----------|------|---------|
      | 1      | 수학     | A    | 철수     |
      | 1      | 영어     | B    | 철수     |
      | 2      | 과학     | A    | 영희     |
      | 2      | 역사     | B    | 영희     |
    • 제2정규형 테이블:
      - 학생 테이블:
        ```
        | 학생ID | 학생이름 |
        |--------|----------|
        | 1      | 철수     |
        | 2      | 영희     |
        ```
      - 성적 테이블:
        ```
        | 학생ID | 과목     | 성적 |
        |--------|----------|------|
        | 1      | 수학     | A    |
        | 1      | 영어     | B    |
        | 2      | 과학     | A    |
        | 2      | 역사     | B    |
        ```
      분리했다고 해서 손실되는 정보가 있어서는 안된다.
      즉 다시 조인을 통해 원래 데이터를 복원 할 수 있다.

제3정규형 (3NF)

  • 설명: 제2정규형을 만족하고, 이행적 종속성(Transitive Dependency)이 없어야 합니다. 기본 키가 아닌 다른 열에 대해 종속성을 가져서는 안 됩니다.

주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

  • 규칙:
    1. 제2정규형을 만족해야 합니다.
    2. 기본 키가 아닌 다른 열에 대해 종속성을 가져서는 안 됩니다.
  • 예시:
    • 제2정규형 테이블:
      | 학생ID | 과목     | 성적 | 선생님ID | 선생님이름 |
      |--------|----------|------|----------|------------|
      | 1      | 수학     | A    | 101      | 김선생님    |
      | 1      | 영어     | B    | 102      | 이선생님    |
      | 2      | 과학     | A    | 103      | 박선생님    |
      | 2      | 역사     | B    | 104      | 최선생님    |
    • 제3정규형 테이블:
      • 학생 테이블:
        | 학생ID | 학생이름 |
        |--------|----------|
        | 1      | 철수     |
        | 2      | 영희     |
      • 성적 테이블:
        | 학생ID | 과목     | 성적 |
        |--------|----------|------|
        | 1      | 수학     | A    |
        | 1      | 영어     | B    |
        | 2      | 과학     | A    |
        | 2      | 역사     | B    |
      • 선생님 테이블:
        | 선생님ID | 선생님이름 |
        |----------|------------|
        | 101      | 김선생님    |
        | 102      | 이선생님    |
        | 103      | 박선생님    |
        | 104      | 최선생님    |

왜 정규형이 중요한가?

  • 중복 제거: 데이터 중복을 최소화하여 저장 공간을 절약합니다.
  • 데이터 무결성: 데이터 일관성을 유지하고 데이터 이상(Anomalies)을 방지합니다.
  • 유지보수 용이성: 데이터 구조가 명확하여 유지보수가 쉬워집니다.
  • 쿼리 성능 향상: 불필요한 중복 데이터가 없어 쿼리 성능이 향상됩니다.

이처럼 정규형을 따르는 데이터베이스 설계는 데이터의 일관성, 무결성, 그리고 성능을 보장하여 안정적이고 효율적인 데이터 관리를 가능하게 합니다.

0개의 댓글