[MariaDB] 7. 모델링, 정규화

JIWON·2025년 5월 9일

MariaDB

목록 보기
8/13
post-thumbnail

모델링

E-R 다이어그램

(개체 관계도 : 테이블 구조)

사각형 : 릴레이션
원 : 속성(컬럼),
밑줄원 : 기본키
- : 연결
마름모 : 관계

EMP 1개와 DEPT 1개가 매핑 되어있다
EMP 는 DEPT와 1개, DEPT는 EMP 와 N개 연결되어있다 EMP N 1 DEPT

까마귀발 어쩌구~
=> ER다이어그램 해석 방법 정리하기

샘플 데이터 E-R 다이어그램

💾 정규화

1. 테이블 설계 시 주의해야할 점

✅ 이상현상(Anomalies)

: 테이블이 잘못 설계되어 데이터 삽입, 삭제, 갱신 시 문제가 발생하는 현상

  • 삽입 이상 : 데이터를 삽입하고자 하는데 삽입하지 못하는 현상
  • 삭제 이상 : 데이터를 삭제할 때 필요한 정보도 같이 삭제되는 현상
  • 변경 이상 : 데이터를 수정할 때 한 번만 수정하면 되는데 여러 번 수정해야 하는 현상

📌 이상 현상은 데이터 중복, 즉 너무 큰 테이블에서 발생함.

✅ 예시 테이블

전화번호이름주소수강과목수강료
010목동파이썬300,000
011가산파이썬300,000
011가산DB250,000
012안양자바200,000
  • 기본키: 전화번호 + 수강과목
  • 문제:
    • 변경 이상: 파이썬 수강료 변경 시 여러 행 수정
    • 삭제 이상: 011이 DB 수강 취소 → DB 과목 정보까지 사라짐

✅ 해결 방안: 정규화

  • 테이블 분리로 중복 제거 및 이상현상 해소

정규화 후 테이블 구조

  • 학생 정보: 전화번호, 이름, 주소
  • 과목 정보: 수강과목, 수강료
  • 학생-과목 연결: 전화번호, 수강과목

2. 함수적 종속 (Functional Dependency)

  • 어떤 속성 A가 속성 B를 유일하게 결정 → A → B
  • 예: 주민등록번호 → 이름
    • (주민등록번호를 알면 이름 1개로 결정됨)

📌 용어 정리

  • 결정자: 다른 속성 값을 결정하는 속성
  • 종속자: 결정자에 의해 결정되는 속성

✅ 함수적 종속 유형

  • 완전 함수적 종속: 기본키가 여러개의 속성으로 구성될 때 기본키 전체를 알아야 하나의 값을 결정할 수 있는 경우

  • 부분 함수적 종속: 기본키가 여러 개의 속성으로 구성될 때 기본키의 일부분만으로 하나의 값을 결정할 수 있는 경우 (❌ → 제거 필요: 제2정규형)

  • 이행적 함수적 종속: 하나의 속성이 다른 하나의 속성의 값을 결정하고 결정되는 속성이 또 다른 속성의 값을 결정하는 경우
    A → B, B → C 일 때⇒ A → C (❌ → 제거 필요: 제3정규형)


3. 정규화 (Normalization)

: 데이터 중복 최소화, 구조 안정성 확보를 위한 테이블 분해 과정

  • 데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 확보하기 위한 과정으로 데이터를 분해하는 과정

✅ 장점

  • 중복 값, NULL 감소
  • 데이터 구조의 안정성 ↑
  • 삽입/삭제/갱신 시 오류 ↓

❌ 단점

  • JOIN이 많아져 성능 저하
  • 복잡한 데이터 조회에 부적합

4. 정규형 (Normal Forms)

정규형내용
제1정규형모든 속성 값은 원자값 (Atomic)이어야 함
제2정규형1NF + 부분 함수적 종속 제거
제3정규형2NF + 이행적 함수적 종속 제거
BCNF3NF + 모든 결정자는 후보키
제4정규형BCNF + 다치 종속 제거
제5정규형4NF + 조인 종속 제거

📌 주의:

  • 4NF 이상은 실무에서 잘 사용되지 않음
  • 정규화가 심화될수록 조회 성능 ↓

반정규화

: 정규화된 테이블을 조인 비용 줄이기 위해 중복, 통합, 분리 등을 수행해 재구성

목적: 성능 향상, 개발/운영 단순화

✅ 반정규화 방식

  • 테이블 추가

    • 중복 테이블, 통계 테이블, 이력 테이블 등
    • 자주 사용하는 테이블 추가
  • 테이블 병합

    • 자주 JOIN되는 테이블을 하나로 합침
  • 테이블 분할 (파티셔닝)

    • 하나의 테이블 데이터를 분리
    • 행 분할 / 열 분할

📌 분할 기준

  • 범위 분할: 나이 등 범위로 나눔
  • 해시 분할: 해시 함수 기반으로 나눔
  • 목록 분할: 명시적 값 목록으로 분할
  • 합성 분할: 위 방법들을 조합

0개의 댓글