본문 바로가기
백엔드

ERD 설계? 어떻게 진행할까?

by 소프트웨어 학부생의 개발 도전기 2024. 9. 18.

ERD가 뭘까?

  • ERD란 Entity-Relationship-Diagram 의 약자로, 데이터베이스 구조를 한눈에 알아보기 위해서 쓰인다.
  • DB를 개발하기 전에 보다 많은 아이디어를 도출하고, 데이터베이스 설계의 이해를 높이기 위해 데이터 모델링을 실시한다.
  • 쿼리문을 작성할 때 테이블들이 구조화된 다이어그램을 보면서 도움을 받을 수 있다.
  • 데이터의 다양한 특징을 확인할 수 있어 요구사항을 그에 맞게 개발할 수 있다.

ERD의 핵심은 Entity, Relationship, Attribute 이다. 각 용어들의 의미를 먼저 살펴보자.

 

Entity(개체)

Entity는 데이터베이스 설계에서 중요한 개념으로, 현실 세계에서 존재하는 사물, 개념, 혹은 사건 등을 추상화하여 데이터로 표현한 객체를 의미한다. 엔티티는 데이터베이스 테이블에 해당하며, 각 엔티티는 하나의 테이블로 변환된다. 각 엔티티는 고유한 속성과 이를 식별할 수 있는 기본 키를 가진다.

 

Entity의 주요 특징

  • 엔티티는 현실 세계에서 식별 가능한 객체나 개념이다. 예를 들어, 사람, 회사, 제품, 주문과 같은 것을 엔티티로 정의할 수 있다.
  • 데이터베이스를 설계할때, 쉽게는 테이블이 Entity로 정의될 수 있다.
  • 모든 Entity는 하나 이상의 식별자(UID)를 가져야 하며, UID가 없다면 Entity라고 할 수 없다.
  • Weak Entity
    - 개체가 가진 속성들로는 개체를 고유하게 정의할 수 없는 개체를 의미한다. 예를 들어, 각 교육과정에 분반이 있다고 했을 때, 분반이라는 개체는 자신을 정의하는 key가 없고, 각 교육과정에 의존하게 된다.

    - "알고리즘" 이라는 강의가 존재하고, 001, 002, 003... 분반이 있다고 했을때, 이 분반 이름은 따로 특징이 없고 다른 강의와도 겹칠 수 있다. 이를 단독으로 존재할 수 없고, 다른 개체에 의존해야 하는 Weak Entity라고 한다.
  • 엔티티는 인스턴스(Instance)를 가짐. (각 엔티티는 여러 개의 인스턴스를 가질 수 있다.) 이는 엔티티가 테이블이라면, 인스턴스는 테이블의 각 행(row)에 해당한다.) 
    - ex : 사용자 엔티티의 사용자 ID가 기본 키로 설정될 수 있다.\
  • 기본 키(Primary Key)
    엔티티의 각 인스턴스(레코드)를 유일하게 식별하기 위해 기본 키를 설정한다. 기본 키는 중복될 수 없으며, 한 엔티티에서 오직 하나의 값을 가진다.
    - ex : 사용자 엔티티의 사용자 ID가 기본 키로 설정될 수 있다.

 

Attribute(속성)의 주요 특징

Attribute(속성)은 데이터베이스에서 엔티티(Entity)의 특성을 나타내는 데이터 필드를 의미한다. 속성은 엔티티가 갖는 구체적인 정보를 표현하며, 데이터베이스에서 테이블의 열(column)에 해당한다. 각 엔티티는 여러 개의 속성을 가질 수 있으며, 이러한 속성들이 엔티티의 성격을 정의한다.

 

  • 구체적인 특성 표현 : 속성은 엔티티의 특성을 구체적으로 나타낸다. 예를 들어, 사용자(user) 엔티티는 사용자의 이름, 이메일, 전화번호 등의 속성으로 표현된다.
    - ex : 사용자 엔티티 -> 이름, 나이, 이메일, 주소 
  • 각 속성은 도메인을 가진다. 도메인은 속성이 가질 수 있는 값의 범위를 나타낸다. 도메인을 정의함으로써 속성에 허용될 수 있는 값의 유형이나 범위를 제어할 수 있다.
    - ex : 나이(Age) -> 속성의 도메인은 0부터 120 사이의 정수
    - ex : 이메일(Email) -> 속성의 도메인은 이메일 형식에 맞는 문자열
  • 기본 키(Primary Key) 와 외래 키(Foreign Key) 특정 송성은 엔티티의 기본 키나 외래 키로 지정될 수 있다.
    - 기본 키(PK) : 엔티티 내에서 각 인스턴스를 고유하게 식별하는 속성. 기본 키는 중복될 수 없고, 반드시 값을 가져야 한다.
    - 외래 키(FK) : 다른 엔티티의 기본 키를 참조하는 속성으로, 엔티티 간의 관계를 정의하는데 사용됨.
    - ex : 사용자 ID사용자 엔티티의 기본 키
    - 카풀 서비스에서 차량 ID예약 엔티티에서 외래 키로 사용되어 차량 엔티티와의 관계를 나타냄
  • 단일 값 속성과 복합 값 속성
    - 단일 값 속성(Single-valued Attribute) : 하나의 값만 가질 수 있는 속성이다. 예를 들어, 전화번호 속성은 일반적으로 단일 값을 가진다.
    - 복합 값 속성(Composite Attribute) : 여러 값을 가질 수 있는 속성으로, 각각의 값이 의미를 가질 수 있다. 예를 들어, 주소(Address)도시, 도로명, 우편번호 등으로 분리될 수 있는 복합 속성이다.
  • 다중 값 속성(Multivalued Attribute) 은 하나 이상의 값을 가질 수 있는 속성이다. 예를 들어, 한 사용자가 여러 개의 이메일 주소를 가질 수 있다면, 이메일 속성은 다중 값 속성이 될 수 있다.
    - ex : 사용자 엔티티의 전화번호 속성은 다중 값 속성이 될 수 있다. 한 사용자가 여러 전화번호를 가질 수 있기 때문이다.

 

Relationship(관계) 의 주요 특징

Relationship(관계)는 데이터베이스 설계에서 두 개 이상의 엔티티(Entity)간의 상호작용이나 연관성을 나타낸다. 관계는 데이터베이스에서 중요한 개념으로, 엔티티가 서로 어떤 방식으로 연결 되어 있는지를 시각적으로 표현하고, 실제 데이터베이스에서는 외래 키를 통해 구현된다.

 

  • Entity간의 관계를 의미한다
  • 두 Entity 간에 선을 긋고, 관계 명칭을 기록하게 된다
  • 선택 사항을 표시한다
    ◎ 점선은 선택적인 사항을 의미
    ex : 사원과 부서 Entity가 있을 때 부서 입장에서는 사원을배치 받을수도, 받지 않을 수도 있다.

    실선은 필수적인 사항을 의미
    ex : 사원 입장에서는 부서가 필수적으로 배정받아야 한다.
  • 관계 형태를 표시한다.
    삼지창 모양은 하나 이상을 의미
    단선은 하나를 의미
    ex : 부서는 여러명의 사원을 가질 수 있으나, 사원은 하나의 부서에만 배치된다. 

 

관계 형태(Cardinality)

각, Entity들이 가지고 있는 관계에는 여러가지 형태가 존재한다.

 

1) 1:1 관계 -> 양쪽 모두 단 하나씩 존재하는 경우이다. 예를 들면, 어떤 상점에서는 하나의 주소만이 존재한다.

한 엔티티의 인스턴스가 다른 엔티티의 인스턴스와 하나씩만 연결된다.

 

2) 1:N 관계 -> 일대다/다대일 관계는 하나의 원소가 두 개 이상의 원소와 관계를 맺는 것을 의미한다. 한 부서에는 여러명의 사원이 소속되어 있다.

-> 이를 관계 모델로 바꿀 때 바로 relationship의 table을 만들지 않고, "Many" 쪽에 있는 entity에 "one"쪽의 PK를 Attribute로 추가하게 된다. 쉽게는 사원의 정보에 부서 번호를 추가한다고 생각하면 된다.

 

3) N:M 관계 -> 다대다 관계라고 하며, 양쪽 모두 하나 이상과 연관될 수 있다. 예를 들어 하나의 수업에는 여러명의 학생이 있을 수 있고, 한 명의 학생이 여러 개의 수업을 들을 수 있다.

 

위와 같은 경우에는, N:M 관계를 M:1 관계로 분할한다. 관계를 맺는 두 Entity의 Primary Key를 가져와 하나의 relation을 생성한다. 즉, 수강신청이라는 테이블을 하나 더 만들어 학생은 자신이 수강신청하는 수업에만 관계를 맺고 있으면 된다.

 

4) 참여도(Participation) 

관계에서 엔티티가 관계에 필수적으로 참여하는지 여부를 나타낸다.

- 전체 참여(Total Participation) : 엔티티의 모든 인스턴스가 반드시 관계에 참여해야 하는경우.
ex : 모든 학생이 강의와 연관되어야 하는 경우

- 부분 참여(Partial Participation) : 엔티티의 일부 인스턴스만 관계에 참여하는 경우.
ex : 모든 사용자가 반드시 예약을 할 필요는 없을 수 있다

 

 

5) 관계의 차수(Degree)

관계의 차수는 관계에 참여하는 엔티티의 수를 나타냄

- 이항 관계(Binary Relationship) : 두 개의 엔티티가 관계를 형성함. 가장 일반적인 유형

ex : 사용자와 수강신청 간의 관계

 

- 삼항 관계(Ternary Relationship) : 세 개의 엔티티가 관계를 형성함

ex : 의사, 환자, 처방전 간의 관계에서, 의사가 환자에게 처방전을 발급하는 경우

 

 

보통의 ERD 설계할 때는 테이블로 설계하고, 관계를 파악해가면서 테이블을 추가하거나 키/무결성 제약 조건을 추가하는 등 개념적 모델링과 논리적 모델링을 한번에 하는 것처럼 보인다.

'백엔드' 카테고리의 다른 글

CQRS 패턴  (0) 2024.09.30
소셜로그인 어떻게 도입할까?  (1) 2024.09.22
관계형 데이터베이스  (1) 2024.09.10
SSR? CSR? 렌더링 방식의 차이와 이해  (2) 2024.09.06
웹 브라우저의 호출과정  (1) 2024.09.05