본문 바로가기

웹프로그래밍/부트캠프 - Codeit

[7주차] 위클리 페이퍼 - 데이터베이스 정규화에 대해 설명해주세요.

728x90

데이터베이스 정규화

  • 정규화의 목표
    • 데이터를 구조적으로 정리하여 중복을 최소화
    • 데이터의 무결성을 유지
  • 정규화의 효과
    • 데이터베이스 관리가 효율적으로 이루어짐
    • 데이터의 일관성이 높아짐
  • 장점
    • 데이터 중복 최소화: 불필요한 중복을 제거하여 저장 공간을 절약하고 데이터의 일관성을 보장
    • 데이터 무결성 보장: 데이터의 일관성을 유지해 오류 발생 가능성을 줄임
    • 성능 향상: 데이터 검색 및 수정 작업의 성능을 최적화
  • 단점
    • 구조의 복잡성: 데이터베이스 구조가 복잡해질 수 있으며, 이를 이해하고 관리하는 데 어려움이 있음
    • Join 연산의 증가: 데이터를 조회할 때 여러 테이블을 Join 연산 수행, 성능이 저하될 가능성 존재

정규화 단계

  • 제1정규형 (1NF)
    • 테이블의 모든 열이 원자값(더 이상 나눌 수 없는 값)을 가져야 한다는 규칙
    • 하나의 열에 여러 값이 포함되지 않도록 해야 함
    비정규형:
    학생     | 취미
    ---------|--------------
    홍길동   | 독서, 음악
    김철수   | 영화감상
    
    1NF:
    학생     | 취미
    ---------|---------
    홍길동   | 독서
    홍길동   | 음악
    김철수   | 영화감상
    
  • 제2정규형 (2NF)
    • 2NF는 1NF를 만족하면서, 기본 키의 부분 집합에 종속된 속성을 제거하는 규칙
    • 각 비기본 속성이 기본 키 전체에 대해 완전히 종속되도록 함
    1NF:
    과목코드 | 학생ID  | 성적
    ---------|---------|------
    CS101    | 12345   | A
    CS101    | 67890   | B
    MATH101  | 12345   | C
    
    2NF:
    과목코드 | 학생ID  | 성적
    ---------|---------|------
    CS101    | 12345   | A
    CS101    | 67890   | B
    MATH101  | 12345   | C
    
    과목코드 | 과목명
    ---------|----------
    CS101    | 컴퓨터과학
    MATH101  | 수학
    
  • 제3정규형 (3NF)
    • 2NF를 만족하면서, 기본 키에 포함되지 않은 컬럼들이 다른 기본 키에 포함되지 않은 컬럼들에 종속되지 않도록 하는 규칙
    • 기본 키가 아닌 컬럼이 다른 기본 키가 아닌 컬럼에 의해 결정되지 않도록 해야 함
    2NF:
    학생ID   | 과목코드  | 성적 | 교수명
    ---------|-----------|------|---------
    12345    | CS101     | A    | 박교수
    67890    | CS101     | B    | 박교수
    12345    | MATH101   | C    | 김교수
    
    3NF:
    학생ID   | 과목코드  | 성적
    ---------|-----------|------
    12345    | CS101     | A
    67890    | CS101     | B
    12345    | MATH101   | C
    
    과목코드 | 교수명
    ---------|---------
    CS101    | 박교수
    MATH101  | 김교수
    
    
  • 보이스-코드 정규형 (BCNF)
    • BCNF는 3NF를 만족하면서, 테이블의 모든 결정자가 후보 키가 되도록 하는 규칙
    • 모든 결정자는 후보 키의 역할을 해야 함
    3NF:
    학생ID   | 과목코드  | 교수명
    ---------|-----------|---------
    12345    | CS101     | 박교수
    67890    | CS101     | 박교수
    12345    | MATH101   | 김교수
    
    BCNF:
    학생ID   | 과목코드
    ---------|---------
    12345    | CS101
    67890    | CS101
    12345    | MATH101
    
    과목코드 | 교수명
    ---------|---------
    CS101    | 박교수
    MATH101  | 김교수
    

참고 자료

728x90