Relational Database 모델링

아래 강의를 듣고 개인적으로 요약 정리해 본 내용이다.

RDBMS 모델링 설계

  • 도메인을 나타내는 테이블 설계
  • 테이블의 Primary Key 설계
  • 연관 관계를 나타내는 Foreign Key 설계

RDBMS Primary 키 속성

  • PK = unique + not null
  • unique와 not null만 만족하면 됨으로 어떤 의미를 부여하려 노력하지 말자
  • 고객으로 받은 값보다는 설계자가 부여하는 값이 안전
  • 무한하게 하기 위해 "년+월+일+seq" 방식도 많이 쓰임

RDBMS 연관 관계

  1. 1:M - 부모와 자식 관계
  2. M:N - 비지니스 관계
  3. 1:1 - 사실상 동일 테이블

1:M

  • 선천적인 부모, 자식 관계인지 파악(트리구조)
  • 실세계의 많은 부분이 여기 속함
  • M 쪽 FK로 연결
  • 1:M 재귀 호출도 가능
  • 자식 있는 부모는 삭제할 수 없다
  • 부모 없는 자식을 삽입 할 수 없도록 유지해 주는게 좋다
1:M 재귀

M:N

  • 1:M이 아니면 M:N 관계
  • 관계 테이블로 연결
  • 관계 테이블의 PK 구성
    • M:N을 하나의 PK로 묶으면(unique) - 중복 x
    • 독립형 PK로 구성 - 중복 허용
  • master 테이블 - 명사 ex) 고객, 상품
  • 관계 테이블 - 동사 ex) 주문(하다)

1:1

  • 원천적으로 같은 테이블
  • 따라서 PK를 공유
  • 상속 관계를 나타낼 수 있음
상속 관계

정규화

  • 1 정규화
    • 다가(multi-value)속성 -> 별도의 record로 분리
    • 복합속성 -> 별도의 column으로 분리
    • 이후 중복된 내용을 별도 테이블로 분리
  • 2 정규화 (왕족의 반란)
    • 다수의 PK가 존재
    • 하나의 PK에 종속된 column이 존재하면
    • 이를 별도 테이블로 분리
    • 기존 테이블의 PK는 FK가 된다
  • 3 정규화 (호족의 반란)
    • 키가 아닌 column들 사이에 종속 관계가 존재
    • 해당 column들을 별도 테이블로 분리
  • BC 정규화 (처가의 반란)
    • 키가 아닌 column이 키 역할
    • 이 키와 종속된 column을 별도 테이블로 분리

역정규화

  • 정규화 된 테이블 사이 join에 너무 많은 시간이 들때
  • 테이블간 중복 값을 허용 하도록 정규화의 반대 행위를 해 주는 것
  • 혹은 큰 테이블 분할로도 시도해 볼 수 있다
  • 빅데이터의 경우는 결국 Data Warehouse로

결론

  • rdb 설계 원칙은 중복을 허용하지 않도록 만들어 주는 것이다
  • 중복이 허용되면 anormaly가 생성되어 다른 값을 가진 같은 필드가 생성될 수 있다
  • 따라서, atomic 하게 될때까지 테이블을 나누는 것이 설계의 기본이다

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명