JiwonDev

#2 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€

by JiwonDev

# κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ (Relational Database)

SQLκ³Ό ν…Œμ΄λΈ”μ„ 기본으둜 μ‚¬μš©ν•˜λŠ” κ°€μž₯ λŒ€ν‘œμ μΈ DB의 μ’…λ₯˜μž…λ‹ˆλ‹€.

μŠ€ν‚€λ§ˆλ₯Ό μ΄μš©ν•˜μ—¬ μ—¬λŸ¬ ν…Œμ΄λΈ”μ— μžˆλŠ” λ°μ΄ν„°μ˜ 관계λ₯Ό μ •μ˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

더보기
μ˜μ–΄λ‘œ 'κ°œμš”'λΌλŠ” 의미둜 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ œμ•½μ‘°κ±΄, 데이터 κ°„μ˜ 관계λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λŒ€ν‘œμ μΈ μŠ€ν‚€λ§ˆλŠ” 속성(Attribute), 속성이 λͺ¨μΈ 개체(Entity) κ·Έ 개체 μ‚¬μ΄μ˜ κ΄€κ³„(Relation)등이 μžˆμŠ΅λ‹ˆλ‹€. 

 

# ν…Œμ΄λΈ”(Table), λ¦΄λ ˆμ΄μ…˜(Realtion)

ν…Œμ΄λΈ”(Table)은 μ•„λž˜μ™€ 같은 ν˜•νƒœλ‘œ 데이터λ₯Ό μ €μž₯ν•œ κ²ƒμž…λ‹ˆλ‹€. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” ν…Œμ΄λΈ”μ€ λ‹¨μˆœν•œ ν‘œκ°€ μ•„λ‹ˆλΌ λ°μ΄ν„°κ°„μ˜ 관계λ₯Ό ν•¨κ»˜ μ €μž₯ν•˜λ―€λ‘œ Relation 이라고 λΆ€λ¦…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ•„λž˜ ν‘œλŠ” 학생 Relationμž…λ‹ˆλ‹€.

학생 고유번호 이름 μ£Όμ†Œ μ—°λ½μ²˜ 성별
2020123456 홍길동 λΆ€μ‚° 000-1234-5677 M
2021654321 κΉ€μ² μˆ˜ μ„œμšΈ 000-1251-1231 F
2019123444 κΉ€λ‚˜μ—° λŒ€κ΅¬ 000-1512-1212 M

이 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ—μ„œλŠ” ν–‰(ν•œ ν•™μƒμ˜ 정보)와 μ—΄(머리글)이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

  • ν•œ ν•™μƒμ˜ 정보λ₯Ό μ €μž₯ν•˜λŠ” 각 ν–‰(Row)을 Record (λ˜λŠ” Tuple)이라 λΆ€λ¦…λ‹ˆλ‹€.
  • 자주 μ‚¬μš©ν•˜λŠ” λ‹¨μ–΄λŠ” μ•„λ‹ˆμ§€λ§Œ, 각 ν–‰μ˜ 수 (λ°μ΄ν„°μ˜ 개수)λ₯Ό Cardinality 라고 ν•©λ‹ˆλ‹€.
  • 각각의 μ—΄(Column)μ—μ„œλŠ” ν•™μƒμ˜ 속성(이름,μ£Όμ†Œ..)λ₯Ό λ‚˜νƒ€λ‚΄λ―€λ‘œ Attribute (λ˜λŠ” Field)라고 λΆ€λ¦…λ‹ˆλ‹€.
  • 열이 ν•œμΉΈ λŠ˜μ–΄λ‚  λ•Œ λ§ˆλ‹€ ν‘œμ˜ μ°¨μˆ˜κ°€ λŠ˜μ–΄λ‚œλ‹€λŠ” 의미둜 Attribute의 개수λ₯Ό Degree 라고도 ν•©λ‹ˆλ‹€.
  • 각각의 속성값은 λ“€μ–΄κ°ˆ 수 μžˆλŠ” 데이터가 ν•œμ •λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€. '성별'은 λ‚¨μž, μ—¬μžλ§Œ κ°€λŠ₯ν•˜κ³  'μ—°λ½μ²˜'λŠ” 숫자 λ°μ΄ν„°λ§Œ λ“€μ–΄ 갈 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ°μ‹μœΌλ‘œ ν•΄λ‹Ή Attributeκ°€ κ°€μ§ˆμˆ˜ μžˆλŠ” κ°’μ˜ 집합(=κ°’μ˜ νƒ€μž…, κ·œμΉ™)을 Domain 이라 λΆ€λ¦…λ‹ˆλ‹€.

Cardinality 4개, Degree 6개 (μ•„μ•„λ””,이름,λ‚˜μ΄,λ“±κΈ‰,직업,적립금)

 


# ER λͺ¨λΈ (Entity Relation Model)

DB의 데이터듀을 개체(Entity), 속성(Attribute), 관계성(Realtion) 으둜 κΈ°μˆ ν•˜λŠ” λͺ¨λΈμ„ μ˜λ―Έν•©λ‹ˆλ‹€. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ°μ΄ν„°κ°„μ˜ 관계λ₯Ό ER λͺ¨λΈλ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

 

## μ—”ν‹°ν‹° (Entity, 개체)

λ‹¨λ…μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 객체λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ™μΌν•œ κ°μ²΄λŠ” μ‘΄μž¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ '학생 정보'κ°€ μžˆμ„ λ•Œ, μ€‘λ³΅λ˜λŠ” 학생이 μ—†λ‹€λ©΄ 각각의 학생을 '학생 μ—”ν‹°ν‹°'라고 λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ER λͺ¨λΈμ—μ„œλŠ” μ‚¬κ°ν˜•μœΌλ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€.

 

## μ•½ν•œ 개체 ( Weak Entity )

μ•½ν•œ κ°œμ²΄λž€, ν‚€ 속성값이 μ—†λŠ” 개체λ₯Ό λ§ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ [κ°•μ˜] κ°œμ²΄μ—λŠ” [λΆ„λ°˜] μ΄λΌλŠ” κ°œμ²΄κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

κ°•μ˜λŠ” 고유의 킀값을 κ°€μ§€μ§€λ§Œ, λΆ„λ°˜μ€ λ‹¨μˆœνžˆ 01, 02둜 λ‚˜λˆˆ κ²ƒμ΄λ―€λ‘œ [κ°•μ˜]κ°€ μ—†λ‹€λ©΄ λΆ„λ°˜μ˜ 킀값은 μ˜λ―Έμ—†λŠ” 데이터가 λ˜λ²„λ¦½λ‹ˆλ‹€. 참고둜 μ΄λ ‡κ²Œ λ‹¨λ…μœΌλ‘œ κ°€μ§ˆ 수 μ—†λŠ” μ•½ν•œκ°œμ²΄κ°€ κ°€μ§€λŠ” ν‚€λ₯Ό λΆ€λΆ„ ν‚€(Partial Key) 라 ν•˜κ³  μ΄λŸ¬ν•œ λΆ€λΆ„ν‚€κ°’ 속성은 μ μ„ μœΌλ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€.

 

뒀에 μ°Έμ—¬ μ œμ•½μ‘°κ±΄μ— λŒ€ν•΄ μ„€λͺ…ν•˜κΈ΄ ν•˜μ§€λ§Œ, λ‹Ήμ—°νžˆ μ•½ν•œ κ°œμ²΄λŠ” 무쑰건 '전체 μ°Έμ—¬' μž…λ‹ˆλ‹€. 혼자 μ‘΄μž¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€. ER λͺ¨λΈμ—μ„œλŠ” μ•½ν•œ 개체λ₯Ό 2쀑 μ‚¬κ°ν˜•μœΌλ‘œ ν‘œκΈ°ν•˜κ³  μ΄λŸ¬ν•œ 관계λ₯Ό 이쀑 λ§ˆλ¦„λͺ¨λ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€.

bun_no (λΆ„λ°˜μ„ κ΅¬λΆ„ν•˜λŠ” ν‚€κ°’)은 κ°•μ˜μ— μ˜μ‘΄μ μ΄λ‹€. κ°•μ˜κ°€ μ—†λ‹€λ©΄ μ˜λ―Έμ—†λŠ” 데이터.


## μ• νŠΈλ¦¬λ·°νŠΈ (Attribute, 속성)

κ°œμ²΄κ°€ κ°€μ§€λŠ” 속성을 μ˜λ―Έν•©λ‹ˆλ‹€. ER λͺ¨λΈμ—μ„œλŠ” μ›ν˜•μœΌλ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€. 참고둜 Key AttributeλŠ” 이름에 밑쀄을 κ·Έμ–΄ ν‘œμ‹œν•©λ‹ˆλ‹€.

key 속성은 λ°‘μ€„λ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

κ΄€λ ¨μžˆλŠ” μ—¬λŸ¬ μ• νŠΈλ¦¬λ·°νŠΈλ₯Ό λ¬Άμ–΄ ν•˜λ‚˜λ‘œ ν‘œν˜„ ν•  수 있고 ( Composite Attribute ) 닀쀑값을 κ°€μ§€λŠ” μ• νŠΈλ¦¬λ·°νŠΈκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. ( Multi-Valued Attribute ). λ§Œμ•½ 였직 ν•˜λ‚˜μ˜ κ°’λ§Œ κ°–λŠ”λ‹€λ©΄ Single-Value라고 λΆ€λ¦…λ‹ˆλ‹€.

[μ£Όμ†Œ] 속성은 [ μ‹œ, κ΅°, ꡬ, μ•„νŒŒνŠΈλͺ…]으둜 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. ν•œ 속성값에 μ—¬λŸ¬κ°’μ΄ λ™μ‹œμ— λ“€μ–΄ 갈 수 도 μžˆμŠ΅λ‹ˆλ‹€. (ex 이름이 2개)

## μœ λ„ μ• νŠΈλ¦¬λ·°νŠΈ (Derived Attribute)

기쑴에 μ‘΄μž¬ν•˜λŠ” 속성듀을 μ΄μš©ν•˜μ—¬ λ§Œλ“€μ–΄λ‚Έ μƒˆλ‘œμš΄ μ†μ„±μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ [μƒν’ˆ 개수]와 [μƒν’ˆ 가격] 속성이 μžˆλ‹€λ©΄, 이λ₯Ό μ΄μš©ν•΄ [총 μˆ˜μž…]μ΄λΌλŠ” μœ λ„ μ• νŠΈλ¦¬λ·°νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 점선인 μ›μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.


## λ¦΄λ ˆμ΄μ…˜ (Relation, 관계)

각 μ—”ν‹°ν‹°λ“€ μ‚¬μ΄μ˜ 관계λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ [학생] κ³Ό [κ³Όλͺ©] μ‚¬μ΄μ—λŠ” [μˆ˜κ°•μ‹ μ²­]μ΄λΌλŠ” λ¦΄λ ˆμ΄μ…˜ νƒ€μž…μœΌλ‘œ 관계λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ—°νžˆ λ¦΄λ ˆμ΄μ…˜λ„ 속성을 κ°€μ§ˆ 수 있으며 ER λͺ¨λΈμ—μ„œ λ¦΄λ ˆμ΄μ…˜μ„ λ§ˆλ¦„λͺ¨λ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€.

[λŒ€μΆœμƒν™˜]μ΄λΌλŠ” λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ 두 μ—”ν‹°ν‹° [ λŒ€μΆœ, μƒν™˜ ]의 관계λ₯Ό ν‘œν˜„ν•˜μ˜€λ‹€.


# 관계성 (RealtionShip)

ER λ‹€μ΄μ–΄κ·Έλž¨μ„ μ„€κ³„ν•˜λŠ” κ°€μž₯ 큰 λͺ©μ μ€ 각 Entity의 νƒ€μž…κ³Ό 관계λ₯Ό μ •μ˜ν•¨μ— μžˆμŠ΅λ‹ˆλ‹€.

μ•žμ—μ„œ Attributeλ₯Ό μ΄μš©ν•΄ 각 개체의 정보λ₯Ό λ‚˜νƒ€λƒˆλ‹€λ©΄, RealtionShip(ν™”μ‚΄ν‘œ)λ₯Ό μ΄μš©ν•΄ 관계λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


## Cardinality Ratio Constraint (카닀널리티 λΉ„μœ¨ μ œμ•½μ‘°κ±΄)

말이 μ–΄λ €μš΄λ°, ν”νžˆ λ§ν•˜λŠ” μΌλŒ€μΌ, μΌλŒ€λ‹€, λ‹€λŒ€λ‹€ 쑰건을 μ˜λ―Έν•©λ‹ˆλ‹€.

  • μΌλŒ€μΌ(1 : 1) - 두 κ°œ Entity Type의 κ°œμ²΄λ“€μ€ μ„œλ‘œ μΌλŒ€μΌλ‘œ λŒ€μ‘
  • μΌλŒ€λ‹€(1 : N) - ν•˜λ‚˜μ˜ κ°œμ²΄κ°€ λ‹€λ₯Έ Entity Type의 λ§Žμ€ κ°œμ²΄λ“€κ³Ό κ΄€λ ¨λ˜μ§€λ§Œ, κ·Έ 역은 μ„±λ¦½ν•˜μ§€ μ•ŠμŒ
  • λ‹€λŒ€λ‹€(N : M) - ν•˜λ‚˜μ˜ κ°œμ²΄κ°€ λ‹€λ₯Έ Entity Type의 λ§Žμ€ κ°œμ²΄λ“€κ³Ό κ΄€λ ¨λ˜λ©°, 역이 성립

예λ₯Ό λ“€μ–΄ [학생], [학ꡐ], [κ³Όλͺ©] μ—”ν‹°ν‹°κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

 

  • ν•™κ΅λŠ” μ—¬λŸ¬ 학생을 κ°€μ§ˆ 수 μžˆμ§€λ§Œ ν•œ 학생은 ν•œ ν•™κ΅λ§Œ λ‹€λ‹™λ‹ˆλ‹€. 이 λ‘κ°œλ₯Ό <μž¬ν•™μ€‘μΈ 학생> μ΄λΌλŠ” λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ 묢을 경우 μΌλŒ€λ‹€(1:N) 관계가 μ„±λ¦½ν•©λ‹ˆλ‹€.
  • ν•œ 학생은 μ—¬λŸ¬κ°€μ§€ κ³Όλͺ©μ„ 듀을 수 있고, ν•œ κ³Όλͺ©μ—λŠ” μ—¬λŸ¬ν•™μƒμ΄ λ™μ‹œμ— 듀을 수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ‘κ°œλ₯Ό <μˆ˜κ°•μ‹ μ²­ κ³Όλͺ©> μ΄λΌλŠ” λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ λ¬Άμ„κ²½μš° λ‹€λŒ€λ‹€(N:M) 관계가 μ„±λ¦½ν•©λ‹ˆλ‹€. (μ΄λŸ¬ν•œ κ΄€κ³„λŠ” 데이터가 λ³΅μž‘ν•΄μ§€λ―€λ‘œ 1:N κ΄€κ³„λ‘œ λ³€ν™˜ν•΄μ•Όν•©λ‹ˆλ‹€.)

μ΄λŸ¬ν•œ κ΄€κ³„λŠ” ER λͺ¨λΈμ—μ„œ ν™”μ‚΄ν‘œ μœ„μ— 1,N,M 으둜 ν‘œκΈ°ν•©λ‹ˆλ‹€.


## Participation Constraint (μ°Έμ—¬ μ œμ•½μ‘°κ±΄)

ν•œ κ°œμ²΄μ—μ„œ λͺ¨λ“  데이터λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 보μž₯은 μ—†μŠ΅λ‹ˆλ‹€. μΌλΆ€λ§Œ μ‚¬μš©ν•˜λ©΄ λΆ€λΆ„μ°Έμ—¬ (Parital), μ „λΆ€ λ‹€ μ“΄λ‹€λ©΄ (Total)이라 ν‘œκΈ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ [학생] κ³Ό [κ³Όλͺ©]을 μ΄μš©ν•˜μ—¬ [μˆ˜κ°•μ‹ μ²­κ³Όλͺ©]μ΄λΌλŠ” λ¦΄λ ˆμ΄μ…˜μ„ λ§Œλ“€ λ•Œ, νœ΄ν•™μƒ μ •λ³΄λŠ” μ‚¬μš©ν•  ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ 학생은 λΆ€λΆ„μ°Έμ—¬(Parital)ν•©λ‹ˆλ‹€. λ°˜λŒ€λ‘œ κ³Όλͺ©μ€ λͺ¨λ“  κ³Όλͺ©μ„ λ‹€ μ‚¬μš©ν•˜λ―€λ‘œ 전체참여(Total)ν•©λ‹ˆλ‹€.

ERλͺ¨λΈμ—μ„œ λΆ€λΆ„μ°Έμ—¬λŠ” ν•œμ€„λ‘œ, μ „μ²΄μ°Έμ—¬λŠ” ν™”μ‚΄ν‘œ λ‘μ€„λ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 

참고둜 [κ°•μ˜] - [λΆ„λ°˜] 같이 μ•½ν•œκ°œμ²΄λŠ” λ°˜λ“œμ‹œ μ „μ²΄μ°Έμ—¬μž…λ‹ˆλ‹€. μ•½ν•œ κ°œμ²΄λŠ” 혼자 μ‘΄μž¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€.


## Structural Constraint (ꡬ쑰적 μ œμ•½μ‘°κ±΄)

μœ„μ— μ„€λͺ…ν•œ 2개 (1:N, μ°Έμ—¬μ œμ•½μ‘°κ±΄)을 λ¬Άμ–΄ ν‘œκΈ°ν•˜λŠ” 것을 ꡬ쑰적 μ œμ•½μ‘°κ±΄μ΄λΌκ³  λΆ€λ¦…λ‹ˆλ‹€. μœ„μ—μ„œ ν™”μ‚΄ν‘œμ— 적은 1, N, M을 μ‹€μ œ 숫자(Min, Max)으둜 ν•œμ€„μ— ν‘œκΈ°ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ < 학생은 μ΅œμ†Œ 3개, μ΅œλŒ€ 6개의 κ°•μ˜λ₯Ό μˆ˜κ°•ν•  수 있으며 > < κ°•μ˜λŠ” μ΅œμ†Œ 10λͺ…, μ΅œλŒ€ 100λͺ…μ˜ 학생이 듀을 수 μžˆλ‹€ > λΌλŠ” ꡬ쑰적 μ œμ•½μ‘°κ±΄μ΄ μžˆλ‹€λ©΄, μ•„λž˜ κ·Έλ¦Όκ³Ό 같이 ν‘œν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 


# ν‚€ 속성 (Key Attribute)

KeyλŠ” 각각의 데이터λ₯Ό ꡬ뢄 지을 수 μžˆλŠ”, μ‹λ³„μžλ‘œ μ§€μ •ν•œ 속성(Attribute)을 μ˜λ―Έν•©λ‹ˆλ‹€.


## μŠˆνΌν‚€(Super Key)

각 ν–‰(λ ˆμ½”λ“œ)의 μœ μΌμ„±λ§Œ λ§Œμ‘±ν•˜λŠ” ν‚€μž…λ‹ˆλ‹€. μ‰½κ²Œλ§ν•΄ κΈ°λ³Έν‚€, λŒ€μ²΄ν‚€λ₯Ό μ œμ™Έν•œ λͺ¨λ“  킀듀을 μ˜λ―Έν•©λ‹ˆλ‹€.

'ν‚€'λΌλŠ”κ±΄ κ²°κ΅­ 각 행을 ꡬ뢄할 수 μžˆλŠ” μ‹λ³„μž μ—­ν• λ§Œ μˆ˜ν–‰ν•˜λ©΄ λ˜λŠ”κ±°κΈ°μ— [아이디+이름] [아이디+이름+μ£Όμ†Œ]... λ“± 수 λ§Žμ€ 쑰합을 μ΄μš©ν•΄ 킀듀을 ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ‹λ³„μž 역할을 ν•  수 μžˆλŠ” λͺ¨λ“  킀듀을 Super Key라고 λΆ€λ¦…λ‹ˆλ‹€.  λ¬Όλ‘  μ΄λŸ°μ‹μœΌλ‘œ ν‚€λ₯Ό λŒ€μΆ©λ§Œλ“€κ²Œλ˜λ©΄, 검색할 λ•Œ λΆˆνŽΈν•œκ±΄ 물둠이고 DB μ„±λŠ₯도 맀우 λ–¨μ–΄μ§€κ²Œλ©λ‹ˆλ‹€.


## κΈ°λ³Έν‚€(Primary Key)

μŠˆνΌν‚€μ—μ„œ μœ μΌμ„±λ§Œ λ§Œμ‘±ν–ˆλ‹€λ©΄, μ΅œμ†Œμ„±κΉŒμ§€ λ§Œμ‘±ν•˜λŠ” ν‚€(λ˜λŠ” 집합)μž…λ‹ˆλ‹€. μœ„μ˜ ν•™μƒλ°μ΄ν„°μ—μ„œλŠ” ꡳ이 λ³΅μž‘ν•˜κ²Œ ν‚€λ₯Ό λ§Œλ“€ ν•„μš” 없이 'ν•™λ²ˆ'μ΄λΌλŠ” μ΅œμ†Œν•œμ˜ μ†μ„±κ°’μœΌλ‘œ ν‚€λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό Primary Key라 λΆ€λ¦…λ‹ˆλ‹€.


## 후보킀(Candidate Key)와 λŒ€μ²΄ν‚€(Alternate Key)

λŒ€μ²΄ν‚€λŠ” 기본킀와 λ§ˆμ°¬κ°€μ§€λ‘œ μœ μΌμ„±κ³Ό μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•©λ‹ˆλ‹€. 그러면 λ˜‘κ°™μ•„μ„œ ν•„μš”μ—†μ„κ±΄λ° μ™œ μ“°λŠ” κ±ΈκΉŒμš”?

ν•œ ν•™κ΅μ—λŠ” λͺ¨λ“ ν•™μƒμ΄ κ³ μœ ν•œ ν•™λ²ˆμ„ κ°€μ§‘λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μ—¬λŸ¬κ°œμ˜ 학ꡐ 데이터λ₯Ό λ‹€λ£°λ•Œλ„ ν•™λ²ˆμ„ κ·ΈλŒ€λ‘œ 써도 μƒκ΄€μ—†μ„κΉŒμš”? λ‹Ήμ—°νžˆ μ•„λ‹™λ‹ˆλ‹€. μ• μ΄ˆμ— ν•™λ²ˆμ΄λΌλŠ”κ±΄ 'ν•œ 학ꡐ'μ—μ„œ κ³ μœ ν•œ κ°’μ΄λ‹ˆκΉŒμš”.

 

μ΄λ ‡κ²Œ DBμ—μ„œ μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜λ‹€λ³΄λ©΄ κ³ μœ λ²ˆν˜Έκ°€ μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν‚€ 값이 κ²ΉμΉ˜λŠ” κ²½μš°κ°€ μƒκΈ°λŠ”λ° 이 두 경우 λŒ€μ²΄ν‚€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ—¬λŸ¬ν‚€λ₯Ό λ™μ‹œμ— μ‚¬μš©ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ κΈ°λ³Έν‚€κ°€ 겹칠경우 Alternate Keyλ₯Ό μ΄μš©ν•΄ λΉ„κ΅ν•©λ‹ˆλ‹€.

 

μœ μΌμ„±κ³Ό μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•˜κ³ , ν‚€λ‘œ μ‚¬μš©λ  수 μžˆλŠ” 것듀(κΈ°λ³Έν‚€, λŒ€μ²΄ν‚€)의 집합을 Candidate Key라고 λΆ€λ¦…λ‹ˆλ‹€.


## 볡합킀(Composite Key)

λ°μ΄ν„°λ“€μ˜ κ΄€κ³„λŠ” μΌλŒ€μΌ, μΌλŒ€λ‹€, λ‹€λŒ€λ‹€λ‘œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λŒ€ν•™κ΅μ—μ„œλŠ” 학생 ν…Œμ΄λΈ”κ³Ό κ³Όλͺ©ν…Œμ΄λΈ”을 κ°€μ§€κ³ μžˆκ³ , 이λ₯Ό μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€ κ°€μ •ν•©μ‹œλ‹€.

ν•™λ²ˆ (학생 ν…Œμ΄λΈ”) κ³Όλͺ©λ²ˆν˜Έ (κ³Όλͺ© ν…Œμ΄λΈ”) 학점 (μƒˆλ‘œμš΄ 데이터)
2015000001 CS310 A
2015000001 CS313 B
2018000002 CS333 B
2018000002 CS310 A

λ‹¨μˆœνžˆ μƒκ°ν•˜λ©΄ ν•™λ²ˆμ„ κΈ°λ³Έν‚€λ‘œ μ‚¬μš©ν•˜λ©΄ 될 것 κ°™μ§€λ§Œ, 학생과 κ³Όλͺ©μ€ λ‹€λŒ€λ‹€ κ΄€κ³„μž…λ‹ˆλ‹€. 즉 ν•œ 학생이 μ—¬λŸ¬ κ³Όλͺ©μ„ κ°€μ§ˆ 수 있고, λ°˜λŒ€λ‘œ ν•œ κ³Όλͺ©μ΄ μ—¬λŸ¬ 학생 데이터λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 κ²½μš°μ—λŠ” [ν•™λ²ˆ+κ³Όλͺ©λ²ˆν˜Έ]λ₯Ό λ¬Άμ–΄ ν•˜λ‚˜μ˜ 볡합(Composite) ν‚€λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹Ήμ—°ν•œκ±°μ§€λ§Œ, ν•„μš”ν•˜λ‹€λ©΄ κΈ°λ³Έν‚€λ‚˜ λŒ€μ²΄ν‚€λ„ λ³΅ν•©ν‚€λ‘œ ꡬ성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

## μ™Έλž˜ν‚€(foreign key)

μ—¬λŸ¬ λ¦΄λ ˆμ΄μ…˜(=ν…Œμ΄λΈ”)을 μ‚¬μš©ν•  λ•Œ, λ‹€λ₯Έ λ¦΄λ ˆμ΄μ…˜μ˜ κΈ°λ³Έν‚€λ₯Ό μ°Έμ‘°ν•˜λŠ” 속성을 μ˜λ―Έν•©λ‹ˆλ‹€.

μœ„ 볡합킀 μ˜ˆμ œμ—μ„œλŠ” ν•™λ²ˆμ΄ [학생 λ¦΄λ ˆμ΄μ…˜]의 κΈ°λ³Έν‚€μ΄λ―€λ‘œ, 이 ν…Œμ΄λΈ”μ—μ„œλŠ” Foreign Key라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μˆ˜κ°• Tableμ—μ„œ ν•™λ²ˆμ€ [학생 λ¦΄λ ˆμ΄μ…˜] μ™Έλž˜ν‚€μž…λ‹ˆλ‹€.

'πŸ±β€πŸ’»μ „κ³΅ 곡뢀 > λ°μ΄ν„°λ² μ΄μŠ€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

#3 SQL  (0) 2021.07.04
#1 λ°μ΄ν„°λ² μ΄μŠ€ 기초  (0) 2021.06.23

λΈ”λ‘œκ·Έμ˜ 정보

JiwonDev

JiwonDev

ν™œλ™ν•˜κΈ°