본문 바로가기
Dev/Backend

ERD란?

by haerr 2024. 7. 21.

연합동아리에서 개발 프로젝트를 시작하였다. 나는 Node.js로 백엔드 개발을 하게 되었다. 내가 해야 하는 첫번째 작업은 ERD 설계와 API 명세서 작성이었다. 해당 포스트에서는 ERD 설계 과정에 대한 내용을 담아보고자 한다. 그중 오늘은 ERD 개념 설명!!

 

ERD란?

Entity-Relationship Diagram의 약자로, 데이터베이스를 설계할 때 사용된다. 쉽게 설명하면 데이터베이스 안의 데이터를 어떻게 구성하고, 각 데이터간의 관계가 어떻게 되는지를 그림으로 표현한 것이다. 따라서 ERD 그림을 통해 데이터베이스 구조를 한눈에 이해할 수 있다. 

 

1. Entity(개체)

데이터베이스에서의 테이블이라고 생각하면 된다. 데이터베이스 안에서 저장하고 관리할 수 있는 데이터 항목을 나타낸다. 예를 들어 '학생', '교수', '강의' 등이 entity가 될 수 있다. 

이런 느낌!

 

2. Attribute(속성)

entity가 가지는 세부정보들이다.

예를 들어, ‘학생’ entity는 ‘이름’, ‘학번’, ‘생년월일’ 등의 속성을 가질 수 있다.

이렇게 각 entity에 해당하는 속성들을 볼 수 있다. 

 

여기서 PK는 Primary Key로, 해당 테이블에서의 고유한 값이라고 생각하면 된다.  모든 PK를 ID로 두는 사람도 있고, 테이블마다 studentId, professorId 이런식으로 쓰는 사람도 있다. 이때도 네이밍 컨벤션에 따라 snake 표기법, Camel case 중 하나를 선택하여 작성한다. (보통 Camel case를 사용하는 것 같다)

 

예를들어, 순서대로 김땡땡, 이무무, 박미미가 있다고 하면, 각각의 이름은 student 테이블의 name에 저장되어 있을 것이고, 그 ID는 1, 2, 3과 같이 중복되지 않는 숫자로 되어있을 것이라 생각할 수 있다. 

 

3. Relationship

Entity 간의 연관성을 나타낸다.

예를 들어, ‘학생’과 ‘강의’ 사이의 ‘수강’ 관계가 있을 수 있다.

 

4. Cardinality

entity간의 관계에서 몇개가 관련될 수 있는지를 나타낸다. 

 

- 1:1 관계

말그대로 일대일 대응이다. 

뜬금없는 예시지만 남자친구/여자친구 테이블이 있다고 하면, 학생과의 관계는 1:1일 것이다.

 

- 1:N 관계 (일대다관계)

인스타그램 계정을 예로들면, 한 명의 학생은 인스타그램 계정을 하나 이상 가질 수 있다. 따라서 학생과 인스타그램 계정의 관계는 1:N이 된다. 

또는 하나의 강의에는 한명의 교수만 있다고 가정하면, 한 명의 교수가 여러개의 강의를 맡을 수 있으므로 강의-교수의 관계도 1:N이 된다.

 

- N:M 관계 (다대다관계)

학생-강의 관계에서, 하나의 학생은 여러개의 강의를 들을 수 있으며 하나의 강의에는 여러개의 학생이 포함된다. 따라서 N:M 관계이다. 이런 경우에는 두개의 entity만으로는 정보를 표현하기 부족하기 때문에, 중간에 mapping table을 하나 만들어서 1:N 관계로 변경한다.

 

 

이 내용을 ERD로 표현하면 이렇게 된다. 

저 갈고리?? 모양은 1:N 관계를 나타낸다. (더 자세히 써야하는데 기찬아요)

StudentLecture 테이블이 바로 Student와 Lecture의 매핑 테이블이다.

개인적으로 이건 직접 해봐야지 느는 것 같으니 간단한 사례(도서관 책 대여 프로그램, 위처럼 학교 프로그램, 아니면 넷플릭스 같은 진짜 프로그램)로 직접 해보는 것을 추천한다!

 

 

다음엔 draw.io 사용법과... 실제 나의 ERD 설계에 대해 다뤄보겠다.