#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 μ΄λΌ λΆλ¦ λλ€.
# ER λͺ¨λΈ (Entity Relation Model)
DBμ λ°μ΄ν°λ€μ κ°μ²΄(Entity), μμ±(Attribute), κ΄κ³μ±(Realtion) μΌλ‘ κΈ°μ νλ λͺ¨λΈμ μλ―Έν©λλ€. κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°κ°μ κ΄κ³λ₯Ό ER λͺ¨λΈλ‘ λνλ λλ€.
## μν°ν° (Entity, κ°μ²΄)
λ¨λ μΌλ‘ μ‘΄μ¬νλ κ°μ²΄λ₯Ό μλ―Έν©λλ€. λμΌν κ°μ²΄λ μ‘΄μ¬ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄ 'νμ μ 보'κ° μμ λ, μ€λ³΅λλ νμμ΄ μλ€λ©΄ κ°κ°μ νμμ 'νμ μν°ν°'λΌκ³ λΆλ₯Ό μ μμ΅λλ€. ER λͺ¨λΈμμλ μ¬κ°νμΌλ‘ νκΈ°ν©λλ€.
## μ½ν κ°μ²΄ ( Weak Entity )
μ½ν κ°μ²΄λ, ν€ μμ±κ°μ΄ μλ κ°μ²΄λ₯Ό λ§ν©λλ€.
μλ₯Ό λ€μ΄ [κ°μ] κ°μ²΄μλ [λΆλ°] μ΄λΌλ κ°μ²΄κ° μμ μ μμ΅λλ€.
κ°μλ κ³ μ μ ν€κ°μ κ°μ§μ§λ§, λΆλ°μ λ¨μν 01, 02λ‘ λλ κ²μ΄λ―λ‘ [κ°μ]κ° μλ€λ©΄ λΆλ°μ ν€κ°μ μλ―Έμλ λ°μ΄ν°κ° λλ²λ¦½λλ€. μ°Έκ³ λ‘ μ΄λ κ² λ¨λ μΌλ‘ κ°μ§ μ μλ μ½νκ°μ²΄κ° κ°μ§λ ν€λ₯Ό λΆλΆ ν€(Partial Key) λΌ νκ³ μ΄λ¬ν λΆλΆν€κ° μμ±μ μ μ μΌλ‘ νκΈ°ν©λλ€.
λ€μ μ°Έμ¬ μ μ½μ‘°κ±΄μ λν΄ μ€λͺ νκΈ΄ νμ§λ§, λΉμ°ν μ½ν κ°μ²΄λ 무쑰건 'μ 체 μ°Έμ¬' μ λλ€. νΌμ μ‘΄μ¬ν μ μμ΅λλ€. ER λͺ¨λΈμμλ μ½ν κ°μ²΄λ₯Ό 2μ€ μ¬κ°νμΌλ‘ νκΈ°νκ³ μ΄λ¬ν κ΄κ³λ₯Ό μ΄μ€ λ§λ¦λͺ¨λ‘ νκΈ°ν©λλ€.
## μ νΈλ¦¬λ·°νΈ (Attribute, μμ±)
κ°μ²΄κ° κ°μ§λ μμ±μ μλ―Έν©λλ€. ER λͺ¨λΈμμλ μνμΌλ‘ νκΈ°ν©λλ€. μ°Έκ³ λ‘ Key Attributeλ μ΄λ¦μ λ°μ€μ κ·Έμ΄ νμν©λλ€.
κ΄λ ¨μλ μ¬λ¬ μ νΈλ¦¬λ·°νΈλ₯Ό λ¬Άμ΄ νλλ‘ νν ν μ μκ³ ( Composite Attribute ) λ€μ€κ°μ κ°μ§λ μ νΈλ¦¬λ·°νΈκ° μμ μ μμ΅λλ€. ( Multi-Valued Attribute ). λ§μ½ μ€μ§ νλμ κ°λ§ κ°λλ€λ©΄ Single-ValueλΌκ³ λΆλ¦ λλ€.
## μ λ μ νΈλ¦¬λ·°νΈ (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λΌκ³ λ³Ό μ μμ΅λλ€.
'π±βπ»μ 곡 κ³΅λΆ > λ°μ΄ν°λ² μ΄μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
#3 SQL (0) | 2021.07.04 |
---|---|
#1 λ°μ΄ν°λ² μ΄μ€ κΈ°μ΄ (0) | 2021.06.23 |
λΈλ‘κ·Έμ μ 보
JiwonDev
JiwonDev