데이터 베이스 정규형

2024. 7. 24. 21:29·DB

데이터베이스 정규화는 데이터를 효율적이고 무결성 있게 저장하기 위한 방법입니다. 정규화는 여러 단계로 나뉘며, 각 단계는 데이터 중복을 줄이고 데이터 무결성을 보장하기 위한 특정한 규칙을 따릅니다. 여기서는 제 1 정규형부터 제 5 정규형까지, 그리고 BCNF(보이스-코드 정규형)에 대해 설명하겠습니다.

두 -> 부 -> 이 -> 결 -> 다 -> 조

제 1 정규형 (1NF)

모든 열이 원자값(더 이상 나눌 수 없는 값)을 가져야 합니다. 즉, 각 열은 하나의 값만을 가져야 합니다.

예시:

  • 비정규화된 테이블: (학생ID, 이름, 전화번호) -> 1, 홍길동, "010-1234-5678, 010-8765-4321"
  • 1NF 테이블: (학생ID, 이름, 전화번호) -> 1, 홍길동, 010-1234-5678; 1, 홍길동, 010-8765-4321

ㅇㄻㄴㅇㄹ
비정규화 테이블 -> 정규화 테이블

제 2 정규형 (2NF)

제 1 정규형을 만족하면서 부분적 함수 종속성을 제거해야 합니다. 즉, 모든 비주요 속성이 기본 키에 대해 완전 함수 종속적이어야 합니다.

예시:

  • 비정규화된 테이블: (학생ID, 과목, 교수명) -> 학생ID가 과목과 교수명 둘 다의 기본 키일 때 교수명은 과목에 종속적입니다.
  • 2NF 테이블: (학생 테이블: 학생ID, 과목); (과목 테이블: 과목, 교수명)

비정규화 테이블 -> 정규화 테이블

제 3 정규형 (3NF)

제 2 정규형을 만족하면서 이행적 함수 종속성을 제거해야 합니다. 즉, 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 종속되지 않아야 합니다.

예시:

  • 비정규화된 테이블: (학생ID, 과목, 교수명, 교수전화번호) -> 교수전화번호는 교수명에 종속적입니다.
  • 3NF 테이블: (학생 테이블: 학생ID, 과목); (과목 테이블: 과목, 교수명); (교수 테이블: 교수명, 교수전화번호)

비정규화 테이블 -> 정규화 테이블

 

보이스-코드 정규형 (BCNF)

BCNF는 제 3 정규형보다 더 강력한 정규형입니다. 모든 결정자가 후보 키(candidate key)여야 합니다. 결정자란 다른 속성들을 고유하게 결정할 수 있는 속성을 말합니다.

예시:

  • 비정규화된 테이블: (학생ID, 과목, 교수명) -> 한 학생이 여러 과목을 듣고, 각 과목마다 다른 교수가 있을 때
  • BCNF 테이블: (학생 테이블: 학생ID, 과목); (교수 테이블: 과목, 교수명)

비정규화 테이블 -> 정규화 테이블

제 4 정규형 (4NF)

제 4 정규형은 다치 종속성을 제거하는 것을 목표로 합니다. 다치 종속성이란 한 속성이 다른 속성에 독립적으로 종속되는 경우를 말합니다.

예시:

  • 비정규화된 테이블: (학생ID, 과목, 프로젝트) -> 학생이 여러 과목과 여러 프로젝트를 수행하는 경우
  • 4NF 테이블: (학생-과목 테이블: 학생ID, 과목); (학생-프로젝트 테이블: 학생ID, 프로젝트)

제 5 정규형 (5NF)

제 5 정규형은 조인 종속성을 제거하는 것을 목표로 합니다. 조인 종속성이란 테이블을 여러 개로 분해했을 때, 이들 테이블을 다시 조인하여 원래의 테이블을 완벽하게 재구성할 수 있는 경우를 말합니다.

예시:

  • 비정규화된 테이블: (학생ID, 과목, 교수명, 프로젝트) -> 학생이 여러 과목을 듣고, 각 과목마다 다른 교수가 있으며, 프로젝트도 여러 개 있을 때
  • 5NF 테이블: (학생-과목 테이블: 학생ID, 과목); (과목-교수 테이블: 과목, 교수명); (학생-프로젝트 테이블: 학생ID, 프로젝트)

이렇게 각 정규형 단계는 데이터베이스의 중복과 불일치를 줄이고, 데이터 무결성을 유지하기 위한 규칙을 제공합니다. BCNF와 제 4, 제 5 정규형은 매우 복잡한 데이터베이스 구조에서 더 많이 사용됩니다.

'DB' 카테고리의 다른 글

JDBC로 배우는 단계별 프로젝트 개발: Ver 3과 Ver 4를 통해 얻은 깨달음 🚀  (0) 2025.01.06
JDBC로 배우는 단계별 프로젝트 개발: Ver 1과 Ver 2를 통해 얻은 깨달음 🚀  (1) 2024.12.19
SQLD ) 데이터 모델링  (1) 2023.11.09
'DB' 카테고리의 다른 글
  • JDBC로 배우는 단계별 프로젝트 개발: Ver 3과 Ver 4를 통해 얻은 깨달음 🚀
  • JDBC로 배우는 단계별 프로젝트 개발: Ver 1과 Ver 2를 통해 얻은 깨달음 🚀
  • SQLD ) 데이터 모델링
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (324) N
      • Algorithm & Data Structures (245) N
        • BOJ (103) N
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (26) N
        • SQL (20) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    골드
    다익스트라
    programmers
    알고리즘
    dfs
    Dijkstra
    이분탐색
    baekjoon
    DynamicProgramming
    BFS
    후위순회
    프로그래머스
    동적계획법
    dp
    Stack
    Java
    algorithm
    백트래킹
    전위순회
    PriorityQueue
    경로압축
    SQL
    구현
    binarySearch
    백준
    유니온파인드
    투포인터
    unionfind
    Union-Find
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
데이터 베이스 정규형
상단으로

티스토리툴바