πŸ—οΈ Key

μ΄μ°½ν›ˆΒ·2024λ…„ 8μ›” 1일

πŸ“š Backgrounds

ν‚€(Key)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ€‘μš”ν•œ κ°œλ…μœΌλ‘œ, λ°μ΄ν„°μ˜ 무결성을 μœ μ§€ν•˜κ³ , 데이터λ₯Ό 식별 및 κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” ν‚€μ˜ κ°œλ…κ³Ό μ’…λ₯˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

πŸ’ λ°μ΄ν„°λ² μ΄μŠ€ 무결성

λ°μ΄ν„°λ² μ΄μŠ€ 무결성은 λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•œ μ›μΉ™μž…λ‹ˆλ‹€. μ£Όμš” 무결성 μ œμ•½ μ‘°κ±΄μ—λŠ” 개체 무결성, μ°Έμ‘° 무결성, 도메인 무결성이 μžˆμŠ΅λ‹ˆλ‹€.

개체 무결성(Entity Integrity)

첫 번째 쑰건: κΈ°λ³Έν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” 속성은 null 값을 κ°€μ§ˆ 수 μ—†λ‹€.
두 번째 쑰건: κΈ°λ³Έν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” 속성은 λ‹€λ₯Έ λ ˆμ½”λ“œμ™€ 쀑볡될 수 μ—†λ‹€.
μ˜ˆμ‹œ: a', b', c' ν•„λ“œλ₯Ό κ°€μ§€λŠ” λ¦΄λ ˆμ΄μ…˜ Aμ—μ„œ a'κ°€ 기본킀인 경우, b'와 c'λŠ” null 값을 κ°€μ§ˆ 수 μžˆμ§€λ§Œ, a'λŠ” λ°˜λ“œμ‹œ 값을 μž…λ ₯ν•˜κ³  쀑볡될 수 μ—†μŠ΅λ‹ˆλ‹€.

μ°Έμ‘° 무결성(Referential Integrity)

μ™Έλž˜ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” 속성은 μ°Έμ‘° λ¦΄λ ˆμ΄μ…˜(ν…Œμ΄λΈ”)의 κΈ°λ³Έν‚€ κ°’κ³Ό 동일해야 ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: a1(κΈ°λ³Έν‚€), a2, a3 ν•„λ“œλ₯Ό κ°€μ§€λŠ” λ¦΄λ ˆμ΄μ…˜ A와 b1(κΈ°λ³Έν‚€), b2(μ™Έλž˜ν‚€), b3 ν•„λ“œλ₯Ό κ°€μ§€λŠ” λ¦΄λ ˆμ΄μ…˜ Bκ°€ μžˆμ„ λ•Œ, λ¦΄λ ˆμ΄μ…˜ B의 b2 속성은 a1 속성에 μ—†λŠ” 값을 μž…λ ₯ν•  수 μ—†μœΌλ©°, a1은 λ°˜λ“œμ‹œ κΈ°λ³Έν‚€λ‘œ μ„€μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

도메인 무결성(Domain Integrity)

속성값은 속성이 μ •μ˜λœ λ„λ©”μΈμ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚  수 μ—†μŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: νŠΉμ • λ¦΄λ ˆμ΄μ…˜μ—μ„œ 생물학적 성별을 λ‚˜νƒ€λ‚΄λŠ” 속성은 male, female 값을 λ²—μ–΄λ‚  수 μ—†μŠ΅λ‹ˆλ‹€.

☝️ μ΅œμ†Œμ„±κ³Ό μœ μΌμ„±

μœ μΌμ„±

ν•˜λ‚˜μ˜ ν‚€κ°’μœΌλ‘œ λ ˆμ½”λ“œλ₯Ό 식별할 수 μžˆλŠ” μ„±μ§ˆμ„ λ§ν•©λ‹ˆλ‹€. λͺ¨λ“  λ ˆμ½”λ“œλŠ” μœ μΌν•΄μ•Ό ν•˜λ©°, 이λ₯Ό μž…μ¦ν•  수 μžˆλŠ” 속성이 ν•„μš”ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: μƒν’ˆμ˜ 정보(μƒν’ˆμΌλ ¨λ²ˆν˜Έ, μƒν’ˆλͺ…, νŒλ§€κ°€ λ“±)λ₯Ό μ €μž₯ν•œ λ¦΄λ ˆμ΄μ…˜μ΄ μ‘΄μž¬ν•  λ•Œ, μƒν’ˆλͺ…κ³Ό νŒλ§€κ°€ 속성은 쀑볡될 수 μžˆμ§€λ§Œ, μƒν’ˆμΌλ ¨λ²ˆν˜ΈλŠ” 쀑볡될 수 μ—†μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ μƒν’ˆμΌλ ¨λ²ˆν˜Έκ°€ ν‚€κ°€ 되며, 이둜 인해 μœ μΌμ„±μ΄ 보μž₯λ©λ‹ˆλ‹€.

μ΅œμ†Œμ„±

ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ”λ° ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ†μ„±λ“€λ‘œλ§Œ ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” μ„±μ§ˆμ„ λ§ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: μƒν’ˆμ˜ 정보(μƒν’ˆμΌλ ¨λ²ˆν˜Έ, μƒν’ˆλͺ…, νŒλ§€κ°€ λ“±)λ₯Ό μ €μž₯ν•œ λ¦΄λ ˆμ΄μ…˜μ—μ„œ, μƒν’ˆμΌλ ¨λ²ˆν˜Έμ™€ μƒν’ˆλͺ…을 λ¬Άμ–΄ ν‚€λ‘œ μ§€μ •ν•  수 μžˆμ§€λ§Œ, μƒν’ˆμΌλ ¨λ²ˆν˜Έ ν•˜λ‚˜λ§ŒμœΌλ‘œλ„ μœ μΌμ„±μ„ 보μž₯ν•  수 μžˆλ‹€λ©΄ μƒν’ˆμΌλ ¨λ²ˆν˜Έλ§Œ ν‚€λ‘œ μ§€μ •ν•˜λŠ” 것이 μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•©λ‹ˆλ‹€.

πŸ’‘ 의미

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 쑰건에 λ§Œμ‘±ν•˜λŠ” λ ˆμ½”λ“œ(νŠœν”Œ)λ₯Ό μ°Ύκ±°λ‚˜ μ •λ ¬ν•  λ•Œ 기쀀이 λ˜λŠ” 속성 λ˜λŠ” κ·ΈλŸ¬ν•œ μ†μ„±μ˜ 집합을 ν‚€(Key)라고 ν•©λ‹ˆλ‹€.

βœ”οΈ μ’…λ₯˜

λ§λž‘λͺ°μ˜ μƒν’ˆλ¦¬μŠ€νŠΈ, 고객정보, μž₯λ°”κ΅¬λ‹ˆ λ¦΄λ ˆμ΄μ…˜μ„ 예둜 λ“€μ–΄ 각 ν‚€λ₯Ό μ„€λͺ…ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

μƒν’ˆ 리슀트

μƒν’ˆ λ²ˆν˜Έμƒν’ˆλͺ…νŒλ§€κ°€μƒν’ˆ 정보
0001λ§λž‘μΏ μ…˜3,000blah blah
0002λ§λž‘λͺ¨μ°ŒμŠ¬λΌμž„2,000blah blah
0003λ§λž‘μ–‘λ§2,000blah blah

νšŒμ› 정보

νšŒμ› μ•„μ΄λ””λΉ„λ°€λ²ˆν˜ΈνšŒμ› λ“±κΈ‰μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ
malang123abc123싀버900101-1xxxxxx
dandanabc123κ³¨λ“œ900102-1xxxxxx
marinsdf90djfng싀버900103-1xxxxxx
firebetfd900fj43nκ³¨λ“œ900104-1xxxxxx

μž₯λ°”κ΅¬λ‹ˆ

μ£Όλ¬Έλ²ˆν˜Έμ£Όλ¬Έμžμƒν’ˆ λͺ©λ‘μˆ˜λŸ‰ν•©κ³„ κΈˆμ•‘
0001malang1230001, 00021, 26,000
0002marin000348,000

πŸͺ„ 슈퍼 ν‚€(Super Key)

μœ μΌμ„±: 각 λ ˆμ½”λ“œλ₯Ό ꡬ별할 수 μžˆλ‹€λ©΄ 슈퍼 ν‚€κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: μƒν’ˆ 리슀트 λ¦΄λ ˆμ΄μ…˜μ—μ„œ μƒν’ˆ 번호 + μƒν’ˆλͺ…은 슈퍼 ν‚€κ°€ 될 수 μžˆμ§€λ§Œ, νŒλ§€κ°€ + μƒν’ˆ μ •λ³΄λŠ” 쀑볡값이 λ°œμƒν•  수 μžˆμ–΄ 슈퍼 ν‚€κ°€ 될 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ–‡οΈ 후보 ν‚€(Candidate Key)

μœ μΌμ„±, μ΅œμ†Œμ„±: 개체 무결성 원칙을 μœ„λ°°ν•˜μ§€ μ•ŠμœΌλ©°, μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•˜λŠ” ν‚€.
μ˜ˆμ‹œ: μƒν’ˆ 리슀트 λ¦΄λ ˆμ΄μ…˜μ—μ„œ μƒν’ˆ 번호, μƒν’ˆλͺ…, μƒν’ˆλ²ˆν˜Έ + μƒν’ˆλͺ… λ“± μ—¬λŸ¬ 슈퍼 ν‚€κ°€ μžˆμ§€λ§Œ, 이듀 쀑 μƒν’ˆ λ²ˆν˜Έμ™€ μƒν’ˆλͺ…λ§Œμ΄ μ΅œμ†Œμ„±μ„ 확보해 후보 ν‚€κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ” κΈ°λ³Έ ν‚€(Primary Key)

후보 ν‚€ μ€‘μ—μ„œ μ„ νƒλœ ν‚€λ‘œ, λ¦΄λ ˆμ΄μ…˜μ—μ„œ λ°˜λ“œμ‹œ μœ μΌν•΄μ•Ό ν•©λ‹ˆλ‹€.
μ˜ˆμ‹œ: νšŒμ› 정보 λ¦΄λ ˆμ΄μ…˜μ—μ„œ νšŒμ› 아이디와 μ£Όλ―Όλ“±λ‘λ²ˆν˜Έκ°€ 후보 ν‚€κ°€ 될 수 있으며, κ·Έ 쀑 ν•˜λ‚˜κ°€ κΈ°λ³Έ ν‚€λ‘œ μ§€μ •λ©λ‹ˆλ‹€.

πŸ”‘ 볡합 ν‚€(Composite Key)

λ‹€μˆ˜(2개 이상)의 속성을 μ‚¬μš©ν•œ ν‚€.
μ˜ˆμ‹œ: μƒν’ˆ 번호 + μƒν’ˆλͺ…, μƒν’ˆλ²ˆν˜Έ + νŒλ§€κ°€ λ“±.

πŸ”¨ μ™Έλž˜ ν‚€(Foreign Key)

λ‹€λ₯Έ λ¦΄λ ˆμ΄μ…˜μ˜ κΈ°λ³Έ ν‚€λ₯Ό μ°Έμ‘°ν•˜λŠ” 속성.
μ˜ˆμ‹œ: μž₯λ°”κ΅¬λ‹ˆ λ¦΄λ ˆμ΄μ…˜μ—μ„œ 주문자 속성은 νšŒμ› 아이디λ₯Ό μ°Έμ‘°ν•˜λ©°, 이λ₯Ό μ™Έλž˜ 킀라 ν•©λ‹ˆλ‹€.

πŸ“Ž λŒ€μ²΄ ν‚€(Alternate Key)

후보 ν‚€ 쀑 κΈ°λ³Έ ν‚€λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λͺ¨λ“  ν‚€.
πŸ”§ 유일(고유) ν‚€(Unique Key)
쀑볡값을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ, null 값을 ν—ˆμš©ν•˜λŠ” ν‚€λ‘œ, λ¦΄λ ˆμ΄μ…˜μ—μ„œ μ—¬λŸ¬ 속성에 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


참고자료 : https://github.com/devSquad-study/2023-CS-Study/blob/main/DB/db_key.md
profile
ν•œν™”μ‹œμŠ€ν…œ BEYOND SW CAMP 2κΈ°

0개의 λŒ“κΈ€