λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⭐ Personal_Study/Database

M:N Relationship

by ν¬μŠ€νŠΈμ‰μ΄ν¬ 2022. 10. 16.

Many to many relationship

M:N 관계

βœ” Many-to-many relationships
βœ” ν•œ ν…Œμ΄λΈ”μ˜ 0개 μ΄μƒμ˜ λ ˆμ½”λ“œκ°€ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ 0개 μ΄μƒμ˜ λ ˆμ½”λ“œμ™€ κ΄€λ ¨λœ 경우
βœ” μ–‘μͺ½ λͺ¨λ‘μ—μ„œ N:1 관계λ₯Ό 가진닀.

κ°œμš”

βœ” 병원에 λ‚΄μ›ν•˜λŠ” ν™˜μžμ™€ μ˜μ‚¬μ˜ μ˜ˆμ•½ μ‹œμŠ€ν…œ ꡬ좕
βœ” ν™˜μž <-> μ˜μ‚¬ 관계 데이터 λͺ¨λΈλ§

μš©μ–΄ 정리

βœ” Target model

  • 관계 ν•„λ“œλ₯Ό 가지지 μ•Šμ€ λͺ¨λΈ

βœ” Source model

  • 관계 ν•„λ“œλ₯Ό 가진 λͺ¨λΈ

N:1 λͺ¨λΈμ˜ ν•œκ³„

image

βœ” λ™μΌν•œ ν™˜μžκ°€ λ‹€λ₯Έ μ˜μ‚¬μ—κ²Œ μ˜ˆμ•½ν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체λ₯Ό ν•˜λ‚˜ 더 λ§Œλ“€μ–΄μ„œ μ˜ˆμ•½μ„ 진행해야 ν•œλ‹€.

image

βœ” μ™Έλž˜ ν‚€ μ»¬λŸΌμ— '1, 2' ν˜•νƒœλ‘œ μ°Έμ‘°ν•˜κΈ° λΆˆκ°€λŠ₯

μ€‘κ°œ λͺ¨λΈ μž‘μ„±μ„ ν†΅ν•œ ν•΄κ²°

image

βœ” ν™˜μžμ™€ μ˜μ‚¬ λ‘˜λ‹€μ— λŒ€ν•΄μ„œ N:1 관계λ₯Ό κ°€μ§€λŠ” λ³„λ„μ˜ μ˜ˆμ•½ λͺ¨λΈμ„ μƒˆλ‘œ μž‘μ„±

image

βœ” μ˜μ‚¬μ™€ ν™˜μž 생성 ν›„ μ˜ˆμ•½ λ§Œλ“€κΈ° (사진은 doctorλ₯Ό 두 번 μƒμ„±ν•΄μ„œ 2번 μ˜μ‚¬λ‘œ λ‚˜μ˜΄)

 

image

βœ” μ—­μ°Έμ‘°λ₯Ό ν†΅ν•΄μ„œ μ˜ˆμ•½ 정보 쑰회 κ°€λŠ₯

Django ManyToManyField

image

βœ” ν™˜μž λͺ¨λΈμ— DJango ManyToManyField μž‘μ„± (λ³΅μˆ˜ν˜•μœΌλ‘œ μž‘μ„±ν•˜κΈ°!)

image

βœ” 쒅속적이지 μ•Šμ€ λ³„λ„μ˜ μŠ€ν‚€λ§ˆ(μ€‘κ°œ ν…Œμ΄λΈ”)이 μƒμ„±λœλ‹€.

image

βœ” μ˜ˆμ•½ 생성 및 쑰회(ν™˜μž -> μ˜μ‚¬)

image

βœ” μ˜μ‚¬ -> ν™˜μž

image

βœ” μ˜ˆμ•½ μ·¨μ†Œ (μ˜μ‚¬ -> ν™˜μž)

image

βœ” μ˜ˆμ•½ μ·¨μ†Œ (ν™˜μž -> μ˜μ‚¬)

related_name argument

βœ” target model이 source model을 μ°Έμ‘°ν•  λ•Œ μ‚¬μš©ν•  이름

image
image

βœ” μ—­μ°Έμ‘°κ°€ μ•„λ‹ˆλΌ related_name으둜 λ°”λ‘œ μ ‘κ·Όν•  수 μžˆλ‹€

through argument

βœ” κ·Έλ ‡λ‹€λ©΄ μ€‘κ°œ λͺ¨λΈμ„ 직접 μž‘μ„±ν•˜λŠ” κ²½μš°λŠ” μ—†μ„κΉŒ?

  • μ€‘κ°œ ν…Œμ΄λΈ”μ„ μˆ˜λ™μœΌλ‘œ 지정할 경우 throughμ˜΅μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

βœ” κ°€μž₯ 일반적인 μš©λ„λŠ” μ€‘κ°œν…Œμ΄λΈ”μ— μΆ”κ°€ 데이터λ₯Ό μ‚¬μš©ν•΄ M:N관계와 μ—°κ²°ν•˜λ €λŠ” 경우

image

βœ” through μ„€μ • 및 Reservation Class μˆ˜μ •

image

βœ” κΈ°μ‘΄ μ€‘κ°œ λͺ¨λΈμ—μ„œμ˜ μ˜ˆμ•½ 생성 방식을 μ΄μš©ν•  μˆ˜λ„ μžˆλ‹€.

image

βœ” κΈ°μ‘΄ manytomany fieldμ—μ„œ μ˜μ‚¬λ‚˜ ν™˜μžκ°€ μ˜ˆμ•½μ„ μƒμ„±ν•˜λ“―μ΄ 생성할 수 μžˆλ‹€.
βœ” through_dfaults값에 λ”•μ…”λ„ˆλ¦¬ νƒ€μž…μœΌλ‘œ μž…λ ₯ν•΄μ€€λ‹€.

symmetrical

βœ” λŒ€μΉ­μ„ 의미
βœ” ManyToManyFieldκ°€ λ™μΌν•œ λͺ¨λΈ(on self)을 κ°€λ¦¬ν‚€λŠ” μ •μ˜μ—μ„œ μ‚¬μš©

image

βœ” True일 경우

  • _set λ§€λ‹ˆμ €λ₯Ό μΆ”κ°€ν•˜μ§€ μ•ŠμŒ
  • source λͺ¨λΈμ˜ μΈμŠ€ν„΄μŠ€κ°€ targetλͺ¨λΈμ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜λ©΄ μžλ™μœΌλ‘œ targetλͺ¨λΈ μΈμŠ€ν„΄μŠ€λ„ source λͺ¨λΈ μΈμŠ€ν„΄μŠ€λ₯Ό μžλ™μœΌλ‘œ μ°Έμ‘°ν•˜λ„λ‘ ν•œλ‹€.(λŒ€μΉ­)
  • 즉, λ‚΄κ°€ λ‹Ήμ‹ μ˜ 친ꡬ라면 당신도 λ‚΄ μΉœκ΅¬κ°€ λ˜λŠ” 관계

βœ” λŒ€μΉ­μ„ μ›ν•˜μ§€ μ•ŠλŠ” 경우 False둜 μ„€μ •

정리

βœ” M:N κ΄€κ³„λ‘œ 맺어진 두 ν…Œμ΄λΈ”μ—λŠ” λ³€ν™”κ°€ μ—†μŒ
βœ” Django의 ManyToManyField은 μ€‘κ°œ ν…Œμ΄λΈ”μ„ μžλ™μœΌλ‘œ μƒμ„±ν•œλ‹€.
βœ” Django의 ManyToManyFieldλŠ” M:N 관계λ₯Ό λ§ΊλŠ” 두 λͺ¨λΈ 어디에 μœ„μΉ˜ν•΄λ„ 상관 μ—†μœΌλ‚˜, ν•„λ“œ μž‘μ„± μœ„μΉ˜μ— 따라 참쑰와 μ—­μ°Έμ‘° λ°©ν–₯을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.
βœ” N:1은 μ™„μ „ν•œ 쒅속 관계 μ˜€μ§€λ§Œ, M:N은 μ˜μ‚¬μ—κ²Œ μ§„μ°°λ°›λŠ” ν™˜μž, ν™˜μžλ₯Ό μ§„μ°°ν•˜λŠ” μ˜μ‚¬μ˜ 두 가지 ν˜•νƒœλ‘œ λͺ¨λ‘ ν‘œν˜„ κ°€λŠ₯

'⭐ Personal_Study > Database' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν”„λ‘œμ νŠΈ μ‹œ DB 섀계 방법  (0) 2023.03.08
λ°˜μ •κ·œν™”  (0) 2023.03.07
N:1 Relationship  (1) 2022.10.08
Relational Database  (0) 2022.10.08
DML (Data Manipulation Language)  (0) 2022.10.08

λŒ“κΈ€