[Data Modeling] λ°μ΄ν° λͺ¨λΈλ§ 2μΌμ°¨ - μ κ·ν, λ°μ κ·ν
- DataModeling
![[Data Modeling] λ°μ΄ν° λͺ¨λΈλ§ 2μΌμ°¨ - μ κ·ν, λ°μ κ·ν](/static/b61fbd4e20d0f4cd7b5349e3a824b999/96bad/heroImage.png)
π μ°κ΄ ν¬μ€ν
1. λ€μ΄κ°λ©°
μ΄λ² κΈμμλ λ°μ΄ν° λͺ¨λΈλ§μμ μμ±κ³Ό μλ³μλ₯Ό μ μνλ λ°©λ²μ 볡μ΅νκ³ , μ κ·νμ λ°μ κ·νμ ν΅μ¬ κ°λ μ μ 리νλ€. 1μΌμ°¨μμ μν°ν°μ κ΄κ³λ₯Ό λμΆνλ νλ¦μ λ΄€λ€λ©΄, 2μΌμ°¨μμλ ν μ΄λΈ ꡬ쑰λ₯Ό λ μμ μ μΌλ‘ λ§λλ λ°©λ²κ³Ό μ±λ₯μ μν΄ μλμ μΌλ‘ ꡬ쑰λ₯Ό λ°κΎΈλ λ°©λ²μ λ€λ£¬λ€.
- μμ±μ μ ν
- μνΌνμ κ³Ό μλΈνμ
- μ¬κ·μ κ΄κ³
- 볡ν©ν€μ λ체ν€
- μ κ·ν
- λ°μ κ·ν
- 컬λΌ/ν μ΄λΈ λ°μ κ·ν ν¨ν΄
2. λͺ¨λΈλ§ μμ±κ³Ό μλ³μ 볡μ΅
λ°μ΄ν° λͺ¨λΈλ§μμ μν°ν°λ₯Ό λμΆν λ€μλ κ° μν°ν°κ° κ°μ ΈμΌ ν μμ±κ³Ό μλ³μλ₯Ό μ μν΄μΌ νλ€. μμ±μ μν°ν°λ₯Ό μ€λͺ νλ μΈλΆ λ°μ΄ν°μ΄κ³ , μλ³μλ μν°ν°μ μΈμ€ν΄μ€λ₯Ό μ μΌνκ² κ΅¬λΆνλ κΈ°μ€μ΄λ€.
2.1 Attribute
μμ±μ ν¬κ² κΈ°μ΄ μμ±, μΆμΆ μμ±, μ€κ³ μμ±μΌλ‘ λλ μ μλ€.
| μ ν | μλ―Έ | μμ |
|---|---|---|
| κΈ°μ΄ μμ± | μν°ν°κ° μ 무μ μΌλ‘ μλ κ°μ§κ³ μλ μμ± | μ΄λ¦, μλ μμΌ, μ£Όμ |
| μΆμΆ μμ± | κΈ°μ΄ μμ±μΌλ‘λΆν° κ³μ°, μ§κ³, κ°κ³΅ν΄μ μ»μ μ μλ μμ± | μ΄κΈμ‘, νκ· μ μ, λμ κΈμ‘ |
| μ€κ³ μμ± | μ€μ μ 무μλ μμ§λ§ μμ€ν ν¨μ¨μ μν΄ μ€κ³μκ° λΆμ¬νλ μμ± | μλ², μ½λ, μνκ° |
μΆμΆ μμ±κ³Ό μ€κ³ μμ±μ νΈλ¦¬νμ§λ§ λ°μ΄ν° μ€λ³΅κ³Ό λ¬΄κ²°μ± λ¬Έμ λ₯Ό λ§λ€ μ μλ€. λ°λΌμ λ¨μν μ‘°νκ° νΈνλ€λ μ΄μ λ§μΌλ‘ μΆκ°ν기보λ€λ, μ ν©μ±μ μ μ§ν λ°©λ²κΉμ§ ν¨κ» μ€κ³ν΄μΌ νλ€.
2.2 λ°μ΄ν° λͺ¨λΈλ§ κ³Όμ
λ°μ΄ν° λͺ¨λΈλ§μ λ³΄ν΅ λ€μ νλ¦μΌλ‘ μ§νλλ€.
- μ 무 μꡬμ¬ν λΆμ
- ν΅μ¬ μν°ν° λμΆ
- μν°ν° κ° κ΄κ³ μ μ
- μμ± μ μ
- μλ³μ μ μ
- μ κ·ν μν
- 물리 λͺ¨λΈ λ³ν
- μ±λ₯ μꡬμ¬νμ λ°λ₯Έ λ°μ κ·ν κ²ν
3. μνΌνμ κ³Ό μλΈνμ
μνΌνμ κ³Ό μλΈνμ μ κ³΅ν΅ μμ±κ³Ό κ°λ³ μμ±μ λΆλ¦¬ν΄μ νννλ λͺ¨λΈλ§ λ°©μμ΄λ€. μνΌνμ μ κ³΅ν΅ μμ±μ κ°μ§λ μμ μν°ν°μ΄κ³ , μλΈνμ μ νΉμ μ νμλ§ νμν μμ±μ κ°μ§λ νμ μν°ν°λ€.
μλ₯Ό λ€μ΄ μνμ΄λΌλ κ³΅ν΅ κ°λ
μλμ μ¨λΌμΈμν, μ€νλΌμΈμν, B2Bμν κ°μ μ νμ΄ μμ μ μλ€.
μ΄λ μνλͺ
, κ°κ²©, μ¬κ³ μ²λΌ 곡ν΅μΌλ‘ νμν μμ±μ μνμ λκ³ , μ νλ³ μμ±μ κ° μλΈνμ
μ λλ€.
3.1 ν¬ν¨ κ΄κ³ μ μ½μ‘°κ±΄
μλΈνμ κ΄κ³λ₯Ό μ€μ ν μ΄λΈμ λ°μν λλ μ μ½μ‘°κ±΄μ ν΅ν΄ μ΅μ νλμ μ νμ μνλλ‘ κ°μ ν μ μλ€.
CREATE TABLE product (
product_id VARCHAR(10) PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2),
stock INT DEFAULT 0,
online_yn CHAR(1) DEFAULT 'N',
offline_yn CHAR(1) DEFAULT 'N',
b2b_yn CHAR(1) DEFAULT 'N',
CONSTRAINT chk_at_least_one
CHECK (online_yn = 'Y' OR offline_yn = 'Y' OR b2b_yn = 'Y')
);μ μ μ½μ‘°κ±΄μ νλμ μνμ΄ μ¨λΌμΈ, μ€νλΌμΈ, B2B μ€ μ΅μ νλμ μ±λμλ λ°λμ μνλλ‘ λ³΄μ₯νλ€.
4. μ¬κ·μ κ΄κ³
μ¬κ·μ κ΄κ³λ νλμ μν°ν°κ° μκΈ° μμ κ³Ό κ΄κ³λ₯Ό λ§Ίλ ꡬ쑰λ€. κ°μ ν μ΄λΈ μμμ νΉμ νμ FKκ° λ€μ κ°μ ν μ΄λΈμ PKλ₯Ό μ°Έμ‘°νλ€.
λνμ μΈ μμλ μ§μκ³Ό μ§μ μμ¬μ κ΄κ³λ€. μ§μλ κ°μ μ§μ ν μ΄λΈμ μ‘΄μ¬νκ³ , μ§μ μμ¬λ κ°μ μ§μ ν μ΄λΈμ μ‘΄μ¬νλ€.
erDiagram
direction LR
EMPLOYEE ||..o{ EMPLOYEE : "κ°λ
"
EMPLOYEE["μ§μ"] {
int employee_id PK "μ§μλ²νΈ"
int manager_employee_id FK "μ§μμμ¬μ§μλ²νΈ"
string employee_name "μ§μλͺ
"
date hired_at "μ
μ¬μΌ"
}μ¬κ·μ κ΄κ³λ₯Ό μ€κ³ν λλ μ΅μμ λ°μ΄ν°μ FKλ₯Ό NULLλ‘ νμ©ν μ§, λ³λμ λ£¨νΈ λ°μ΄ν°λ₯Ό λμ§ κ°μ κ·μΉλ ν¨κ» μ ν΄μΌ νλ€.
5. 볡ν©ν€μ λ체ν€
μλ³μλ₯Ό μ€κ³ν λλ 볡ν©ν€λ₯Ό μ¬μ©ν μ§, μλ² κΈ°λ°μ λ체ν€λ₯Ό μ¬μ©ν μ§ κ²°μ ν΄μΌ νλ€.
μ€λ¬΄μμλ μλ²ν€ + UNIQUE 볡ν©ν€ ν¨ν΄μ λ§μ΄ μ¬μ©νλ€.
μλ²ν€λ‘ μ°Έμ‘°λ₯Ό λ¨μνκ² λ§λ€κ³ , μ
무μ μΌλ‘ μ€λ³΅λλ©΄ μ λλ μ‘°ν©μ UNIQUE μ μ½μ‘°κ±΄μΌλ‘ 보μ₯νλ λ°©μμ΄λ€.
5.1 볡ν©ν€λ₯Ό κ³ λ €ν λ
볡ν©ν€λ κ΄κ³ μμ²΄κ° μλ³μκ° λλ κ²½μ°μ μ ν©νλ€. νΉν M:N κ΄κ³λ₯Ό ν΄μνκΈ° μν μ€κ° ν μ΄λΈμμ μμ£Ό μ¬μ©νλ€.
- κ΄κ³ μμ²΄κ° ν€μΈ κ²½μ°
- μ€κ° ν μ΄λΈ
- λ³κ²½ κ°λ₯μ±μ΄ κ±°μ μλ κ²½μ°
- μ’μμ, μκ°μ μ², μ£Όλ¬ΈμμΈ κ°μ λ°μ΄ν°
erDiagram
direction LR
MEMBER ||--o{ COURSE_ENROLLMENT : "μ μ²"
COURSE ||--o{ COURSE_ENROLLMENT : "ν¬ν¨"
MEMBER["νμ"] {
int member_id PK "νμλ²νΈ"
string member_name "νμλͺ
"
}
COURSE["κ°μ"] {
int course_id PK "κ°μλ²νΈ"
string course_name "κ°μλͺ
"
}
COURSE_ENROLLMENT["μκ°μ μ²"] {
int member_id PK, FK "νμλ²νΈ"
int course_id PK, FK "κ°μλ²νΈ"
date enrolled_at "μ μ²μΌ"
}5.2 μλ²ν€λ₯Ό κ³ λ €ν λ
μλ²ν€λ λλΆλΆμ μΌλ° μν°ν°μ μ ν©νλ€. μ 무 μμ±μ΄ λ°λ κ°λ₯μ±μ΄ μκ±°λ, μΈλΆ ν μ΄λΈμμ μμ£Ό μ°Έμ‘°λλ ν μ΄λΈμ΄λΌλ©΄ λ체ν€λ₯Ό λλ νΈμ΄ κ΄λ¦¬νκΈ° μ½λ€.
- λλΆλΆμ μΌλ° ν μ΄λΈ
- μλ³ μμ± λ³κ²½ κ°λ₯μ±μ΄ μλ κ²½μ°
- νμ₯ κ°λ₯μ±μ κ³ λ €ν΄μΌ νλ κ²½μ°
- νμ, μ£Όλ¬Έ, κ²μν, μν κ°μ λ°μ΄ν°
6. μ κ·ν
μ κ·νλ 1972λ E. F. Coddκ° μ μν μ΄λ‘ μΌλ‘, λ°μ΄ν°λ₯Ό 체κ³μ μΌλ‘ ꡬ쑰νν΄μ μ€λ³΅μ μ€μ΄κ³ μ΄μνμμ μ κ±°νκΈ° μν λ°©λ²μ΄λ€. μ κ·νλ λ°μ΄ν° 무결μ±μ λμ΄λ λ°©ν₯μ μ€κ³λ€.
6.1 μ κ·νκ° νμν μ΄μ
μ κ·νκ° νμν μ΄μ λ ν¬κ² λ κ°μ§λ€.
- μν°ν°λ₯Ό ꡬμ±νλ μμ± κ° μ€λ³΅μ μ κ±°ν΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ΅μ ννλ€.
- μμ± κ° ν¨μ μ’ μμ± λλ¬Έμ λ°μνλ μ΄μνμμ μ κ±°νλ€.
μ΄μνμμ λ€μ μΈ κ°μ§λ‘ λλ μ μλ€.
| μ΄μνμ | μλ―Έ |
|---|---|
| μ λ ₯ μ΄μ | λΆνμν λ°μ΄ν°κ° μμ΄μΌλ§ μνλ λ°μ΄ν°λ₯Ό μ λ ₯ν μ μλ λ¬Έμ |
| μμ μ΄μ | κ°μ μλ―Έμ λ°μ΄ν°λ₯Ό μ¬λ¬ κ³³μμ λͺ¨λ μμ ν΄μΌ νλ λ¬Έμ |
| μμ μ΄μ | νΉμ λ°μ΄ν°λ₯Ό μμ ν λ 보쑴ν΄μΌ ν μ 보κΉμ§ ν¨κ» μ¬λΌμ§λ λ¬Έμ |
μλ₯Ό λ€μ΄ μ£Όλ¬Έ ν μ΄λΈμ μ ν μ 보κΉμ§ ν¨κ» μ μ₯λμ΄ μλ€λ©΄, μ£Όλ¬Έμ΄ λ°μν΄μΌλ§ μ ν μ 보λ₯Ό λ±λ‘ν μ μλ€. λν μ νμ μ¬κ³ μλμ΄ μ¬λ¬ μ£Όλ¬Έ νμ μ€λ³΅ μ μ₯λμ΄ μλ€λ©΄, μ¬κ³ λ₯Ό λ°κΏ λ μ¬λ¬ νμ λͺ¨λ μμ ν΄μΌ νλ€. νΉμ μ νμ λ§μ§λ§ μ£Όλ¬Έ λ΄μμ μμ νλ©΄ μ ν μ 보κΉμ§ μ¬λΌμ§λ λ¬Έμ λ μκΈΈ μ μλ€.
6.2 μ 1μ κ·ν
μ 1μ κ·νμ λͺ¨λ μμ±μ΄ μμκ°μ κ°μ ΈμΌ νλ€λ κ·μΉμ΄λ€. νλμ 컬λΌμ μ¬λ¬ κ°μ λ£κ±°λ λ°λ³΅ μμ±μ λλ©΄ μ λλ€.
- λͺ¨λ μμ±μ νλμ κ°λ§ κ°μ§λ€.
- 볡μ κ°μ κ°μ§λ μμ±μ λ³λ μν°ν°λ‘ λΆλ¦¬νλ€.
- λ°λ³΅λλ 컬λΌμ νμΌλ‘ μ ννλ€.
6.3 μ 2μ κ·ν
μ 2μ κ·νμ κΈ°λ³Έν€ μ 체μ μ’ μλμ§ μλ μμ±μ λΆλ¦¬νλ λ¨κ³λ€. νΉν 볡ν©ν€λ₯Ό μ¬μ©νλ ν μ΄λΈμμ λΆλΆ μ’ μμ΄ λ°μν μ μλ€.
μλ₯Ό λ€μ΄ μ£Όλ¬Έλ²νΈ + μ νλ²νΈκ° PKμΈ μ£Όλ¬ΈμμΈ ν
μ΄λΈμ μ νλͺ
μ΄ λ€μ΄ μλ€λ©΄, μ νλͺ
μ μ 체 ν€κ° μλλΌ μ νλ²νΈμλ§ μ’
μλλ€.
μ΄ κ²½μ° μ νλͺ
μ μ ν ν
μ΄λΈλ‘ λΆλ¦¬ν΄μΌ νλ€.
6.4 μ 3μ κ·ν
μ 3μ κ·νμ μΌλ° μμ±μ μ’ μλλ μμ±μ λΆλ¦¬νλ λ¨κ³λ€. μ¦, κΈ°λ³Έν€κ° μλ μμ±μ λ€λ₯Έ μμ±μ΄ μ’ μλλ μ΄ν μ’ μμ μ κ±°νλ€.
νμ μμλ λ³΄ν΅ μ 3μ κ·νκΉμ§ μ§νν λ€, μ±λ₯ μꡬμ¬νμ λ°λΌ λ°μ κ·νλ₯Ό κ²ν νλ κ²½μ°κ° λ§λ€.
6.5 BCNF
BCNFλ κ²°μ μκ° ν보ν€κ° μλ κ²½μ°λ₯Ό μ κ±°νλ λ κ°ν μ κ·ν ννλ€. λ€μμ μ£Όμλ³μκ° λ³΅μ‘νκ² μ½ν κ²½μ° μΆκ°λ‘ κ²ν ν μ μλ€.
7. λ°μ κ·ν
λ°μ κ·νλ μ‘°ν μ±λ₯μ λμ΄κ±°λ μ΄μ νΈμμ±μ ν보νκΈ° μν΄ μ κ·νλ ꡬ쑰λ₯Ό μλμ μΌλ‘ μΌλΆ μ€λ³΅μν€λ μ€κ³λ€. μ κ·νκ° λ¬΄κ²°μ±μ μ°μ νλ€λ©΄, λ°μ κ·νλ μ±λ₯κ³Ό μ¬μ©μ±μ μν΄ λ¬΄κ²°μ± κ΄λ¦¬ λΉμ©μ κ°μνλ μ νμ΄λ€.
λ°μ κ·νλ₯Ό μ μ©ν λλ λ°λμ λ€μ μ§λ¬Έμ ν΄μΌ νλ€.
- μ΄λ€ μ‘°ν μ±λ₯ λ¬Έμ κ° μλκ°?
- μ‘°μΈμ μ€μ΄λ κ² μΈμ μΈλ±μ€λ‘ ν΄κ²°ν μ μλκ°?
- μ€λ³΅ λ°μ΄ν°μ μ ν©μ±μ μ΄λ»κ² 보μ₯ν κ²μΈκ°?
- Trigger, κ³μ° 컬λΌ, λ°°μΉ, μ ν리μΌμ΄μ λ‘μ§ μ€ μ΄λ€ λ°©μμΌλ‘ λκΈ°νν κ²μΈκ°?
8. μ»¬λΌ λ°μ κ·ν
μ»¬λΌ λ°μ κ·νλ ν μ΄λΈμ μ μ§νλ, μ‘°ν μ±λ₯μ΄λ 볡ꡬ νΈμμ±μ μν΄ μ»¬λΌμ μΆκ°νλ λ°©μμ΄λ€.
λνμ μΈ μ νμ λ€μκ³Ό κ°λ€.
- μ€λ³΅ μ»¬λΌ μΆκ°
- νμ μ»¬λΌ μΆκ°
- μ΄λ ₯ μ»¬λΌ μΆκ°
- PK μ»¬λΌ λΆλ¦¬
- λ°μ΄ν° 볡ꡬλ₯Ό μν μ»¬λΌ μΆκ°
8.1 μ€λ³΅ μ»¬λΌ μΆκ°
μ§μ λͺ μ μ 무μ§μ ν μ΄λΈμ μ‘΄μ¬νμ§λ§, μ¬μμ 보λ₯Ό μ‘°νν λλ§λ€ μ§μ λͺ κΉμ§ μμ£Ό νμνλ€λ©΄ μ¬μμ 보μ μ§μ λͺ μ μ€λ³΅ μ μ₯νλ λ°©μμ κ²ν ν μ μλ€.
μ κ·νλ ꡬ쑰λ λ€μκ³Ό κ°λ€.
erDiagram
direction LR
BRANCH ||..o{ EMPLOYEE_INFO : "μμ"
BRANCH["μ
무μ§μ "] {
int branch_id PK "μ§μ λ²νΈ"
string branch_name "μ§μ λͺ
"
string location "μ§μ μμΉ"
string phone_number "μ νλ²νΈ"
}
EMPLOYEE_INFO["μ¬μμ 보"] {
int employee_id PK "μ¬μλ²νΈ"
string employee_name "μ΄λ¦"
string phone_number "μ°λ½μ²"
int branch_id FK "μ§μ λ²νΈ"
}λ°μ κ·νλ₯Ό μ μ©νλ©΄ μ¬μμ 보μ μ§μ λͺ μ μ€λ³΅ μ μ₯νλ€.
erDiagram
direction LR
BRANCH ||..o{ EMPLOYEE_INFO : "μμ"
BRANCH["μ
무μ§μ "] {
int branch_id PK "μ§μ λ²νΈ"
string branch_name "μ§μ λͺ
"
string location "μ§μ μμΉ"
string phone_number "μ νλ²νΈ"
}
EMPLOYEE_INFO["μ¬μμ 보"] {
int employee_id PK "μ¬μλ²νΈ"
string employee_name "μ΄λ¦"
string phone_number "μ°λ½μ²"
int branch_id FK "μ§μ λ²νΈ"
string branch_name "μ§μ λͺ
"
}μ΄λ κ² νλ©΄ μ‘°ν μ μ‘°μΈμ μ€μΌ μ μμ§λ§, μ 무μ§μ μ μ§μ λͺ μ΄ λ³κ²½λ λ μ¬μμ 보μ μ§μ λͺ λ ν¨κ» κ°±μ ν΄μΌ νλ€.
8.2 νμ μ»¬λΌ μΆκ°
μ£Όλ¬Έ μ΄κΈμ‘μ μ£Όλ¬ΈμμΈμ μλκ³Ό μ ν λ¨κ°λ₯Ό ν΅ν΄ κ³μ°ν μ μλ€. μμΉμ μΌλ‘λ μ‘°ν μ κ³μ°ν μ μμ§λ§, λλΆλΆμ μ‘°νμμ μ΄κΈμ‘μ΄ νμνκ³ κ³μ° λΉμ©μ΄ ν¬λ€λ©΄ μ£Όλ¬Έ ν μ΄λΈμ μ΄κΈμ‘μ μ μ₯ν μ μλ€.
μ κ·νλ ꡬ쑰λ λ€μκ³Ό κ°λ€.
erDiagram
direction LR
ORD ||--o{ ORDER_PRODUCT : "ν¬ν¨"
PRODUCT ||--o{ ORDER_PRODUCT : "μ£Όλ¬Έλ¨"
ORD["μ£Όλ¬Έ"] {
int order_id PK "μ£Όλ¬Έλ²νΈ"
date ordered_at "μ£Όλ¬Έλ μ§"
}
ORDER_PRODUCT["μ£Όλ¬Έμ νμμΈ"] {
int order_id PK, FK "μ£Όλ¬Έλ²νΈ"
int product_id PK, FK "μ νλ²νΈ"
int quantity "μλ"
}
PRODUCT["μ ν"] {
int product_id PK "μ νλ²νΈ"
string product_name "μ νμ΄λ¦"
int unit_price "λ¨κ°"
}λ°μ κ·νλ₯Ό μ μ©νλ©΄ μ£Όλ¬Έ ν μ΄λΈμ μ΄κΈμ‘ 컬λΌμ μΆκ°νλ€.
erDiagram
direction LR
ORD ||--o{ ORDER_PRODUCT : "ν¬ν¨"
PRODUCT ||--o{ ORDER_PRODUCT : "μ£Όλ¬Έλ¨"
ORD["μ£Όλ¬Έ"] {
int order_id PK "μ£Όλ¬Έλ²νΈ"
date ordered_at "μ£Όλ¬Έλ μ§"
int total_amount "μ΄κΈμ‘"
}
ORDER_PRODUCT["μ£Όλ¬Έμ νμμΈ"] {
int order_id PK, FK "μ£Όλ¬Έλ²νΈ"
int product_id PK, FK "μ νλ²νΈ"
int quantity "μλ"
}
PRODUCT["μ ν"] {
int product_id PK "μ νλ²νΈ"
string product_name "μ νμ΄λ¦"
int unit_price "λ¨κ°"
}νμ 컬λΌμ μ μ₯ν λλ κ³μ°λ 컬λΌμ μ¬μ©ν΄ μ ν©μ±μ ν보ν μ μλ€.
ALTER TABLE emp ADD (totalsum NUMBER)
GENERATED ALWAYS AS (sal + NVL(comm, 0));8.3 λμ ν© μ»¬λΌ μ£Όμ
곡μ¬λΉ λμ μ²λΌ ν λ¨μλ‘ λμ ν©μ μ μ₯νλ λ°©μμ RDB μ€κ³μμλ νΌνλ κ²μ΄ μ’λ€. νΉμ μ€κ° νμ 곡μ¬λΉκ° λ³κ²½λλ©΄ μ΄ν λͺ¨λ λμ κ°μ λ€μ κ³μ°ν΄μΌ νκΈ° λλ¬Έμ΄λ€.
erDiagram
direction LR
CONSTRUCTION_WORK["곡μ¬λ΄μ"] {
int work_id PK "곡μ¬λ²νΈ"
date worked_at "곡μ¬μΌμ"
int cost "곡μ¬λΉ"
int accumulated_cost "곡μ¬λΉλμ "
}λμ ν©μ μ‘°ν μ μλμ° ν¨μλ μ§κ³ μΏΌλ¦¬λ‘ κ³μ°νλ νΈμ΄ μμ νλ€.
8.4 μ΅κ·Ό λ±λ‘ μ¬λΆ 컬λΌ
μ§μμ μ°¨λ μ΄λ ₯μ κ΄λ¦¬ν λ μ΅κ·Ό λ±λ‘ μ°¨λλ§ μμ£Ό μ‘°ννλ€λ©΄, λ§€λ² Top N Queryλ₯Ό μ¬μ©νλ λμ μ΅κ·Όλ±λ‘μ¬λΆ 컬λΌμ λ μ μλ€.
μ μ°¨λ μ΄λ ₯μ΄ λ±λ‘λλ©΄ κΈ°μ‘΄ μ΅κ·Ό κ°μ NμΌλ‘ λ°κΎΈκ³ , μ μ΄λ ₯μ Yλ‘ μ μ₯νλ€.
erDiagram
direction LR
COMPANY_EMPLOYEE ||..o{ EMPLOYEE_CAR_HISTORY : "보μ μ΄λ ₯"
COMPANY_EMPLOYEE["νμ¬μ§μ"] {
int employee_id PK "μ§μλ²νΈ"
string employee_name "μ§μλͺ
"
date hired_at "μ
μ¬μΌ"
}
EMPLOYEE_CAR_HISTORY["μ§μμ°¨λμ΄λ ₯"] {
int car_history_id PK "μ°¨λμ΄λ ₯λ²νΈ"
int employee_id FK "μ§μλ²νΈ"
string car_number "μ°¨λλ²νΈ"
string car_year "μ°μ"
string car_type "μ°¨μ’
"
date registered_at "λ±λ‘μΌμ"
string latest_yn "μ΅κ·Όλ±λ‘μ¬λΆ"
}μ΄ λ°©μλ μ‘°ν μ±λ₯μ μ’μμ§μ§λ§, μ΅μ μ¬λΆλ₯Ό κ°±μ νλ λ‘μ§μ΄ λ°λμ νμνλ€.
8.5 PK λΆλ¦¬ μ»¬λΌ λ°μ κ·ν
μ°¨λλ²νΈ μμ μ§μ μ λ³΄κ° ν¬ν¨λμ΄ μλλΌλ, μ§μλ³ μ‘°νκ° μμ£Ό λ°μνλ€λ©΄ μ§μμ λ³λ 컬λΌμΌλ‘ λΆλ¦¬ν μ μλ€. μ΄λ PKμ ν¬ν¨λ μλ―Έλ₯Ό μ‘°ν μ±λ₯μ μν΄ μ»¬λΌμΌλ‘ λΆλ¦¬νλ λ°μ κ·νλ€.
erDiagram
direction LR
CAR["μ°¨λ"] {
string car_number PK "μ°¨λλ²νΈ"
string car_type "μ°¨μ’
"
string car_year "μ°μ"
string color "μμ"
}
CAR_WITH_REGION["μ°¨λ2"] {
string car_number PK "μ°¨λλ²νΈ"
string car_type "μ°¨μ’
"
string car_year "μ°μ"
string color "μμ"
string region "μ§μ"
}8.6 λ°μ΄ν° 볡ꡬλ₯Ό μν μ»¬λΌ μΆκ°
νμ¬ μ£Όμλ§ μ μ₯νλ©΄ μ£Όμ λ³κ²½ μ΄λ ₯μ 볡ꡬνκΈ° μ΄λ ΅λ€. μ΄μ κ°μ 보κ΄ν΄μΌ νλ μꡬμ¬νμ΄ μλ€λ©΄ μ΄μ μ£Όμ κ°μ 컬λΌμ μΆκ°ν μ μλ€.
erDiagram
direction LR
CUSTOMER["κ³ κ°"] {
int customer_id PK "κ³ κ°λ²νΈ"
string customer_name "κ³ κ°λͺ
"
string grade "λ±κΈ"
string address "μ£Όμ"
string previous_address "μ΄μ μ£Όμ"
}λ¨, μ΄λ ₯μ΄ μ¬λ¬ 건 νμνλ€λ©΄ μ΄μ μ£Όμ μ»¬λΌ νλλ₯Ό μΆκ°νκΈ°λ³΄λ€ μ£Όμ μ΄λ ₯ ν
μ΄λΈμ λ³λλ‘ λλ λ°©μμ΄ λ μ μ νλ€.
9. ν μ΄λΈ λ°μ κ·ν
ν μ΄λΈ λ°μ κ·νλ 컬λΌμ΄ μλλΌ ν μ΄λΈ ꡬ쑰 μ체λ₯Ό μ‘°μ νλ λ°©μμ΄λ€.
λνμ μΈ λ°©μμ λ€μκ³Ό κ°λ€.
- κ΄κ³ λ³ν©
- ν μ΄λΈ λΆν
- μ€λ³΅ ν μ΄λΈ μΆκ°
- ν΅κ³ ν μ΄λΈ μΆκ°
- μ΄λ ₯ ν μ΄λΈ μΆκ°
- λΆλΆ ν μ΄λΈ μΆκ°
9.1 μνΌνμ κ³Ό μλΈνμ μ μ§
μνΌνμ κ³Ό μλΈνμ μ κ·Έλλ‘ λΆλ¦¬νλ©΄ κ³΅ν΅ μμ±κ³Ό κ°λ³ μμ±μ λͺ νν λλ μ μλ€.
erDiagram
direction LR
STUDENT ||..o| UNDERGRADUATE : "ꡬ체ν"
STUDENT ||..o| GRADUATE : "ꡬ체ν"
STUDENT["νμ"] {
int student_id PK "νλ²"
string student_name "μ΄λ¦"
date birth_date "μλ
μμΌ"
string phone_number "μ νλ²νΈ"
}
UNDERGRADUATE["νλΆμ"] {
int student_id PK, FK "νλ²"
int grade "νλ
"
string student_club "νν"
}
GRADUATE["λνμμ"] {
int student_id PK, FK "νλ²"
string advisor "μ§λκ΅μ"
string research_area "μ°κ΅¬λΆμΌ"
}μ΄ λ°©μμ μ κ·ν κ΄μ μμ λͺ ννμ§λ§, νμμ μ 체 μ 보λ₯Ό μ‘°νν λ μ‘°μΈμ΄ νμνλ€.
9.2 1:1 One To One
μλΈνμ λ³ ν μ΄λΈμ κ³΅ν΅ μμ±κΉμ§ λͺ¨λ ν¬ν¨νλ λ°©μμ΄λ€. νλΆμκ³Ό λνμμμ μμ ν λ³λ ν μ΄λΈλ‘ κ΄λ¦¬νλ€.
erDiagram
direction LR
UNDERGRADUATE["νλΆμ"] {
int student_id PK "νλ²"
string student_name "μ΄λ¦"
date birth_date "μλ
μμΌ"
string phone_number "μ νλ²νΈ"
int grade "νλ
"
string student_club "νν"
}
GRADUATE["λνμμ"] {
int student_id PK "νλ²"
string student_name "μ΄λ¦"
date birth_date "μλ
μμΌ"
string phone_number "μ νλ²νΈ"
string advisor "μ§λκ΅μ"
string research_area "μ°κ΅¬λΆμΌ"
}μ νλ³ μ‘°νλ λ¨μνμ§λ§, κ³΅ν΅ μμ±μ΄ μ€λ³΅λλ€.
9.3 All In One Single Type
λͺ¨λ μμ±μ νλμ ν μ΄λΈμ λ£κ³ νμ μ νμ λ°λΌ νμν 컬λΌλ§ μ¬μ©νλ λ°©μμ΄λ€.
erDiagram
direction LR
STUDENT["νμ"] {
int student_id PK "νλ²"
string student_type "νμμ ν"
string student_name "μ΄λ¦"
date birth_date "μλ
μμΌ"
string phone_number "μ νλ²νΈ"
int grade "νλ
"
string student_club "νν"
string advisor "μ§λκ΅μ"
string research_area "μ°κ΅¬λΆμΌ"
}μ‘°μΈμ΄ μμ΄ μ‘°νκ° λ¨μνμ§λ§, νΉμ μ νμλ§ νμν 컬λΌμ NULLμ΄ λ§μμ§ μ μλ€.
10. μ 리
μ κ·νλ λ°μ΄ν° μ€λ³΅κ³Ό μ΄μνμμ μ€μ΄κΈ° μν κΈ°λ³Έ μμΉμ΄λ€. λ°μ κ·νλ μ κ·ν μμΉμ μΌλΆ κΉ¨λλΌλ μ‘°ν μ±λ₯μ΄λ μ΄μ νΈμμ±μ ν보ν΄μΌ ν λ μ ννλ μ€κ³λ€.
μ€μν κ²μ λ°μ κ·νλ₯Ό μ μ©ν λλ§λ€ λ°μ΄ν° 무결μ±μ μ΄λ»κ² μ μ§ν κ²μΈμ§ ν¨κ» κ²°μ νλ κ²μ΄λ€. μ€λ³΅ 컬λΌ, νμ 컬λΌ, μ΅κ·Ό μ¬λΆ 컬λΌμ λͺ¨λ μ±λ₯μλ λμμ΄ λ μ μμ§λ§, κ°±μ λ‘μ§μ΄ μμΌλ©΄ λ°μ΄ν° μ ν©μ±μ κΉ¨λ¨λ¦΄ μ μλ€.
λ°λΌμ λͺ¨λΈλ§ λ¨κ³μμλ μ κ·νλ₯Ό λ¨Όμ μ μ©νκ³ , μ€μ μ‘°ν ν¨ν΄κ³Ό μ±λ₯ μꡬμ¬νμ νμΈν λ€ νμν λΆλΆμλ§ λ°μ κ·νλ₯Ό μ μ©νλ κ²μ΄ μ’λ€.
KEEP READING
Related writing

Woojin
ꡬ쑰μ μΌλ‘ μ¬κ³ νκ³ , κ·Όκ±° μκ² κ΅¬ννκΈ° μν΄ κΈ°λ‘ν©λλ€.