관계(Relationships)란
- 두 개 이상의 엔티티(Entity) 간에 존재하는 연관성
엔터티 간의 연관성
종속관계
- 부모엔터티가 없으면 자식 엔티티가 존재할 수 없는 관계
참조관계
- 단순히 참조 데이터를 관리하려는 관계
- 관계를 삭제하더라도 한 속성의 연관성을 모르게 될 뿐, 하위 엔티티가 존재할 수 없는 것은 아니다
Entity Relationship Diagram(ERD)
- Perter Chen에 의해 제안(1976)
- 서로 관계 되어있는 엔터티를 그림(Diagram)으로 표현한 것
ERD 기본 요소
Entiry
- 시스템화 하고자하는 사건, 사물
- E.g. 저자, 글, 댓글
Attiribute
- 엔티티, 관계성의 성질을 나타내는 더 이상 쪼갤수 없는 정보의 단위
- e.g. 저자 테이블의 column : id(PK), 이름, 생년월일, 주민번호 등등
Relationship
- 엔티티 또는 속성간의 연관성, 관계
- 관계성(카디널리티, Cadinality) : 1대1, 1대N, N대M
- e.g. 저자는 여러댓글을 작성할 수 있고, 댓글은 하나의 저자만 작성가능. 즉, 저자와 댓글은 1대N관계
ERD 표기법
ERD 표현 종류
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F9d90a2c1-a42b-4a60-ac6f-22e878fa25b4%2Fimage.png)
Entiry
- 엔티티(사각형)
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2Fce1feaeb-9d94-49d1-bdc7-69f184872e03%2Fimage.png)
Attribute
- 속성(마름모)
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F93972677-79da-4069-90e9-3c28b8ff619c%2Fimage.png)
Relationship
ERD 표기 순서
- 엔터티를 그린다.
- 엔터티를 적절하게 배치한다.
- 엔터티간 관계를 설정한다
- 기본 키로 속성이 상속되는 식별자 관계를 설정한다.
- 중복되는 관계가 있으면 안된다.
- Circle 관계가 발생하면 안된다.
- 관계명을 기술한다.
- 현재형을 사용한다.
- 지나치게 포괄적인 용어는 사용하지 않는다.
- IE/Crow's 표기법에서는 링크마다 각각의 관계를 기술한다.
- 관계의 참여도를 기술한다.
- 관계의 필수여부를 기술한다.
ERD 표기 예시
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F1ae53490-43cf-4b38-8265-f38875dddb75%2Fimage.png)
ERD 구현 과정
기획(업무파악)
![기획(업무파악)](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2Fb810fad1-7650-4fa1-9d0c-dc6f4930128d%2Fimage.png)
다른표현(ex. 엑셀, 다이어그램 등등)
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F5370e386-bfd4-4dc6-bb18-b0e417e113c2%2Fimage.png)
Entity(Table)
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F8a5b6dd7-31ea-4906-841b-59927e7f07bf%2Fimage.png)
Attribute(Column)
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F78010fee-05fa-419a-aea1-52e5d4c6c742%2Fimage.png)
- 저자 : 저자번호(id), 이름, 소개
- 글 : 글번호(id), 제목, 내용, 저자_아이디
- 댓글 : 댓글번호(id), 제목, 내용, 작성일, 저자_아이디
Relationship(PK, FK, JOIN)
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F4dcfb874-ecdc-480d-a8c4-3e4b844d7ad4%2Fimage.png)
- 저자는 여러글을 작성할 수 있다
- 글은 여러저자가 작성할 수 있다
- 저자는 여러댓글을 작성할 수 있다
- 댓글은 하나의 저자만 작성할 수 있다
- 글은 여러댓글을 작성할 수 있다
- 댓글은 한 글에 대해서 작성할 수 있다
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F7d1a6c7e-a38c-4a03-a8cc-e88e82079f00%2Fimage.png)
Identifier(식별자)
- 여러개의 집합체를 담고 있는 하나의 엔티티 또는 테이블에서 각 행(row)를 구분할 수 있는 논리적인 이름의 구분자 또는 열(column)
- 하나의 엔티티에는 반드시 하나의 식별자가 존재해야 한다
Identifier(식별자) 예시
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F1a8fcaaa-6bb0-403c-b70d-673f7cf05cc5%2Fimage.png)
- Cadidate(후보키) : user_id, email, national_id
- Primary key(기본키) : user_id
- Alternamte Key(대체키) : email, national_id
1 대 1 표기
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F53d83018-6e57-47cc-aded-52bb54d36b12%2Fimage.png)
1 대 N 표기
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F9a9d4760-bf32-4dcc-a74d-92daf4e71480%2Fimage.png)
N 대 M 표기
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2Fbf9ab6a9-346b-4638-a156-0bc059e35a4d%2Fimage.png)
Optional
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2Fbe370b2c-b999-45b3-890b-f326d22cea5b%2Fimage.png)
Mandatory
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2F686d6a84-2a59-4550-a11f-4ee4727941a9%2Fimage.png)
최종 ERD
![](https://velog.velcdn.com/images%2Finyong_pang%2Fpost%2Fc21a6597-0111-4b0e-b1bc-9b066bd2cb54%2Fimage.png)