SQL 캠프 광고 이미지
  • SQL
  • 로그인 전용

알아두면 쓸데있는 데이터 모델링 (4) ERD 읽어보기

SQL 캠프 광고 이미지
SQL 캠프 광고 이미지
지금 간편하게 로그인하고 전문성 있는 정보를 확인해보세요.

데이터 분석가들이 직접 쓰는 다른 로그인 전용 글들도 무제한으로 이용할 수 있습니다.

🔖
알아두면 쓸데있는 데이터 모델링 모아보기
  1. 정규화
  1. 여러 종류의 Key 이해하기 (feat. PK, FK는 무엇인가?)
  1. ER 모델의 구성 요소 - 엔티티, 관계, 속성 [✨ 로그인 전용]
  1. ERD 읽어보기 [✨ 로그인 전용]
  1. 엔티티 톺아보기 [✨ 로그인 전용]
  1. 속성 톺아보기 [✨ 로그인 전용]
 
이전 글에서 ER 모델에 관해 잘 이해하고 오셨나요? 혹시 아직 보지 않으셨다면, 먼저 읽어보고 오셔야 이번 글 이해가 더 쉬울 거예요. 그럼, 이번 글에서는 이전 글에서 배운 엔티티, 속성, 관계의 개념을 다시 한번 짚어보면서 ERD에 관해 이야기해 보겠습니다.
 
 

ERD란?

아마 데이터베이스에 있는 데이터를 다룰 때 이런 이미지를 보신 적이 있을 거예요. (혹시 보신 적 없더라도! 저와 차근차근 알아가봐요🖐️)
 
notion image
 
ERD는 Entity Relationship Diagram의 약자예요. 개체 관계 지도, 개체 관계 다이어그램이라고도 부릅니다. 데이터베이스 안에 있는 개체(Entity) 간의 관계(Relationship)를 시각화해서 보여주는 방식을 말해요. 이전 글에서 배운 ER 모델을 시각적으로 보여주는 방식이 바로 ERD입니다. 간단하게는 데이터 구조를 나타낸 설계 문서라고 생각해 주세요. ER 모델의 종류는 개념 모델, 논리 모델, 물리 모델로 나누어집니다. 이에 따라 도식화하는 방법, 즉 ERD를 그리는 방법도 달라지는데요. 이번 글에서 다룰 ERD는 논리 모델 수준에서 구현한 ERD인 점 참고해 주세요.
ERD는 주로 관계형 데이터베이스를 설계하거나 디버깅하는 데 사용됩니다. 사실 데이터 분석가들은 직접 데이터베이스를 설계하는 일이 많지는 않고, 이미 설계된 데이터베이스에서 데이터를 가져와서 분석하는 일을 주로 해요. 이럴 때 ERD가 있어야 데이터가 어디에 어떻게 저장이 되어있는지, 테이블 사이의 관계는 어떻게 되어 있는지 쉽게 알 수 있습니다.
 
 

ERD를 읽어봅시다

ERD는 아래 이미지와 같이 여러 방식으로 표현할 수 있어요. 이 방식 중 Crow’s Foot 표기법이 가장 직관적으로 이해가 쉬운 방법이라, 이번 글에서는 이 Crow’s Foot 표기법을 소개할 예정이에요. 위에 예시로 보여드린 ERD도 이 표기법으로 그린 ERD입니다. Crow’s Foot 표기법은 Gordon C. Everest 교수가 발표한 1976년도 논문에서 시작되었어요. 엔티티를 박스로, 그 박스 사이의 선으로 관계를 표현하고, 그 선의 끝 모양으로 관계수와 선택성을 표현합니다.
여러 ERD 표기법
(이미지 출처: 위키피디아)
여러 ERD 표기법 (이미지 출처: 위키피디아)
 
 

1. 엔티티

먼저 ‘엔티티’가 어떤 부분인지 살펴볼게요. Crow’s Foot 표기법에서는 박스로 엔티티를 나타낸다고 위에서 이야기 했는데요. 그 박스 최상단에는 엔티티의 이름을 적습니다. 여기에는 총 4개의 박스가 있네요. 즉 <orders>, <customers>, <order_item>, <items>가 바로 엔티티입니다.
notion image
 
 

2. 속성

이전 글에서 ‘속성’은 데이터의 특성을 서술하는 기준이라고 했어요. <orders> 엔티티에서는 order_id, order_date, customer_id가 속성이고, <customers> 엔티티에서는 customer_id와 country, <order_items> 엔티티에서는 item_id와 order_id, price, quantity, 마지막으로 <items> 엔티티에서는 item_id와 name이 바로 속성입니다.
 
notion image
 
이 속성 중에서도 엔티티에서 개별 데이터(인스턴스, Instance)를 식별할 수 있게 만드는 속성을 ‘식별자’ 혹은 ‘기본키(Primary Key, PK)’라고 부릅니다. <orders> 엔티티에서는 order_id, <customers> 엔티티에서는 customer_id, <order_items>엔티티에서는 order_item_id, 그리고 <items> 엔티티에서는 item_id가 PK로 사용되고 있는 걸 보실 수 있어요.
다른 테이블에 있는 기본 키를 참조해서 사용할 때는, 그 식별자를 ‘외래키(Foreign Key, FK)’라고 부르는데요. <order_items> 엔티티의 item_id와 order_id가 FK입니다. 이 FK는 어느 테이블의 기본 키를 참조한 것인지, 관계를 한번 살펴볼게요.
 
 

3. 관계

우선 <order_item> 엔티티의 order_id와 item_id가 어디와 연결되어 있는지를 보겠습니다. order_id는 <orders> 엔티티의 order_id와 연결되어 있고, item_id는 <items> 엔티티의 item_id와 연결이 되어 있어요.
 
notion image
 
이전 글에서 관계는 ‘관계수’와 ‘선택성’으로 구성된다고 이야기한 것 기억나시나요? ‘관계수’는 어떤 엔티티의 인스턴스 하나가 다른 엔티티의 인스턴스 몇 개와 대응되는지를 표현하고, 1:1, 1:N, M:N 유형이 있습니다. 여기서 1은 세로바(|)로 표현하고, 2개 이상(N, M)은 Crow’s foot(<)을 이용해 표시합니다. 그리고 ‘선택성’은 엔티티의 인스턴스에 대해 상대 엔티티에 정보가 존재하는지 여부를 나타내는데요. 양쪽 필수, 한쪽 필수, 양쪽 선택으로 나누어집니다. 필수(Mandatory), 즉 1개 이상 존재하는 경우에는 세로바(|)로 표기하고요. 선택(Optional), 즉 0개 이상이면 O로 표시합니다.
 
 
이 내용을 생각하면서 ERD를 다시 한번 볼게요. order_id는 1:N이자 양쪽 필수 관계이고, item_id는 1:N이자 한쪽 필수 관계라는 것을 알 수 있습니다. 그리고 이 두 화살표 말고도 하나가 더 있는데요. <orders> 엔티티의 customer_id와 <customers> 엔티티의 customer_id가 연결된 것이 보이죠. 모양을 보니 customer_id는 1:N, 그리고 한쪽 필수 관계입니다.
 
notion image
 
이렇게만 봐서는 조금 이해가 어려울 수도 있을 것 같아요. 이 데이터의 상세 특징과 함께 조금 풀어서 설명을 해볼게요. 우선 이 회사의 모든 주문 내역은 <orders>에, 그리고 회사가 판매하는 모든 물건의 정보는 <items>에 있습니다. 고객은 한 번 주문할 때 여러 종류의 물건을 주문할 수 있어요. 그래서 아래와 같이 <order_items> 엔티티에는 같은 order_id가 여러 번 저장될 수 있습니다.
 
order_item_id
order_id
item_id
price
quantity
1
1
512
10,000
1
2
1
673
36,000
3
3
1
1,034
5,000
1
<order_items> 예시 데이터
 
그리고 같은 물건을 여러 고객이 주문할 수도 있고, 혹은 같은 고객이 여러 번 주문할 수도 있어요. 그래서 <order_items> 엔티티의 item_id도 여러 번 저장될 수 있습니다. 이와 반대로 한 번도 주문되지 않은 물건도 있습니다. 이런 물건의 정보는 <items>에만 저장되고 <order_items>에는 저장되지 않아요. 그래서 item_id는 order_id와 달리 한쪽 필수 관계입니다.
order_item_id
order_id
item_id
price
quantity
10
3
512
30,000
3
11
4
512
70,000
7
12
15
512
20,000
2
<order_items> 예시 데이터
 
이번에는 customer_id를 살펴볼게요. 모든 고객의 정보가 <customers> 엔티티에 저장되지만, 아직 주문을 한 번도 하지 않은 고객의 정보는 <orders> 엔티티에 저장되지 않아요. 반면에 여러 번 주문한 고객이라면 <orders>에 customer_id가 여러 번 저장됩니다. 그래서 customer_id는 1:N이면서 한쪽 필수인 관계입니다.
order_id
order_date
customer_id
1
2024-04-01
5
4
2024-04-15
5
15
2024-05-01
5
<orders> 예시 데이터
 
 

마무리

이렇게 ERD를 읽는 방법까지 배워봤습니다🎉 ER 모델의 구성 요소별로 하나씩 살펴보니, 이상한 그림 같았던 ERD가 이제는 이해되시나요? 데이터 분석가로 회사에 입사하면, 회사에 있는 데이터를 우선 파악해야 그 데이터를 이용해 분석을 할 수 있어요. 데이터를 이해하고 파악하기 위해 ERD를 읽을 줄 아는 것이 정말 중요합니다. 이번 글을 통해 남이 그린 ERD를 읽고 데이터를 이해할 수 있게 되었다면 충분합니다. 수많은 데이터를 구조화해서 이해하는 데에 큰 도움이 될 거예요. 다음 글에서는 직접 모델링을 할 수 있도록 엔티티, 속성, 관계에 대해 더 자세히 알아볼게요.
송혜정데이터 분석가

콘텐츠 기업 리디에서 데이터 분석을 하다가 창업 후 콘텐츠 제작을 시작했습니다. 필요한 정보가 적시에 전달될 수 있도록, 뉴스레터와 유튜브 영상을 제작하고 공개하는 모든 과정에서 데이터를 활용하고 있습니다.

함께 읽어보면 좋은 글

주식회사 데이터리안