[데이터베이스 모델링] 정규화

2025. 11. 14. 00:16·데이터 분석/06. 데이터 모델링

정규화를 본격적으로 알기 전 이상 현상에 대해 알고갑시다.

좋은 관계형데이터베이스를 설계하는 목적 중 하나가 이상 현상이 생기지 않게 설계하는 것인데요

 

그렇다면 이상현상이란 뭘까요?

💡 이상 현상(anomaly)

: 데이터베이스에서 삽입, 업데이트, 삭제를 제대로 할 수 없게 되는 경우

 

1) 삽입 이상 

: 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가할 수 있는 경우

 

2) 업데이트 이상

: 중복된 데이터가 여러 곳에 저장되어 있는데, 그 중 일부만 수정되면 서로 다른 값이 되어 데이터 모순이 발생하는 현상.

 

3) 삭제 이상

: 어떤 정보를 삭제하면, 의도하지않은 다른 정보까지 삭제되어버리는 현상 

 

이런 현상을 예방하기 위해서는 데이터 정규화를 해야합니다

 


💡 정규화(Normalization)

: 데이터베이스의 테이블이 잘 만들어졌는지 평가하고, 잘 만들지 못한 테이블을 고쳐나가는 과정

 : 테이블을 정규형이라고 불리는 형태에 부합하게 만들어나가는 과정

 

정규형의 형태는 지켜야 되는 순서에 따라 Normal Form의 약자 NF와 숫자를 사용해서 

1NF(제 1 정규형), 2NF(제 2 정규형), 3NF(제 3 정규) 처럼 순서에 따라 규칙이 누적됩니다 

 

정규형의 종류는 굉장히 많지만 대부분의 경우 제 3 정규형에 부합하기만 하면 잘 정규화된 데이터 베이스라고 표현합니다


💡 정규화의 장점

  • 데이터베이스에서 삽입, 업데이트, 삭제 이상을 없앨 수 있다
  • 새로운 종류의 데이터를 추가할 때 테이블 구조 수정을 많이 하지 않아도 된다
  • 데이터베이스 구조를 단순화해서 사용자가 더 쉽게 이해할 수 있다

정규화 작업은 데이터 모델을 만들고, 데이터베이스에 구현하기 전에 적용하면 좋습니다


1. 1NF (제 1 정규형)

: 테이블 안 모든 로우의 모든 컬럼 값들은하나의 값(=나눌 수 없는 단일 값)만 허용된다

나눌 수 없는 단일 값은 하나의 값을 말하는 걸까?

모든 데이터는 맘만 먹으면 쪼갤 수 있죠
그래서 1NF는 문자 그대로 “물리적으로 쪼갤 수 있어야 한다”는 뜻이라기 보단

중요한 건 “해당 컬럼이 비즈니스적으로 하나의 단위로 쓰이냐”입니다.
비즈니스적으로 하나의 의미를 가진 단위면 ‘원자값’으로 보는 거죠

그래서 전화번호·이름처럼 분해 가능하지만 하나의 의미라면 1NF 만족하는 거고,
분리해서 따로 관리해야 하는 값(예: 여러 전화번호 목록)은 1NF 위반되는 거죠

 

2. 1NF를 지키지 않는 경우는 2가지

  1. 첫번째, 한 컬럼에 같은 종류의 값을 여러개 저장하고 있을 때
    • 해결책 :
      • 한 값만 넣기 위해서 컬럼의 수를 늘리는 방법은 NULL을 생성하기 때문에
        문제가 발생하는 해당 attribute를 분리해서 새로운 테이블로 만들어 주고,
        관계를 foregin key로 저장해 주는 방법을 사용하면 됩니다.
  2. 두번째, 한 컬럼에 서로 다른 종류의 값을 여러개 저장하고 있을 때
    • 해결책:
      • 한 컬럼을 여러개로 분리해서 모델링

 

 

'데이터 분석 > 06. 데이터 모델링' 카테고리의 다른 글

[데이터베이스 모델링] Candidate Key  (0) 2025.11.14
[데이터베이스 모델링] 함수 종속성과 이행성  (0) 2025.11.14
카디널리티를 적용한 ERM 초안 수정  (0) 2025.09.29
카디널리티 관계 유형  (0) 2025.09.29
식별자의 종류와 주식별자의 특성  (0) 2025.09.29
'데이터 분석/06. 데이터 모델링' 카테고리의 다른 글
  • [데이터베이스 모델링] Candidate Key
  • [데이터베이스 모델링] 함수 종속성과 이행성
  • 카디널리티를 적용한 ERM 초안 수정
  • 카디널리티 관계 유형
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    이행성
    AARRR
    Reset
    윈도우함수
    프로그래머스
    tableaubootcamp
    git
    DENSE_RANK
    코테
    solvesql
    코드잇스프린트후기
    streamlit
    tableau
    revert
    ROW_NUMBER
    rank
    SQL
    쿼리테스트
    코딩테스트
    cross_join
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[데이터베이스 모델링] 정규화
상단으로

티스토리툴바