[Database] ERD(Entity Relationship Diagram) 작성하기
ERD (Entity Relationship Diagram)
ERD는 Entity Relationship Diagram(엔티티 관계 다이어그램)의 약자이다. 데이터베이스 설계 과정에서 사용되는 모델링 기법 중 하나로, 데이터베이스에 저장될 데이터 엔티티(entity)들과 엔티티 간의 관계(relationship)를 시각적으로 표현한 다이어그램이다.
당근마켓 도메인 테이블 설계
위의 이미지는 “당근마켓 도메인 테이블 설계 ERD” 이다. 엔티티와 속성들의 관계들이 그림으로 표현된 모습이다.
구상요소 - 개체(Entity), 속성(Attribute), 관계(Relation)
Notification 테이블
엔티티(Entity)
- 정의 가능한 사물 또는 개념을 의미한다.
- 데이터베이스의 테이블이 엔티티로 표현된다.
- 유일한 식별자에 의해 식별 가능해야 한다.
- 엔터티는 다른 엔터티와 최소한 1개 이상의 관계를 맺는다.
기본 엔터티(키엔터티) : 그 업무에 원래 존재하는 정보, 타 엔터티의 부모 역할을 하며 자기 자신의 고유한 주식별자를 가짐. 예를 들면 사원, 부서 같은 개념입니다.
엔티티 속성(Attribute)
- 업무에서 필요로 하는 인스턴스에서 더 이상 분리되지 않는 최소의 데이터 단위
- 위 이미지에서는 “id, user_id, notification_type, identifier, is_read, is_valid, created_at” 를 의미한다.
- 테이블들의 각 필드(컬럼)들이 속성으로 표현된다.
엔티티 도메인(Domain)
- 각 속성이 가질 수 있는 값의 범위를 속성의 도메인이라고 한다.(데티어타입, 크기, 제약사항 등 지정)
- 속성 타입을 제외하고는 가독성을 위해서 생략 가능하다.
엔티티 관계(Relation)
두 엔티티 관계에서 부모의 키를 자식에서 PK로 사용하는지 일반 속성으로 사용하지에 따라서 표기가 다르게 된다. 실선으로 엔티티 끼리 나타낸 관계는 강한 관계를 의미하며, ‘식별자 관계’라고 불린다. 점선으로 나타내면 약한 관계를 나타내는 것이며 ‘비식별자 관계’라고 불린다.
- 식별자 관계
- 실선으로 표현
- 자식이 부모의 주 식별자를 외래 식별자로 참조해서 자신의 주 식별자로 설정
- 비식별자 관계
- 점선으로 표현
- 부모의 주 식별자를 외래 식별자로 참조해서 일반 속성으로 사용
카디널리티
엔티티 간 관계를 구성하는 튜플의 수를 1:1, 1:N, N:M 등으로 표현하는 개체 간의 관계를 말한다.
카디널리티
카디널리티 관계
- 일대일(1:1) 관계 : 하나의 부모 엔티티에 연결된 자식 엔티티는 하나밖에 올 수 없는 관계
- 사원번호 - 주민등록번호
- 하나의 테이블로 구성한다.
- 일대다(1:N) 관계 : 하나의 부모 엔티티에 연결된 자식 엔티티가 여러 개가 될 수 있는 관계
- 부서 - 사원
- 두개의 테이블로 구성하고 FK를 이용한다.
- 다대다(N:M) 관계 : 하나의 부모 엔티티와 연결된 자식 엔티티가 여러 개가 될 수 있고 여러 개의 부모 엔티티와 연결된 자식 엔티티가 하나가 될 수 있는 관계
- 사원 - 업무
- 두개의 테이블에 관계 테이블이 하나 더 필요하다.(3개)
ERD 설계해보기
다음은 파이널 프로젝트의 ERD 이다. erdcloud를 이용하여 작성했다.
파이널 프로젝트 ERD
- 유저 테이블
- 유저 챌린지, 유저 자격증, 유저 오답문제 테이블과 일대다(1:N) 관계이다.
- 유저는 여러개의 챌린지를 신청할 수 있다.
- 유저는 여러개의 자격증을 등록할 수 있다.
- 유저는 여러개의 오답 문제를 등록할 수 있다.
- 챌린지 소개 테이블
- 유저 챌린지, 챌린지별 챕터 일대다(1:N) 관계이다.
- 동일한 챌린지를 여러명의 유저가 신청할 수 있다.
- 챌린지별 여러 챕터가 존재한다.
- 자격증 정보 테이블
- 자격증 일정, 유저 자격증, 챌린지 소개 테이블과 일대다(1:N) 관계이다.
- 자격증 회차별 자격증 일정이 존재한다.
- 자격증별 여러개의 챌린지가 존재한다.
- 배열 데이터를 저장하는 컬럼은 JSON 타입을 사용했다.
Reference
댓글남기기