SQL

[MySQL] 12. ERD ( 개체 관계 다이어그램 )

찰리-누나 2022. 12. 28.

 

 

 

학교를 다니며 과제로 지겹게 했던 ERD... 나는 이걸 컴공생들만 주구장창 하고 나오는줄 알았는데 알바를 하며 알게된 언니가 국비생들도 이걸 무조건 그리게 시킨다고 말했다. 그래서 서로 신기해했다.ㅋㅋ(사실 DB를 배우면 누구나 하는거일텐데도 그냥 알바가 빡세서 무슨 이야기든 재밌었던것 같기도 하고...) 언니는 개발자로 벌써 일을 하고 있는데 난 아직도 디자인의 길을 벗어나지 못했다니.. 내년엔 얼렁 들어가기로ㅠ

 


 

 


개체-관계 다이어그램(Entity-Relationship Diagram)

 

ERD는 데이터 모델을 그림으로 표현한 것이다. 실제 DB를 프로그램에 만들기 전인 설계 단계에서 거치는 과정으로 각 테이블과 테이블의 관계를 그림으로 나타내 그린다. 처음 만든 보일러 플레이트가 너무 형편없었기 때문에(ㅎ) node.js의 passport 라이브러리를 사용한, 새로운 보일러 플레이트를 만들 것이다. 그에 필요한 유저와 좋아요, 게시글과 댓글 데이터베이스를 ERD로 설계해본다.

 

 

지금까지 진행했던 실습 데이터베이스의 user 테이블의 havepet은 aboutpet 테이블에 존재하는 id를 외래키로 가져와 사용하고 있다. DB툴들은 대부분 엔티티 관계도를 보여주는 기능을 가지고 있는데, Dbeaver에서 엔티티 외래키를 가지고 있는 테이블간의 엔티티 관계도를 열어보면 다음과 같은 모양을 하고 있다.

(Dbeaver ERD 문서 : https://dbeaver.com/docs/wiki/Database-Structure-Diagrams/ )

 

서로 연결되어 있는 모습

 

학교에서는 디비 다이어그램이라는 https://dbdiagram.io/d 툴을 사용했지만, 이번에는 LUCID CHART를 이용해본다. 

LUCID CHART : https://www.lucidchart.com/pages/

 

Intelligent Diagramming | Lucidchart

Lucidchart is your solution for visual communication and cross-platform collaboration.

www.lucidchart.com

 

 

 

새로 만들 보일러 플레이트는 총 4개의 테이블을 갖는다. 각 테이블의 기본키(PK)는 id라는 이름의 컬럼으로 통일하여 저장할 것이다.

 


1. 유저 정보 테이블 : User

2. 게시글 테이블 : Board

3. 댓글 테이블 : Coment

4. 유저의 '좋아요' 테이블 : Like


 

 

먼저 테이블을 작성한다. 테이블은 제목이 위에 표시되어 있는 사각형 모양으로 작성하며, 각 테이블에 존재하는 컬럼명을 기입한다. PK는 볼드체로 표시하거나 (PK) 라고 따로 기입할 수 있다. 

이에 따라 각 테이블에 들어갈 컬럼을 정리해 보았다. 유저에는 이메일, 비밀번호, 이름, 닉네임 등 유저 정보들이 저장되어 있다. 게시글에는 게시글을 작성한 유저의 PK와 제목, 내용 등이 들어있다. 댓글 테이블인 Coment에는 댓글 작성자와 댓글이 작성된 게시글의 pk가 저장되어 있으며, 좋아요 테이블에는 유저의 id와 해당 유저가 좋아요를 누른 게시글의 ID가 리스트로 들어가 있다.

 

테이블만 작성한 상태

 

이제 선(Line)을 활용해보자. 선과 기호는 개체관의 관계를 나타내는데에 사용된다.

ERD 표기방법

 

 

서로 관련되어 있는 테이블을 선으로 연결한 다음, 위의 표기 방법에 따라 관계를 그려본다. 


1. User는 0개 이상의 게시글과 댓글을 작성할 수 있으며, 좋아요를 표시한 게시물을 가질 수 있다. 

2. Board는 1개의 작성자 아이디와, 0개 이상의 댓글을 가진다.

3. Coment는 1개의 회원 아이디와 게시글의 고유 아이디를 갖는다.

4. Like에는 0개 이상의 게시글이 저장될 수 있다.


 

선과 도형을 활용해 완성한 ERD

 

 

'SQL' 카테고리의 다른 글

[MySQL] 11. Trigger  (0) 2022.12.27
[MySQL] 10. Transaction  (0) 2022.12.27
[MySQL] 9. INDEX  (1) 2022.12.27
[MySQL] 8. 날짜 데이터 (datetime Data type과 now(), data_format(날짜,포맷형식))  (0) 2022.12.26
[MySQL] 7. FUNCTION  (0) 2022.12.26

댓글