1️⃣ ERD (Entity Relationship Diagram) 란?
- 'Entity 개체'와 'Relationship 관계'를 중점적으로 표시하는 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램
- ERD는 실체(Entity), 속성(Attribute), 관계(Relationship)로 구성
💚 Entity
- Entity는 관리하고자 하는 정보의 실체이며, 사람, 객체 혹은 개념
- ERD에서는 개체를 "사각형"으로 표기한다
- 데이터베이스의 테이블이 엔티티로 표현됨
💚 Attribute
- 개체가 가지고 있는 속성
- Entity를 구성하고 있는 구성 요소
- ERD에서는 속성을 "원"으로 표기한다.
- 데이터베이스의 테이블의 각 필드(컬럼)들이 엔티티 속성임
💚 Relationship
- Entity와 Entity간의 관계를 나타냄
- 1:1, 1:다수, 다수:다수의 관계 존재
2️⃣ ERD 작성법
💚 학생 Entity와 Entity 속성 (학번, 이름...)
💚 Entity 도메인
- 도메인은 속성의 값, 타입, 제약사항 등 값의 범위를 표현 (생략 가능)
- 엔티티는 저장하는 데이터 정보 주제에 따라 종류가 다양하며, 이를 잘 구분해 주어야 함
구 분 | 내 용 |
유형 엔티티 | 물리적인 형태 (예 : 고객, 상품, 거래처, 학생, 교수 등) |
무형 엔티티 | 물리적인 형태가 없고 개념적으로만 존재하는 엔티티 (예 : 인터넷 장바구니, 부서 조직 등) |
문서 엔티티 | 업무 절차상에서 사용되는 문서나 장부, 전표에 대한 엔티티 (거래명세서, 주문서 등) |
이력 엔티티 | 업무상 반복적으로 이루어지는 행위나 사건의 내용을 일자별, 시간별로 저장하기 위한 엔티티 ( 예 : 입고 이력, 출고 이력, 구매 이력 등) |
코드 엔티티 | 무형 엔티티의 일종으로 각종 코드를 관리하기 위한 엔티티 (예 : 국가코드, 각종 분류 코드) |
💚 ERD 키와 제약 조건 표기법
주 식별자 (PK)
- 데이터베이스 테이블의 Primary Key를 표현
- 중복이 없고 NULL 값이 없는 유일한 값에 지정하는 식별자
- 아래 그림과 같이 ◆ 다이아몬드로 표현하기도 하고 아니면 열쇠로도 표현하기도 한다.
- 그리고 주 식별자는 유일한 속성이므로 다른 속성과의 명확한 구분을 위해 구분선을 두기도 한다.
- NOT NULL
- 해당 속성에 들어갈 값에 Null 을 비허용한다면, N 혹은 NN을 적는다.
- 만일 Null 허용한다면 N을 적지 않는다.
외래 식별자 (FK)
- 데이터베이스 테이블의 Foreign Key를 표현
- 외래 식별자 역시 key의 일종이라 ERD 엔티티에도 열쇠 아이콘으로 표시한다. (프로그램에 따라 다를 수 있다)
- 외래 식별자를 표시할 때에는 선을 이어주는데 개체와 관계를 따져 표시한다.
💚 ERD Entity 관계 표기법
- 엔티티끼리 관계가 있는 경우 선을 이어 관계를 맺어야 함
- 부모의 키를 자식에서 PK로 사용하는지 일반 속성으로 사용하지에 따라서 실선과 점선의 표기가 나뉘어짐
실선: 강한 관계 (식별자 관계)
- 부모 자식 관계에서 자식이 부모의 주 식별자를 외래 식별자로 참조하여 자신의 주 식별자로 설정
- 반드시 부모엔터티 종속되어 있어야 함
- 자식 주 식별자 구성에 부모 주 식별자 포함 필요
- 상속받은 주 식별자 속성을 타 엔터티에 이전 필요
- 아래 그림에선 자식 엔티티(학생별 취미)가 부모 엔티티(학생)의 학번을 자신의 주 식별자로 설정
점선: 약한 관계 (비식별자 관계)
- 부모 자식 관계에서 자식이 부모의 주 식별자를 외래 식별자로 참조해서 일반 속성으로 사용.
- 약한 종속관계
- 자식 주 식별자 구성을 독립적으로 구성
- 자식 주 식별자 구성에 부모 주 식별자 부분 필요
- 상속받은 주 식별자 속성을 타 엔터티에 차단 필요
- 부모쪽의 관계참여가 선택관계
- 아래 그림에선 자식 엔티티(사원정보)가 부모 엔티티(부서정보)의 부서코드를 일반 속성으로 두었다.
💚 ERD 관계의 카디널리티
- One to one : 1 대 1 대응 (1:1 관계)
- ex. 학생 1명(학번, 이름...) 과 그 학생의 신체 정보 (키, 몸무게...)
- One to many : 1 대 다 대응 (1:N 관계)
- ex. 학생 1명 (학번, 이름...) 과 그 학생의 여러개의 취미 (낚시, 등산...)
- Many to many : 다 대 다 대응 (M:N 관계)
- ex. 제품과 제조업체
- but 데이터 모델링에서는 M:N 관계를 완성되지 않은 모델로 간주
-> 두 엔티티의 관계를 1:N, N:1 로 조정하는 작업이 필요- 두 엔티티의 관련성을 표현하기 위해, 중간에 또 다른 엔티티를 필요
이 중간 엔티티(업체별 제품)가 두 엔티티의 공유 속성 역할을 함
- 두 엔티티의 관련성을 표현하기 위해, 중간에 또 다른 엔티티를 필요
💚 ERD 관계의 참여도
- 관계선 각 측의 끝자락에 기호를 표시한다.
- '|' 표시가 있는 곳은 반드시 있어야 하는 개체. (필수)
- 학번 21003 학생의 취미가 낚시 라는 정보가 있다면, 21003학번의 학생의 정보가 학생 엔티티에 반드시 존재해야 한다
- 즉, 학생의 취미 테이블은 모두 학생 테이블에 대응됨
- 어느 한 쪽이 존재하면 다른 쪽도 반드시 존재해야 하는 관계
- 'O' 표시가 있다면 없어도 되는 개체. (선택)
- 취미를 가진 학생이 있을수도 있고, 없을 수도 있음
- 대응되는 인스턴스가 있을 수도 있고 없을 수도 있는 관계
3️⃣ ERD 엔티티 관계 표현 총정리
1 : 1 관계 : 부모(SHOP)는 하나의 자식(FOOD)이 있다.
1 : N 관계 : 부모(SHOP)는 하나 이상의 자식(FOOD)이 있다.
M : N 관계 : 하나 이상의 부모와 하나 이상의 자식이 있다.
1 : 1(o) 관계 : 부모는 하나의 자식이 있을 수도 있다. (없을 수도 있다)
1 : N(o) 관계 : 부모는 여러개의 자식이 있을 수도 있다. (없을 수도 있다)
💻 Reference
'Server > Spring Boot' 카테고리의 다른 글
[Chapter 05] 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.10.16 |
---|---|
[Chapter 04] 머스테치로 화면 구성하기 (0) | 2023.10.16 |
[Spring Boot] JWT를 사용한 인증, 인가 과정 (Access Token, Refresh Token 이용) (0) | 2023.10.01 |
[Spring] DAO, Entity, DTO, VO의 개념과 비교 (0) | 2023.09.25 |
[Spring Boot] 빌더(Builder) 패턴의 정의, 생성자 패턴 빌더 패턴 비교 (0) | 2023.09.25 |