[MariaDB] 데이터모델링, 정규화

심재혁·2023년 11월 23일
0
post-thumbnail

데이터모델링

  • 데이터 모델링이란 구축할 DB 구조를 약속된 표기법에 의해 표현하고 설계해 나가는 과정을 의미

데이터모델링 단계

  • 개념적 데이터 모델링
    • ERD 다이어그램을 통해 데이터베이스의 구조를 시각화
    • 이 단계는 추상화된 DB구조를 그리는 것이므로, 필요시 생략 가능
  • 논리적 데이터 모델링
    • 구체적으로 데이터베이스 설계. 각 데이터의 타입, 관계, key등을 지정
    • 엑셀 또는 ERD 사용
  • 물리적 데이터 모델링
    • 실제 데이터베이스를 만드는 과정이고, SQL 작성이 여기에 해당

개념적 데이터 모델링

  • ERD (Entity Relationship Diagram)란 'Entity 개체'와 'Relationship 관계'를 중점적으로 표시하는 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램
  • 외래키는 별도의 속성으로 안넣는 것이 일반적

개념적 데이터 모델링 - 관계표시

mandatary, optional 키워드는 항상 상대방 엔티티의 입장

  • 1 to many

  • 1 mandatary to many optional
    • 게시글은 반드시 글쓴이를 가지나, 회원들은 반드시 글을 써야할 필요가 없음
  • 1 optional to many optional
    • 게시글은 글쓴이가 있을수도, 없을수도 있고, 회원들도 반드시 글을 쓸 필요는 없음
  • 1 optional to many mandatary
    • 회원이 생성되면 반드시 글을 써야하지만, 게시글중에는 글쓴이가 없는 익명글도 있음

논리적 데이터 모델링

  • 개념적인 데이터 모델이 완성되면, 구체화된 업무 중심의 데이터 모델을 설계
  • 이 단계에서 업무에 대한 Key, 속성, 관계등 구체화된 정보를 표시

    	

물리적 데이터 모델링

  • 최종적으로  데이터 베이스에 실제 테이블을 만드는 SQL문 작업


테이블 간의 참조 관계의 종류

  • 1:n관계
    • author입장에서의 post와의 관계
  • n:1관계
    • post입장에서의 author와의 관계
  • 1:1관계
    • 한 테이블의 레코드가 다른 테이블의 레코드 하나와만 관련
    • author테이블과 author_address 테이블로 분리 가능
  • n:m관계
    • 만약 여러 author가 posting 글 1개를 공동 작성할 수 있다면 n:m 관계
    • post의 author_id가 multi가 되므로, author_id를 문자열로 하여 여러개 두는 것은 가능.
    • 그러나 정규화가 되지 않는 문제 발생
    • 해결책
      • 연결테이블을 만들어 1:n, n:1 관계로 풀어주는 것이 일반적인 해결책
      • post_author 와 같은 테이블 생성
      • post_author는 post와 n:1관계, author와 n:1관계

정규화

  • 정규화 순서 쉽게 외우기
    • 도부이결다조
      1. 원자값이 아닌 메인 분해
      2. 분적 함수 종속 제거
      3. 행적 함수 종속 제거
      4. 정자이면서 후보키가 아닌 것 제거
      5. 치 종속제거
      6. 인 종속성 이용

하지만 실무에서 정규화 모든 단계를 따져가서 일을 하지 않기에 주요한 내용만을 다룰 예정


함수적 종속성

  • f(x)=y
  • 함수적 종속이라는 표현은 수학의 함수에서 유래
  • y는 x의 값에 의해 결정되는 관계로서, y는 x에 종속적이고, 이를 수학적인 표현에서는 y는 x에 함수종속적이다 라고 표현
  • 정규화 관련해서 빈번히 사용되는 표현으로서, a가 b에 함수종속적이다 하면 b의 값에 의해 a가 결정됨을 의미

    예시)

    • 학번과 학부
      • 학번 -> 학부
      • 즉, 학번에 따라 학부가 결정되므로, 학부는 학번에 함수 종속적
    • 등록금과 학부
      • 학부 -> 등록금
      • 학부에 따라 등록금이 결정되므로, 등록금은 학부에 함수 종속적

1차 정규화(도메인 분해)

  • 모든 열의 값이 원자적이어야 함. 즉, 각 열에는 하나의 값만 있어야 함을 의미
  • 하나의 컬럼에 여러 원자값이 존재시, 조회조건을 통한 조회 어려움 발생
  • 수정/삭제가 발생할때 특정 데이터를 찾아 수정/삭제의 어려움
  • FK 및 index 지정이 불가능함
  • 즉, 1차 정규화는 여러 원자값의 컬럼을 쪼개는 과정

2차 정규화(부분종속 제거)

  • 기본키가 아닌 모든 속성이 기본키에만 완전 함수 종속된 상태를 의미
  • 복합키로 이루어진 기본키 중에 특정 키에도 종속적이면 2차 정규화가 안된 상황
  • 즉, 기본키에 종속적이지 않은 속성 분리
  • 2차 정규화를 위한 방법
    • 기본키가 아닌 키에 부분적으로 종속돼 있는 특정 컬럼값을 제거
    • 기본키에 종속적이지 않다면 해당 테이블에 어울리지 않는 컬럼이라는 생각 필요
    • 사실상 해당 테이블에 어울리지 않는 컬럼 분리 작업
  • 불필요한 컬럼을 제거하면 공간 효율적

3차 정규화(이행종속(transitive depency)제거)

  • X ->Y 이고 Y->Z 이면 X->Z 가 성립. Z가 X에 이행적으로 함수 종속
  • 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 함
  • 즉, 이행종속이 되는 부분종속을 제거해야 하는 특성상, 부분종속과 구분 이 어려운 부분
  • 만약 학번이 PK. pk -> 학부, 학부 -> fees. 즉, pk -> fees가 되어 fees가 pk에 이행종속적

BCNF

  • 결정자이면서 후보키가 아닌 것을 제거
  • 후보키 집합에 속하지 않은 결정자가 존재하면 BCNF위반
  • 후보키란 테이블내에 유일성을 가질 수 있는 key 중 하나
  • BCNF (Boyce and Code Normal Form)은 제 3 정규형을 조금 더 강화시킨 개념이다.

다치 종속 제거 (4NF)

  • 다치 종속성 (MULtiValued Dependency, MVD)이란 하나의 릴레이션에서 여러 속성과의 관계가 1:N 관계인 경우
  • A ->-> B 이중 화살표로 표시

조인 종속성 제거 (5NF)

  • 조인종속성이란 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것

0개의 댓글