κ°œλ…μ  λͺ¨λΈλ§ (2) - μ—”ν‹°ν‹° 관계와 ERD μ‹€μŠ΅

2025. 10. 7. 20:26ㆍDatabase

λ°˜μ‘ν˜•

 
 

κ°•ν•œ 엔티티와 μ•½ν•œ μ—”ν‹°ν‹°

κ°•ν•œ μ—”ν‹°ν‹° (Strong Entity)

  • 독립적인 μ‘΄μž¬κ°€ κ°€λŠ₯ν•˜λ‹€.
  • μžμ‹ λ§Œμ˜ κ³ μœ ν•œ μ£Όμ‹λ³„μžλ₯Ό κ°€μ§„λ‹€.
  • λ‹€λ₯Έ μ—”ν‹°ν‹°μ˜ μ‘΄μž¬μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ˜ˆμ‹œ: 사원, 고객, μƒν’ˆ, λΆ€μ„œ λ“±κ³Ό 같이 λ…λ¦½μ μœΌλ‘œ κ΄€λ¦¬λ˜λŠ” μ—”ν‹°ν‹°

μ•½ν•œ μ—”ν‹°ν‹° (Weak Entity)

  • μ†Œμœ  μ—”ν‹°ν‹°κ°€ μžˆμ–΄μ•Όλ§Œ μžμ‹ μ˜ μ‘΄μž¬κ°€ 의미λ₯Ό κ°€μ§„λ‹€.
  • μ†Œμœ  μ—”ν‹°ν‹°μ˜ μ£Όμ‹λ³„μžλ₯Ό λΉŒλ €μ™€ μžμ‹ μ˜ 속성과 κ²°ν•©ν•˜μ—¬ 볡합킀λ₯Ό κ΅¬μ„±ν•œλ‹€.
  • μ˜ˆμ‹œ: λΆ€μ–‘κ°€μ‘±
싀무 이야기: 식별 관계, 비식별 관계
전톡적인 섀계 λ°©μ‹μ—μ„œ μ•½ν•œ μ—”ν‹°ν‹°λŠ” μ†Œμœ  μ—”ν‹°ν‹°μ˜ μ£Όμ‹λ³„μžλ₯Ό λΉŒλ €μ™€ μžμ‹ μ˜ 속성(λΆ€λΆ„ν‚€)κ³Ό κ²°ν•©ν•΄μ„œ 볡합 ν‚€λ₯Ό λ§Œλ“œλŠ” 방식을 μ‚¬μš©ν•œλ‹€.
이것을 논리적 λͺ¨λΈλ§ λ‹¨κ³„μ—μ„œ 식별 관계라 ν•˜λ©° μ΄λ ‡κ²Œ 되면 μžμ‹μ„ λ§Œλ“€ λ•Œ λ°˜λ“œμ‹œ λΆ€λͺ¨μ˜ PK 값을 μž…λ ₯ν•΄μ•Ό ν•œλ‹€.
μ΅œκ·Όμ—λŠ” 더 μœ μ—°ν•˜κ³  μ‹€μš©μ μΈ 비식별 κ΄€κ³„λΌλŠ” 방법을 주둜 μ‚¬μš©ν•œλ‹€.




 

ꡬ쑰적 관계 ν‘œν˜„μ„ μœ„ν•œ 특수 μ—”ν‹°ν‹°

μ—”ν‹°ν‹° κ°„μ˜ 관계가 λ‹¨μˆœν•œ 연결선을 λ„˜μ–΄ κ·Έ μžμ²΄κ°€ ν•˜λ‚˜μ˜ λ…λ¦½λœ 의미λ₯Ό κ°–λŠ” κ°œλ…μ΄ μžˆλ‹€.
사건(Event)μ΄λ‚˜ λΆ„λ₯˜(Classification)와 같은 λ³΅μž‘ν•œ 관계λ₯Ό 효과적으둜 λͺ¨λΈμ— λ°˜μ˜ν•˜κΈ° μœ„ν•΄ 특수 μ—”ν‹°ν‹°λ₯Ό μ‚¬μš©ν•œλ‹€.

μ—°κ΄€ μ—”ν‹°ν‹° (Associative Entity)

  • 두 개 μ΄μƒμ˜ μ—”ν‹°ν‹° 간에 λ°œμƒν•˜λŠ” νŠΉμ • 사건, ν–‰μœ„, 계약 등을 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ λ„μΆœλ˜λŠ” μ—”ν‹°ν‹°λ‹€.
  • 두 개 μ΄μƒμ˜ λ‹€λ₯Έ μ—”ν‹°ν‹° 간에 μ‘΄μž¬ν•˜λŠ” λ‹€λŒ€λ‹€(M:N) 관계λ₯Ό ν•΄μ†Œν•œλ‹€.
  • 쀑간 μ—”ν‹°ν‹°λ₯Ό 톡해 ν•˜λ‚˜μ˜ λ‹€λŒ€λ‹€ 관계λ₯Ό μΌλŒ€λ‹€(1:N), λ‹€λŒ€μΌ(N:1) κ΄€κ³„λ‘œ λ³€ν™˜ν•œλ‹€.

μŠˆνΌνƒ€μž…/μ„œλΈŒνƒ€μž… μ—”ν‹°ν‹° (Supertype/Subtype Entity)

  • λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•œ κ°œλ… 그룹에 μ†ν•˜μ§€λ§Œ 일뢀 μ†μ„±μ΄λ‚˜ κ΄€κ³„μ—μ„œ 차이가 μžˆλŠ” 엔티티듀을 효과적으둜 ν‘œν˜„ν•˜κΈ° μœ„ν•œ 기법이닀.
  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 상속(Inheritance) κ°œλ…κ³Ό 맀우 μœ μ‚¬ν•˜λ‹€.

μŠˆνΌνƒ€μž… (Supertype)

  • κ·Έλ£Ή λ‚΄ λͺ¨λ“  μ—”ν‹°ν‹°(μ„œλΈŒνƒ€μž…)듀이 κ³΅ν†΅μ μœΌλ‘œ κ°€μ§€λŠ” 속성과 관계λ₯Ό μ •μ˜ν•˜λŠ” μƒμœ„ μ—”ν‹°ν‹°λ‹€.

μ„œλΈŒνƒ€μž… (Subtype)

  • μŠˆνΌνƒ€μž…μœΌλ‘œλΆ€ν„° 곡톡 속성을 상속받고, μžμ‹ λ§Œμ˜ κ³ μœ ν•œ μ†μ„±μ΄λ‚˜ 관계λ₯Ό μΆ”κ°€λ‘œ κ°€μ§€λŠ” ν•˜μœ„ μ—”ν‹°ν‹°λ‹€.



카디널리티와 참여도

카디널리티 (Cardinality)

μΉ΄λ””λ„λ¦¬ν‹°λŠ” μ—”ν‹°ν‹° μΈμŠ€ν„΄μŠ€(ν–‰) ν•˜λ‚˜κ°€ λ‹€λ₯Έ μ—”ν‹°ν‹°μ˜ μΈμŠ€ν„΄μŠ€μ™€ 맺을 수 μžˆλŠ” μ΅œλŒ€ 숫자λ₯Ό κΈ°μ€€μœΌλ‘œ ν‘œκΈ°ν•œλ‹€.
카디널리티 κ΄€κ³„μ˜ 4κ°€μ§€ μ’…λ₯˜

  • μΌλŒ€μΌ(1:1)
  • μΌλŒ€λ‹€(1:N)
  • λ‹€λŒ€μΌ(N:1)
  • λ‹€λŒ€λ‹€(M:N)

참여도 (Optionality)

μ°Έμ—¬λ„λŠ” ν•œ μ—”ν‹°ν‹°μ˜ μΈμŠ€ν„΄μŠ€κ°€ 관계에 λ°˜λ“œμ‹œ μ°Έμ—¬ν•΄μ•Ό ν•˜λŠ”μ§€(ν•„μˆ˜), μ•„λ‹ˆλ©΄ μ°Έμ—¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ”μ§€(선택)λ₯Ό κ²°μ •ν•œλ‹€.
예λ₯Ό λ“€μ–΄ νšŒμ›κ³Ό 주문의 관계λ₯Ό 보면 λ‹€μŒκ³Ό κ°™λ‹€.

  • νšŒμ› β†’ μ£Όλ¬Έ κ΄€κ³„λŠ” 선택(Optional): νšŒμ›μ΄ 주문을 ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€.
  • μ£Όλ¬Έ β†’ νšŒμ› κ΄€κ³„λŠ” ν•„μˆ˜(Mandatory): 주문은 λ°˜λ“œμ‹œ νšŒμ›κ³Ό μ—°κ²°λ˜μ–΄μ•Ό ν•œλ‹€.

κ΄€κ³„μ˜ ν‘œν˜„κ³Ό μ™Έλž˜ ν‚€

  • κ°œλ…μ  λͺ¨λΈλ§ λ‹¨κ³„μ—μ„œλŠ” μ—”ν‹°ν‹° κ°„μ˜ 관계λ₯Ό 관계선(Relationship)으둜 ν‘œν˜„ν•œλ‹€.
  • μ™Έλž˜ ν‚€ 같은 νŠΉμ • 기술의 κ΅¬ν˜„μ  μš”μ†ŒλŠ” ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 것이 원칙이닀.
  • μ‹€λ¬΄μ—μ„œλŠ” κ°œλ…μ  λͺ¨λΈλ§κ³Ό 논리적 λͺ¨λΈλ§μ„ λ”°λ‘œ κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  ν•¨κ»˜ μ§„ν–‰ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.



ERD (Entity-Relationship Diagram)

ERDλŠ” λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•΄μ„œ 개발자, 기획자 λ“± λͺ¨λ“  κ΄€κ³„μžκ°€
μ‹œμŠ€ν…œμ˜ 청사진을 ν•œλˆˆμ— νŒŒμ•…ν•˜κ³  μ†Œν†΅ν•  수 있게 λ„μ™€μ£ΌλŠ” 섀계 도ꡬ닀.

ν”Όν„° μ²Έ ν‘œκΈ°λ²•

ν”Όν„° μ²Έ ν‘œκΈ°λ²• μ˜ˆμ‹œ
  • μ‹€λ¬΄μ—μ„œ μ‚¬μš©ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
  • μ—”ν‹°ν‹°λŠ” μ‚¬κ°ν˜•, κ΄€κ³„λŠ” λ§ˆλ¦„λͺ¨, 속성은 νƒ€μ›μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 전톡적인 방식이닀.

κΉŒλ§ˆκ·€λ°œ(Crow's Foot) ν‘œκΈ°λ²•

κΉŒλ§ˆκ·€λ°œ ν‘œκΈ°λ²• μ˜ˆμ‹œ
  • ν˜„μž¬ μ‹€λ¬΄μ—μ„œ κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” μ‚¬μ‹€μƒμ˜ ν‘œμ€€μ΄λ‹€.
  • μ„ μ˜ μ–‘ 끝에 기호λ₯Ό λΆ™μ—¬ 카디널리티와 참여도λ₯Ό λ™μ‹œμ— ν‘œν˜„ν•œλ‹€.



μ—°κ΄€ μ—”ν‹°ν‹° - λ‹€λŒ€λ‹€ 관계 ν•΄κ²°

M:N κ΄€κ³„λŠ” 물리적으둜 κ΅¬ν˜„μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€.
이λ₯Ό ν•΄κ²°ν•˜λŠ” 방법은 μ—°κ΄€ μ—”ν‹°ν‹°(Associative Entity) λ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.
두 μ—”ν‹°ν‹°μ˜ 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μƒˆλ‘œμš΄ μ—”ν‹°ν‹°λ₯Ό λ§Œλ“€μ–΄ 기쑴의 M:N 관계λ₯Ό 두 개의 1:N, N:1 κ΄€κ³„λ‘œ ν’€μ–΄λ‚΄λŠ” 방식이닀.
μ—°κ΄€ μ—”ν‹°ν‹°λŠ” 논리/물리적 λͺ¨λΈλ§ λ‹¨κ³„μ—μ„œλŠ” μ—°κ²° ν…Œμ΄λΈ”(Link Table), 쑰인 ν…Œμ΄λΈ”(Join Table), λ§€ν•‘ ν…Œμ΄λΈ”(Mapping Table) λ“±μœΌλ‘œ λΆˆλ¦°λ‹€.
λ‹€λŒ€λ‹€ 관계λ₯Ό ν•΄μ†Œν•˜κ³  관계에 λŒ€ν•œ μΆ”κ°€ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ 두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜λŠ” 쀑간 ν…Œμ΄λΈ”μ„ μ˜λ―Έν•œλ‹€.

싀무 이야기: μ—°κ΄€ μ—”ν‹°ν‹° μΆ”μ²œ 이름 및 νŠΉμ§•
1. μ—°κ²° κ°•μ‘°
- μ£Όλ¬Έ μƒν’ˆ(order_product):
'μ£Όλ¬Έ'κ³Ό 'μƒν’ˆ' ν…Œμ΄λΈ”μ„ μ§μ ‘μ μœΌλ‘œ μ—°κ²°ν•œλ‹€λŠ” 관계λ₯Ό 이름에 λͺ…μ‹œμ μœΌλ‘œ 보여쀀닀.
맀우 직관적이고 λ‹¨μˆœν•˜μ—¬ 관계λ₯Ό νŒŒμ•…ν•˜κΈ° μ‰½λ‹€λŠ” μž₯점이 μžˆλ‹€.
2. 의미 μžˆλŠ” 이름
- μ£Όλ¬Έ ν•­λͺ©(order_item):
'μ£Όλ¬Έ'에 ν¬ν•¨λœ 'ν•­λͺ©'μ΄λΌλŠ” 의미λ₯Ό κ°€μž₯ λͺ…ν™•ν•˜κ²Œ μ „λ‹¬ν•œλ‹€.
μ‹€μ œ μ‡Όν•‘λͺ° λΉ„μ¦ˆλ‹ˆμŠ€ 둜직(예: μž₯λ°”κ΅¬λ‹ˆ ν•­λͺ©, μ£Όλ¬Έ ν•­λͺ©)κ³Ό μš©μ–΄κ°€ μΌμΉ˜ν•˜μ—¬ μ΄ν•΄ν•˜κΈ° 쉽닀.
- μ£Όλ¬Έ 상세(order_detail):
'주문의 상세 λ‚΄μ—­'μ΄λΌλŠ” 의미둜, order_itemκ³Ό 거의 λ™μΌν•œ 의미둜 널리 μ‚¬μš©λœλ‹€.
주문에 μ†ν•œ 각 μƒν’ˆ 정보λ₯Ό μƒμ„Ένžˆ λ‚˜νƒ€λ‚Έλ‹€λŠ” 점을 κ°•μ‘°ν•œλ‹€.




 

μš©μ–΄ 사전

μš©μ–΄ 사전은 ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•˜λŠ” λͺ¨λ“  κ΅¬μ„±μ›μ˜ 곡톡 μ–Έμ–΄(Ubiquitous Language)λ₯Ό λ§Œλ“œλŠ” 핡심적인 과정이닀.

μš©μ–΄ 사전 μž‘μ„± 원칙

  • μš©μ–΄λ₯Ό μ—­ν• λ³„λ‘œ λΆ„λ₯˜ν•˜κ³ , 약어와 전체 영문λͺ…을 λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜λ©°, μ‹€μ œ μ‹œμŠ€ν…œμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ ꡬ체적인 μ˜ˆμ‹œλ₯Ό ν•¨κ»˜ κΈ°λ‘ν•œλ‹€.
  • 단일어(Single Word) μ€‘μ‹¬μœΌλ‘œ μš©μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€.
    • κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ 단일어λ₯Ό μ€‘μ‹¬μœΌλ‘œ 사전을 κ΅¬μ„±ν•œλ‹€.
    • νšŒμ›id = member + id = member_id
    • μƒν’ˆ 가격 = product + price = product_price
  • 잘 μ •μ˜λœ 단일어 사전은 λ¬΄ν•œν•œ μš©μ–΄λ₯Ό μΌκ΄€λ˜κ²Œ λ§Œλ“€μ–΄λ‚΄λŠ” κ°•λ ₯ν•œ 기반이 λœλ‹€.
  • μΆ•μ•½μ–΄λŠ” λ°˜λ“œμ‹œ μš©μ–΄μ‚¬μ „μ— λ“±λ‘ν•˜κ³  λͺ¨λ‘μ˜ λ™μ˜ν•˜μ— μ‚¬μš©ν•œλ‹€.
  • ν”„λ‘œμ νŠΈκ°€ μ§„ν–‰λ˜λ©΄μ„œ μƒˆλ‘œμš΄ μš©μ–΄κ°€ μΆ”κ°€λ˜κ³  μƒˆλ‘œμš΄ λΉ„μ¦ˆλ‹ˆμŠ€ μš©μ–΄κ°€ 생겨날 λ•Œλ§ˆλ‹€ μ§€μ†μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ–΄μ•Ό ν•œλ‹€.



전체λ₯Ό λ³΄λŠ” 개발자의 접근법

ν›Œλ₯­ν•œ κ°œλ°œμžλŠ” λ‹¨μˆœνžˆ μ£Όμ–΄μ§„ κΈ°λŠ₯을 'μ–΄λ–»κ²Œ' κ΅¬ν˜„ν• μ§€μ—λ§Œ μ§‘μ€‘ν•˜μ§€ μ•ŠλŠ”λ‹€.
그보닀 λ¨Όμ € 이 κΈ°λŠ₯을 'μ™œ' λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”μ§€ μ§ˆλ¬Έν•΄μ•Ό ν•œλ‹€.
λ‹¨μˆœνžˆ 기술 κ΅¬ν˜„μ—λ§Œ λ§€λͺ°λ˜λŠ” 것이 μ•„λ‹ˆλΌ λΉ„μ¦ˆλ‹ˆμŠ€μ˜ μ„±κ³΅μ΄λΌλŠ” 더 큰 그림을 λ³΄λŠ” 것을 μ§€ν–₯ν•΄μ•Ό ν•œλ‹€.

μ‹€μ „ κ°œλ…μ  λͺ¨λΈλ§

1단계: 핡심 μš”κ΅¬μ‚¬ν•­ λ‹€μ‹œ μ •μ˜ν•˜κΈ° (MVP)

  • MVP(Minimum Viable Product, μ΅œμ†Œ κΈ°λŠ₯ μ œν’ˆ)λ₯Ό μ •μ˜ν•˜λŠ” 과정이닀.
  • μ‹œμž₯μ—μ„œ 살아남기 μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ κΈ°λŠ₯을 μ •μ˜ν•˜λŠ” 것이닀.

2단계: 핡심 μ—”ν‹°ν‹° λ„μΆœ

  • λ‹¨μˆœν•΄μ§„ μš”κ΅¬μ‚¬ν•­μ—μ„œ λ°μ΄ν„°μ˜ λΌˆλŒ€, μ—”ν‹°ν‹°λ₯Ό μ°Ύμ•„λ‚΄λŠ” 단계닀.
  • μ˜ˆμ‹œ: νšŒμ›, μƒν’ˆ, μ£Όλ¬Έ, 결제, 배솑

3단계: 속성 μ •μ˜ 및 관계 μ„€μ •

  • 각 μ—”ν‹°ν‹°μ˜ μ„ΈλΆ€ 정보(속성)λ₯Ό μ •μ˜ν•˜κ³  μ—”ν‹°ν‹° κ°„μ˜ 관계λ₯Ό μ„€μ •ν•˜λŠ” 단계닀.
  • μ˜ˆμ‹œ: product ν…Œμ΄λΈ”μ˜ 속성 - id, product_name, price, stock λ“±

4단계: M:N 관계 ν•΄μ†Œμ™€ 'μ—°κ΄€ μ—”ν‹°ν‹°'

  • 두 μ—”ν‹°ν‹°μ˜ 관계 μ†μ—μ„œλ§Œ 의미λ₯Ό κ°€μ§€λŠ” 속성이 μžˆλŠ”κ°€λ₯Ό νŒλ‹¨ν•œλ‹€.

μ£Όλ¬Έκ³Ό μ£Όλ¬Έ ν•­λͺ©μ˜ 관계 (1:N)

  • ν•˜λ‚˜μ˜ 주문은 μ—¬λŸ¬ 개의 μ£Όλ¬Έ ν•­λͺ©μ„ κ°€μ§ˆ 수 μžˆλ‹€.
  • ν•˜λ‚˜μ˜ μ£Όλ¬Έ ν•­λͺ©μ€ λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ 주문에 μ†ν•œλ‹€.

μƒν’ˆκ³Ό μ£Όλ¬Έ ν•­λͺ©μ˜ 관계 (1:N)

  • ν•˜λ‚˜μ˜ μƒν’ˆμ€ μ—¬λŸ¬ μ£Όλ¬Έ ν•­λͺ©μ— 포함될 수 μžˆλ‹€.
  • ν•˜λ‚˜μ˜ μ£Όλ¬Έ ν•­λͺ©μ€ λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ μƒν’ˆμ„ κ°€μ§„λ‹€.
λ°˜μ‘ν˜•