[DB] 데이터베이스 모델링과 ERD

JeongYong Park·2023년 6월 16일
2
post-thumbnail

다음주면 그룹 프로젝트를 시작하게 되는데, 데이터베이스 모델링 과정을 수행할 것 같아 예습할겸 데이터베이스 모델링과 ERD 작성에 대해 글을 작성해보려 합니다.

데이터 모델링

데이터 모델링(data modeling)은 수집된 정보와 관리 시스템을 정의하는 시각적 표현 혹은 청사진을 생성하는 프로세스입니다.
즉, 현실세계에서 응용 프로그램에 필요한 데이터를 분석 및 선택해서 물리적으로 저장하는 방법을 결정하는 정형화된 기법입니다.

데이터 모델링의 단계

위 그림을 봤을 때, 모델링은 다음과 같은 과정을 거치게 됩니다.

  1. 요구사항 분석 ➡️ 요구사항 분석서
  2. 설계
    2-1. 개념적 설계 ➡️ ERD
    2-2. 논리적 설계 - 관계형 모델
    2-3. 물리적 설계 - SQL
  3. 데이터베이스 구현

애플리케이션의 요구사항을 데이터의 관점에서 바라볼 수 있도록 합니다.

  • 사용자 혹은 앱이 데이터베이스에게 요구하는 것은 무엇인가?
  • 무엇을 어떻게 저장할 것인가?

개념적 설계

개념적 설계란 요구사항 분석서를 토대로 개체(Entity)를 추출하고 개체들 간의 관계를 정의하여 산출물로 ER다이어그램을 내는 것입니다.

논리적 설계

논리적 설계란 개념적 설계 단계에서 생성한 ER 다이어그램을 기술적 데이터 구조에 매핑(Mapping)하여 실제 DBMS가 지원하는 논리적 구조로 변환하는 과정입니다.

물리적 설계

물리적 설계란 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크와 같은 실제 컴퓨터의 저장장치에 저장하기 위한 물리적 구조를 정의하고 구현하는 과정입니다.

ER 모델

ER 모델은 요구사항들을 개체(Entity)와 개체들간의 관계(Relationship)로 표현한 것을 말합니다.

개체 (Entity)

  • 실제 현실에서 독립적으로 존재하는 어떤 것
  • ERD에서 직사각형으로 표현

속성 (Attribute)

  • 개체를 설명할 수 있는 특성
  • ERD에서 타원으로 표현
  • 키 속성 : 개체마다 고유한 값을 가지는 속성
  • 키 속성은 밑줄로 표현하며 하나 이상 존재

관계 (Relationship)

  • 개체와 개체를 연결하는 정보
  • 관계도 속성을 가질 수 있습니다.
  • 1:1, 1:N, M:N 세 가지 관계가 존재합니다.
  • 반드시 필요한 관계는 겹줄로 표현합니다.

약한 개체와 식별 관계

  • 키가 없는 개체를 약한 개체(weak entity)라고 합니다.
  • 부모 개체 타입이 결정되지 않으면 개체를 식별할 수 없는 종속적인 개체 타입입니다.
  • 약한 개체와 부모 개체와의 관계를 식별 관계(identifying relationship)이라고 합니다.

예제를 통한 이해

회사 운영 SW

  • 회사 분석
    • 회사는 부서로 이루어져 있다.
    • 부서는 부서이름과 부서번호, 한 명의 부장을 가진다.
    • 부장의 업무 시작날짜를 기록한다.
    • 부서는 하나 이상의 장소에 있을 수 있다.
  • 프로젝트
    • 부서는 여러 프로젝트를 관리한다.
    • 프로젝트는 고유번호, 고유이름, 위치 정보를 가진다.
    • 한 프로젝트는 하나의 부서에만 속한다.
  • 사원
    • 사원은 한 부서에만 속한다.
    • 사원은 하나 이상의 프로젝트에 참여한다.
    • 사원 데이터는 사번, 이름, 주소, 성별, 연봉 정보 등이다.
    • 각 사원은 프로젝트에 참여한 시간을 관리한다.
    • 각 사원은 1또는 0명의 직속 상관이 있다.
  • 사원가족
    • 사원들의 경조사 등을 위해 가족 정보를 유지한다.
    • 가족 구성원에 대해 이름, 성별, 생일, 관계만 저장한다.
  1. 먼저 위의 요구사항을 토대로 얻어낼 수 있는 개체(Entity)는 부서, 프로젝트, 사원, 사원가족입니다.
  2. 각 개체의 속성을 추출합니다.
    • 부서 : 부서번호, 부서이름, 위치정보
    • 사원 : 사번, 이름, 주소, 성별, 연봉
    • 프로젝트 : 고유번호, 고유이름, 위치정보
    • 사원가족 : 이름, 성별, 생일, 관계
  3. 각 개체간의 관계를 추출합니다.
    • 사원 ↔️ 부서 : 근무하다 (N:1)
    • 사원(부장) ↔️ 부서 : 관리하다 (1:1)
    • 사원 ↔️ 사원(직속상관) : 감독하다 (N:1)
    • 사원 ↔️ 프로젝트 : 참여하다 (N:M)
    • 부서 ↔️ 프로젝트 : 관리하다 (1:N)
    • 사원 ↔️ 사원가족 : 부양하다 (1:N)

완성된 ERD

  • diagrams.net 에서 그려본 ERD 입니다.

  • MySQL workbench에서도 작성을 해보았습니다.

    • 맞게 작성한 것인지는 잘 모르겠습니다! 혹시 잘못된 부분이 있다면 알려주세요.

참고 자료

https://aws.amazon.com/ko/what-is/data-modeling/

코드스쿼드 교육자료

profile
다음 단계를 고민하려고 노력하는 사람입니다

1개의 댓글

comment-user-thumbnail
2023년 6월 29일

안녕하세요:) 괜찮으시면 javavoja@protonmail.com으로 메일 부탁드립니다

답글 달기