[앨리스(elice) 레이서 1기 ] 03주차/DAY13 - 데이터베이스 설계/모델링

Jung Wish·2021년 1월 7일
0
post-custom-banner

엘리스 레이서 1기 교육 - 데이터베이스 설계/모델링

데이터 모델링이란?

  • 효율적으로 데이터베이스를 구축하기 위해 데이터베이스의 뼈대를 세우는 작업입니다.
  • 데이터 모델링을 하는 이유는 효율적으로 데이터베이스를 설계, 구축하기 위해서 입니다.

데이터베이스 설계/모델링 단계

업무 파악 ➡️ 개념적 설계 ➡️ 논리적 설계 ➡️ 물리적 설계

업무 파악

  • 프로젝트에서도 사전 구성 및 기획의 단계가 필요하듯이 업무의 목적이나 정보 자체 등을 파악해야 합니다. ➡️ 해당 과정을 통해 기획서를 산출물로 만들어 냅니다.
  • 기획서를 기반으로 간단한 프로토타입을 작성하기도 합니다.

개념적 모델링

  • 기획했던 내용에서 실제 정보를 뽑아내는 작업입니다.
    • RDB는 내포관계를 허용하지 않기 때문에 업무 정보를 정리할때에는 모든 정보 개체 자체를 독립적인 형태인 로 작성해야합니다.
  • ERD(Entity Relationship Diagram)를 설계합니다.
  • ERD를 구성하는 요소는 다음과 같습니다. 개념적 모델링에서는 정보와 그룹을 뽑아내서 테이블로 작성하는 것까지 진행합니다.
    • 정보 (attribute ➡️ table의 column)
    • 그룹 (entity ➡️ 최종적으로 table)
    • 관계 (relation ➡️ pk와 fk가 되어 JOIN을 할 수 있는 근거)
  • 실제 데이터베이스에서 쓰일 table과 attribute를 고려하여 작성하여야 합니다.
    • 네이밍 규칙
      • 공통 : 범용적으로 사용되는 줄임말을 제외하고 줄임말 사용을 지양해야 합니다.
      • 테이블(Table) : 파스칼 표기법을 사용합니다(ex. StudentScore), 테이블명에는 tb_, 뷰에는 v_를 붙여 구분합니다.
      • 속성(Attribute) : 스네이크 표기법을 사용합니다(ex.student_id), 기본키나 외래키 등은 한 눈에 알아볼 수 있도록 속성 명 앞에 pk, fk를 붙여 구분합니다.
        👉🏻 표기법에 대한 내용은 이곳을 참고해주세요😌
    • 데이터베이스 튜플 간 구분을 위한 값(Key)
      • 기본키(Primary Key) : 테이블의 데이터를 유일하게 식별해낼 수 있는 키로 인조로 만들어낸 식별자가 아니라 자주 질의할만한 내용인 것이 가장 좋습니다. 중복이 될 수 없으며, NULL값이 올 수 없습니다.
      • 복합키(Composite Key) : 두 개 이상의 속성을 활용하여 튜플을 구분지어주는 방법에 쓰이는 키입니다.
      • 외래키(Foreign Key) : 다른 테이블의 키와 연결을 해주는 키로 참조의 무결성(참조 테이블의 값과의 일관성 유지)을 유지하기 위해 활용합니다.

논리적 모델링

  • 개념적 설계를 통해 작성된 ERD에 관계를 설계하는 작업입니다.
  • 관계 작성시 쓰이는 개념은 다음과 같습니다.
    • Cardinality : 관계의 대응성을 의미합니다.(1:1, 1:N, N:M)
    • Optionality / Mandatory : 관계에서 서로 필수적인 요소인지 아닌지를 판단하는 개념입니다.
  • 정규화를 통해 테이블을 최적화합니다.

물리적 모델링

  • 실제 데이터베이스 구현을 위한 SQL문을 작성합니다.
  • 데이터베이스 모델과 기능을 고려해 성능을 최적화하는 것이 중요합니다.
  • 성능의 최적화를 중요하게 생각하는 단계이기 때문에 역정규화(반정규화, denormalization)를 진행하기도 합니다.
    ➡️ 실제 정규화는 JOIN 연산량이 지나치게 증가하여 질의 성능을 떨어트릴 염려가 있기 때문입니다.

Recommand

  • oven - 기획 단계에서 사용하기 유용한 프로토타이핑 tool
  • draw.io - erd를 웹상에서 간단하게 그릴 수 있는 tool
  • 해당 과정을 직접 해보고 만들어진 데이터베이스로 간단한 프로젝트 구현해보기

Reference

profile
Frontend Developer, 올라운더가 되고싶은 잡부 개발자, ISTP, 겉촉속바 인간, 블로그 주제 찾아다니는 사람
post-custom-banner

0개의 댓글