본문

DB Modeling

도입

이번 포스팅에서는 DB Modeling에 대해 정리할 예정이다.


왜 DB Modeling를 배워야할까?

확장성, 재사용성을 고려하므로 유지보수 리소스를 적게 사용하기 위함이다.

e.g. 작은 집을 만들 때는 크게 고려할 것이 없지만 큰 집일 수록 많은 것을 고려해야한다.

철저하게 계획하므로 유지보수 리소스를 적게 만든다.


DB Model

  1. 개념
    데이터의 설계도, 약속한 표기법(ERD)로 데이터를 표현하는 과정
    효율적인 데이터 모델링은 DB 성능과 직결된다.
  2. 목표
    비지니스, 데이터 본필, 데이터의 집합 이해 후 데이터를 정확히 표현
    이를 위해 최소의 entity와 인스턴스로 표현 (중복 제거)
    그리고 확장성, 재사용성 제공 (새로운 기능 추가 등)

DB Model의 구성

  1. Entity: 관리하고자 하는 정보, PK로 식별 가능
  2. Attribute: Entity가 갖는 속성
    1. Name: 이름
    2. Identifier: PK, FK
    3. Optionality: Mandatory, Optional
    4. Value Domain: Data Type, length etc
  3. Relationship
    1. Cardinality: 상대 Entity간 대응될 수 있는 instance개수 (0, 1, n)
    2. Optionality: 존재 여부 (nullable)

https://en.wikipedia.org/wiki/Relational_model#/media/File:Relational_model_concepts.png

https://en.wikipedia.org/wiki/One-to-many_(data_model)#/media/File:CPT-Databases-OnetoMany2.svg www.dbguide.net/publishing/img/knowledge/SQL_016.jpg

책은 1개 이상의 페이지로 갖고 있다.


DB Modeling 절차

  1. 개념 데이터 모델링: 핵심 Entity와 Relation 설정
    e.g. Book-Page처럼 관계 설정
  2. 논리 데이터 모델링: Entity의 Attribute와 Relation 설정
    e.g. Book에는 name, Page에는 pageNum atrribute 설정
  3. 물리 데이터 모델링: 논리 데이터 모델링의 결과 → 적합한 데이터베이스 언어로 변경
    e.g. MySQL에 맞는 데이터 언어로 논리 데이터 변경

http://www.dbguide.net/publishing/img/knowledge/SQL_004.jpg


정규화, 반정규화

  1. 정규화
    하나의 테이블을 하나 이상의 테이블로 분리하는 기법
    목표: 중복제거, 확장성 증대
  2. 반정규화
    비지니스 로직에 따라 테이블을 병합, Attribute를 중복 추가하는 기법
    목표: 조인 횟수 감소 → 성능향상, 단순한 SQL 작성

정규화 http://www.dbguide.net/publishing/img/knowledge/SQL_075.jpg
반정규화 http://www.dbguide.net/publishing/img/knowledge/SQL_096.jpg


식별자관계, 비식별자 관계

  1. 식별자 관계
    자식 PK에 부모 PK를 포함하므로 강한 종속 관계 부여
  2. 비식별자 관계
    자식 Attribute에 부모 PK를 포함하므로 약한 종속 관계 부여

식별자와 단점 www.dbguide.net/publishing/img/knowledge/SQL_064.jpg

비식별자와 단점 www.dbguide.net/publishing/img/knowledge/SQL_067.jpg


다대다 관계 모델링

정규화를 통해 중복 제거 및 확장성 증대

AS-IS
TO-BE

 

'컴퓨터 > 이론: 개발' 카테고리의 다른 글

DB 인덱싱의 기본 원리와 이해  (0) 2020.07.26
DB 아키텍처와 성능 관리  (0) 2020.07.21
DB Modeling  (0) 2020.07.20
HashMap 동작원리 및 충돌해결  (0) 2020.07.15
프로세스 VS 쓰레드  (0) 2020.07.14
Git Multi-branch 삭제  (0) 2020.05.06

공유

댓글 0