정규화(Normalization)

2024. 9. 5. 09:09·SQL

🐲정규화(Normalization)는 데이터베이스 설계에서 데이터의 중복을 줄이고 데이터 무결성을 높이기 위해 사용하는 과정입니다. 정규화는 데이터베이스의 구조를 체계적으로 개선하여, 데이터를 보호하고 중복된 데이터와 일관되지 않은 종속성을 제거하여 데이터의 삽입, 삭제, 수정 시 발생할 수 있는 이상 현상(anomaly)을 방지하는 것을 목표로 한다. 예를 들어, '고객 주소' 변경은 해당 데이터가 Customers 테이블에만 저장되고 데이터베이스의 다른 테이블에는 저장되지 않으면 구현하기가 더 쉽다.정규화는 여러 단계로 나뉘며, 각 단계는 정규형(Normal Form)으로 정의된다. 


🐲 정규화의 목적

  • 데이터 중복 최소화: 중복된 데이터는 디스크 공간을 낭비하고 유지 관리 문제를 일으키므로 동일한 데이터가 여러 곳에 저장되지 않도록 하여 저장 공간을 절약하고 데이터 일관성을 유지시킨다.
  • 데이터 무결성 향상: 데이터의 일관성을 유지하고, 잘못된 데이터 입력을 방지한다.
  • 이상 현상 방지: 삽입, 삭제, 수정 시 발생할 수 있는 문제를 예방한다.

 

🐲 정규형(Normal Form)
정규화는 일반적으로 여러 단계로 나뉘며, 각 단계는 특정한 조건을 만족해야 합니다. 주요 정규형은 다음과 같다.

  1. 제1정규형(1NF)
    정의: 엔티티에서 하나의 속성이 복수의 값을 갖도록 설계되었을 때 하나의 속성이 단일 값(atomic value)을 갖도록 하는 것이다.
    조건:테이블의 모든 필드가 단일 값을 가져야 하며, 반복되는 그룹이 없어야  하며 각 레코드는 고유해야 한다.
    제1정규화 이전

    제1 정규화 이후
  2. 제2정규형(2NF)
    정의: 제1정규형을 만족하고, 주식별자(pk)가 아닌 속성 중에서 주식별자 전체가 아닌 일부 속성에 종속된 속성을 찾아 제거하는 과정이다.
    조건:기본 키의 일부에만 의존하는 비주요 속성이 없어야 한다. 즉, 기본 키의 모든 부분에 종속될 것.
    제2정규화 이전
    제2정규화 이후
  3. 제3정규형(3NF)
    정의: 제2정규형을 만족하고, 주식별자(pk)가 아닌 속성들 중에서 종속 관계엥 있는 속성을 찾아 제거하는 과정이다.
    조건:비주요 속성이 다른 비주요 속성에 종속되지 않아야 한다.
    제3정규화 이전



    제 3정규화 이후 직원테이블

    제 3정규화 이후 급여테이블

 

🐲 정규화의 과정
정규화는 다음과 같은 단계로 진행된다

① 데이터 수집: 데이터베이스에 저장할 데이터를 정의하고 수집한다.
② 1NF 변환: 데이터를 원자적인 형태로 변환하여 1NF를 만족하도록 한다.
③ 2NF 변환: 비주요 속성이 기본 키에 완전 함수 종속되도록 테이블을 분리한다.
④ 3NF 변환: 비주요 속성이 다른 비주요 속성에 의존하지 않도록 다시 테이블을 분리한다.

 

🐲 정규화의 장단점
◎장점

  • 데이터 중복 감소로 인한 저장 공간 절약
  • 데이터 무결성 유지
  • 데이터의 일관성 확보

◎ 단점

  • 지나치게 정규화하면 데이터 조회 시 조인이 많이 발생하여 성능 저하
  • 복잡한 쿼리가 필요할 수 있음

🐲  결론

  • 정규화는 데이터베이스 설계에서 필수적인 과정으로, 데이터의 중복을 줄이고 무결성을 높이는 데 중요한 역할을 한다. 그러나 정규화의 정도는 시스템의 요구 사항과 성능을 고려하여 적절히 결정해야 한다. 필요에 따라 비정규화(denormalization) 과정을 통해 성능을 최적화하는 것도 중요하다.

 

참고
https://galaktika-soft.com/blog/data-mining-normalization.html
 

Data mining normalization | Galaktikasoft

The article is dedicated to data mining normalization and its techniques

galaktika-soft.com

 

 

 

'SQL' 카테고리의 다른 글

[SQL]테이블 생성, 삭제, 변경  (0) 2024.09.05
[sql]오라클 계정생성  (0) 2024.09.05
[SQL]WINDOW FUNCTION(윈도우 함수),분석함수(Analytic Function)  (0) 2024.09.04
[sql] 계층형 쿼리(Hierarchical Query)  (0) 2024.09.04
[SQL] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS),INLINE VIEW  (0) 2024.09.03
'SQL' 카테고리의 다른 글
  • [SQL]테이블 생성, 삭제, 변경
  • [sql]오라클 계정생성
  • [SQL]WINDOW FUNCTION(윈도우 함수),분석함수(Analytic Function)
  • [sql] 계층형 쿼리(Hierarchical Query)
라텐느
라텐느
이제 막 개발을 시작한 초보가 개인공부를 하는 공간입니다.
  • 라텐느
    괴발개발
    라텐느
    • 개발자 (153) N
      • HTML|CSS (14)
      • JAVA (29)
      • JAVACSCRIPT (15)
      • SQL (16)
      • 기타 (5)
      • JSP (2)
      • SPRING (13)
      • SPRING BOOT (6)
      • Git&GitHub (1)
      • 시행착오 (2)
      • 개발일지 (35)
        • GreenMiniProject1 (12)
        • GreenMiniProject2 (9)
        • GreenFinalProject (14)
      • Flutter (5)
      • 자격증 (1)
        • SQLD (1)
      • AWS (2)
      • Linux (1)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    태그
    SQL
    HTML
    링크
    JS
    개발자
    AJAX
    java
    부트캠프
    tag
    일지
    CSS
    db
    link
    JQuery
    티스토리챌린지
    javascript
    오블완
    자기계발
    input
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
라텐느
정규화(Normalization)
상단으로

티스토리툴바