[SQLD] 정규화 (Normalization)

2024. 3. 15. 10:05·자격증/SQLD

정규화 (Normalization)

정규화란 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 Entity(이하 테이블)를 작은 단위로 분리하는 과정이다.

장점

  • 이상 현상 제거 및 방지
  • 데이터베이스 구조 확장시 재 디자인 최소화
  • 데이터 입력/수정/삭제 성능 향상

단점

  • Join 연산 증가
  • 데이터 조회 성능 저하
    단, 항상 조회 성능을 저하시킨다는 것은 아님. 기본적으로 중복된 데이터를 제거함으로써 조회성능을 향상시킬 수 있음을 알아야한다.

 

 

성능을 고려한 데이터 모델링의 순서는

정규화 수행 → DB 용량 산정 → 트랜잭션 유형 파악 → 반정규화(역정규화) → PK/FK 조정 → 데이터 모델 검증

 

정규화의 종류


1. 1차 정규화

 

같은 성격과 내용의 속성이 중복될 때,

1. 중복 값은 제거

2. 새로운 테이블 추가 (PK 추가)

3. (기존 테이블과) 1:M 관계 형성

 

 

 

'기능분류코드' 속성 차원에서, 같은 속성인데

칼럼 단위로 반복되고 있다.

 

→ 1차 정규화 대상으로,

새 테이블을 추가하여 

오른쪽 표와 같이 분리할 수 있다.

 

(모델, 모델유형기능분류는 1:M 관계를 형성한다.)

 

 


1:1 관계

  • 1:1 관계는 두 개의 엔터티(테이블) 간에 서로 유일한 관계를 갖는 것을 의미한다.
  • 예를 들어, 주문 테이블과 배송 정보 테이블 간에 1:1 관계가 있을 수 있다. 각 주문은 한 개의 배송 정보를 갖고 있고, 한 개의 배송 정보는 한 개의 주문에 대응한다.
  • 이러한 경우에는 주문 테이블의 기본 키가 배송 정보 테이블의 외래 키가 되거나, 그 반대로 배송 정보 테이블의 기본 키가 주문 테이블의 외래 키가 될 수 있다.

 

1:M 관계

  • 1:M 관계는 한 개의 엔터티가 다른 엔터티와 여러 개의 관계를 갖는 것을 의미한다.
  • 예를 들어, 고객 테이블과 주문 테이블 간에 1:M 관계가 있을 수 있다. 한 명의 고객은 여러 개의 주문을 할 수 있지만, 각 주문은 하나의 고객에 대응된다.
  • 이러한 경우에는 주문 테이블에는 고객의 식별자인 외래 키가 저장된다. 한 개의 주문이 한 명의 고객과 연결되어 있다.

 

따라서 1:1 관계는 두 개의 엔터티 간에 서로 유일한 관계를 가지고 있으며, 1:M 관계는 한 개의 엔터티가 다른 엔터티와 여러 개의 관계를 가지고 있다.


 

2. 2차 정규화

PK(Primary Key)가 2개 이상일 때,종속되는 관계가 있다면 분리한다.

 

 

기본키가 '관서번호', '납부자번호'가 2개 이상이므로 이를 구분하여 분리해준다.

 

이러한 현상을 복합키라고 한다.

 

함수종속성(FD)

데이터들이 어떠한 기준에 의해서 종속되는 것을 의미.

 

- 완전 함수적 종속

기본키에 대해서 그 속성이 완전히 종속될 때

 

- 부분 함수적 종속

기본키 전체가 아니라, 일부에 대해 종속될 때

 

 

3. 3차 정규화

기본 키에 의존하지 않고, 일반 컬럼에 의존하는 컬럼이 있다면 이를 제거한다.

 

직원 테이블에 기본 키인 '사원번호' 외에 의존하는 컬럼이 있다.

부서코드와 부서이름은 '부서' 테이블에 속해야 할 사항이다.

 

→ 데이터가 중복되어, 저장 공간이 낭비되고 있다.

3차 정규화로 해결한 모습.

 

저작자표시 (새창열림)

'자격증 > SQLD' 카테고리의 다른 글

[SQLD] 비전공자 합격 후기  (0) 2024.04.02
[SQLD] SQL 활용  (4) 2024.03.16
[SQLD] SQL 기본  (0) 2024.03.15
[SQLD] 데이터 모델과 SQL  (2) 2024.03.15
[SQLD] 데이터 모델링의 이해  (2) 2024.03.15
'자격증/SQLD' 카테고리의 다른 글
  • [SQLD] SQL 활용
  • [SQLD] SQL 기본
  • [SQLD] 데이터 모델과 SQL
  • [SQLD] 데이터 모델링의 이해
kwh_coding
kwh_coding
성장하는 괴물 성괴 김우형
  • kwh_coding
    코딩 일기
    kwh_coding
  • 전체
    오늘
    어제
    • 분류 전체보기
      • JAVA
      • JavaScript
        • Node
        • React
      • PYTHON
      • GitHub
      • DJANGO
      • ERP Project
      • NAVER CLOUD Web DevOps
      • 자격증
        • SQLD
        • 정보처리기사
        • ADsP
      • 코딩테스트
        • 프로그래머스 Lv0
        • 프로그래머스 Lv1
      • Spring
      • Tools
        • Postman
        • eGov
      • WEB
      • CS
  • 블로그 메뉴

    • 홈
    • GitHub
    • Notion
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    brycpt
    node
    jsp
    html
    web
    gitbash
    javascript
    eGov
    SQLD
    git
    Java
    정보처리기사
    프로그래머스
    React
    private network
    github
    해시 암호화
    코딩테스트
    코딩
    annotation
    RDBMS
    AdSP
    코테
    js
    Python
    django
    Tomcat
    Postman
    spring
    CORS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kwh_coding
[SQLD] 정규화 (Normalization)
상단으로

티스토리툴바