ER 몚ëžë§(ER Modeling)
ER 몚ëžë§(ER Modeling)¶
ìŽì : êŽê³ ëì | ë€ì: íšì ì¢ ìì±
1976ë Peter ChenìŽ ìê°í ê°ì²Ž-êŽê³(Entity-Relationship, ER) 몚ëžì ê°ë ì ë°ìŽí°ë² ìŽì€ ì€ê³ì ê°ì¥ ë늬 ì¬ì©ëë ì ê·Œë²ì ëë€. í¹ì DBMSì 묎êŽíê² ëì ìì€ì ì¶ìíë¡ ë°ìŽí° 구조륌 íííêž° ìí ê·žëíœ íêž°ë²ì ì ê³µí©ëë€. ìŽ ê°ìììë ER 몚ëž, í¥ìë ë²ì (EER), ê·žëŠ¬ê³ ER ë€ìŽìŽê·žëšì êŽê³ ì€í€ë§ë¡ ë³ííë 첎ê³ì ìž ìê³ ëŠ¬ìŠì ë€ë£¹ëë€.
목찚¶
- ê°ë ì ì€ê³ ê°ì
- ê°ì²Ž íì 곌 ê°ì²Ž ì§í©
- ìì±
- êŽê³ íì
- 칎ëëëŠ¬í° ì ìœì¡°ê±Ž
- ì°žì¬ ì ìœì¡°ê±Ž
- ìœí ê°ì²Ž
- í¥ìë ER (EER) 몚ëž
- ER-êŽê³í ë§€í ìê³ ëŠ¬ìŠ
- ì€ê³ ì¬ë¡ ì°êµ¬: ëí ë°ìŽí°ë² ìŽì€
- ìŒë°ì ìž íšì 곌 ëªšë² ì¬ë¡
- ì°ìµ 묞ì
1. ê°ë ì ì€ê³ ê°ì¶
ë°ìŽí°ë² ìŽì€ ì€ê³ë ì구ì¬íìì 구íê¹ì§ 구조íë íë¡ìžì€ë¥Œ ë°ëŠ ëë€:
ââââââââââââââââââââ
â ì구ì¬í â "ìŽë€ ë°ìŽí°ê° íì? ìŽë€ 쿌늬?"
â ë¶ì â
ââââââââââ¬ââââââââââ
â
âŒ
ââââââââââââââââââââ
â ê°ë
ì â ER ë€ìŽìŽê·žëš (DBMS ë
늜ì )
â ì€ê³ â â ìŽ ê°ì
ââââââââââ¬ââââââââââ
â
âŒ
ââââââââââââââââââââ
â ë
ŒëЬì â êŽê³ ì€í€ë§ (í
ìŽëž, í€, ì ìœì¡°ê±Ž)
â ì€ê³ â â ER-êŽê³í ë§€í
ââââââââââ¬ââââââââââ
â
âŒ
ââââââââââââââââââââ
â 묌늬ì â ìžë±ì€, ì ì¥ì, íí°ì
ë, SQL DDL
â ì€ê³ â
ââââââââââ¬ââââââââââ
â
âŒ
ââââââââââââââââââââ
â 구í ë° â CREATE TABLE, INSERT, ì ì¥ íë¡ìì
â íë â
ââââââââââââââââââââ
ê°ë ì ì€ê³ë¥Œ íë ìŽì ë?¶
- ìì¬ìíµ: ER ë€ìŽìŽê·žëšì ë¹êž°ì ìŽíŽêŽê³ìë ìŽíŽ ê°ë¥
- ì¶ìí: 구íì ê±±ì íì§ ìê³ ë°ìŽí° 구조ì ì§ì€
- ì íì±: SQLì ìì±íêž° ì ìŽêž°ì ì€ê³ ì€ë¥ í¬ì°©
- 묞ìí: ë°ìŽí° 몚ëžì ìŽììë ì²ì¬ì§ ìí
ER ë€ìŽìŽê·žëš íêž°ë²¶
ìŽ ê°ìììë ìëì Chen íêž°ë²(Chen notation) (êµê³Œììì ê°ì¥ ìŒë°ì )ì ì¬ì©í©ëë€:
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â êž°íž ë²ë¡ â
â â
â âââââââââââ ê°ì²Ž íì
(ê°í) â
â â NAME â â
â âââââââââââ â
â â
â âââââââââââ ê°ì²Ž íì
(ìœí) â
â â NAME â â
â âââââââââââ â
â â
â â ëë ââââ êŽê³ íì
â
â <WORKS_FOR> â
â â
â (ìì±) ìì± (íì) â
â ((ì ëë)) ì ë ìì± (ì ì íì) â
â {ë€ì€ê°} ë€ì€ê° ìì± (ìŽì€ íì) â
â â
â âââ ëšìŒì ë¶ë¶ ì°žì¬ â
â âââ ìŽì€ì ì 첎 ì°žì¬ â
â â
â 1, N, M 칎ëëëŠ¬í° íì â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
2. ê°ì²Ž íì 곌 ê°ì²Ž ì§í©¶
ê°ì²Ž¶
ê°ì²Ž(Entity)ë ë€ë¥ž ê°ì²Žì êµ¬ë³ ê°ë¥í íì€ ìžê³ì "ì¬ë¬Œ" ëë ê°ì²Žì ëë€. 묌늬ì (ì¬ë, ì± ) ëë ê°ë ì (곌ì , ìí ê³ì¢)ìŒ ì ììµëë€.
ê°ì²Ž íì ¶
ê°ì²Ž íì (Entity Type)ì ëìŒí ìì±ì ê°ì§ ê°ì²Žì ì§í©ì ì ìí©ëë€. íŽëì€ë í í늿곌 ê°ìµëë€.
ê°ì²Ž ì§í©¶
ê°ì²Ž ì§í©(Entity Set) (ëë ê°ì²Ž ìžì€íŽì€ ì§í©)ì í¹ì ìì ì í¹ì íì ì 몚ë ê°ì²Ž ì§í©ì ëë€. íŽëì€ì 몚ë ê°ì²Ž ì§í©ê³Œ ê°ìµëë€.
ê°ì²Ž íì
: STUDENT
(구조 ì ì: sid, name, year, dept)
ê°ì²Ž ì§í©: íì¬ íì ê°ì²Ž ì§í©:
{(S001, Alice, 3, CS), (S002, Bob, 2, CS), ...}
ê°ì²Ž (ìžì€íŽì€): ëšìŒ íì, ì: (S001, Alice, 3, CS)
ER ë€ìŽìŽê·žëšììì íêž°ë²¶
âââââââââââââ
â STUDENT â
âââââââââââââ
/ | | \
(sid) (name)(year)(dept)
[PK]
3. ìì±¶
ìì±ì ê°ì²Ž íì ì í¹ì±ì ì€ëª í©ëë€. ì¬ë¬ ì¢ ë¥ê° ììµëë€:
ëšì(ìì) ìì±¶
ëšì ìì±ì ë ìì êµ¬ì± ììë¡ ëë ì ììµëë€.
ì:
- student_id: "S001"
- year: 3
- gpa: 3.85
ë³µí© ìì±¶
ë³µí© ìì±ì ë ìì íì ìì±ìŒë¡ ëë ì ììµëë€.
(name)
/ \
(first_name) (last_name)
(address)
/ | \
(street) (city) (zip_code)
|
(state) (country)
ë€ì€ê° ìì±¶
ë€ì€ê° ìì±ì ëšìŒ ê°ì²Žì ëíŽ ì¬ë¬ ê°ì ê°ì§ ì ììµëë€.
{phone_numbers} íìì 0, 1 ëë ì¬ë¬ ì íë²ížë¥Œ ê°ì§ ì ìì.
{skills} ì§ìì ì¬ë¬ êž°ì ì ê°ì§ ì ìì.
{email_addresses} ì¬ëì ì¬ë¬ ìŽë©ìŒ 죌ì륌 ê°ì§ ì ìì.
íêž°ë²: ìŽì€ íì ëë ì€êŽíž {ìì±}
ì ë ìì±¶
ì ë ìì±ì ê°ì ë€ë¥ž ìì±ìì ê³ì°í ì ììµëë€.
((age)) ìë
ììŒê³Œ íì¬ ë ì§ìì ì ë
((total_credits)) ë±ë¡ 곌목ì íì í©ì°ìì ì ë
((employee_count)) ë¶ìì ì§ì ììì ì ë
íêž°ë²: ì ì íì ëë ìŽì€ êŽíž ((ìì±))
í€ ìì±¶
í€ ìì±ì ê°ì²Ž ì§í©ìì ê° ê°ì²Žë¥Œ ê³ ì íê² ìë³í©ëë€.
STUDENTì 겜ì°: student_id (ë€ìŽìŽê·žëšìì ë°ì€)
COURSEì 겜ì°: course_id
EMPLOYEEì 겜ì°: employee_id ëë ssn
íêž°ë²: ë°ì€ ì¹ ìì± ìŽëŠ
ë³µí© í€¶
ëšìŒ ìì±ìŒë¡ ê°ì²Žë¥Œ ê³ ì íê² ìë³í ì ìì ë, ìì± ì¡°í©ìŽ í€ë¥Œ íì±í©ëë€.
ì: ENROLLMENTì (student_id, course_id, semester)ë¡ ìë³ë ì ìì
NULL ê°¶
ìì±ìŽ ë€ì곌 ê°ì ê²œì° NULL ê°ì ê°ì§ ì ììµëë€: - ê°ìŽ ì ì© ë¶ê°ë¥(ì§ì ìííž ë²íž) - ê°ìŽ ì ì ìì(ì ê³µëì§ ìì ì íë²íž)
ìì± ì윶
ìì± ì í:
ââââââââââââââââ
ââââââââââââââââââºâ ëšì â
â â (ìì) â
ââââââââââââ â ââââââââââââââââ
â 구조 ââââââââ€
ââââââââââââ â ââââââââââââââââ
ââââââââââââââââââºâ ë³µí© â
â (ëë ì ìì)â
ââââââââââââââââ
ââââââââââââââââ
ââââââââââââââââââºâ ëšìŒê° â
â ââââââââââââââââ
ââââââââââââ â
â 칎ëë늬í°ââââââ€
ââââââââââââ â ââââââââââââââââ
ââââââââââââââââââºâ ë€ì€ê° â
â {attr} â
ââââââââââââââââ
ââââââââââââââââ
ââââââââââââââââââºâ ì ì¥ëš â
â ââââââââââââââââ
ââââââââââââ â
â ì¶ì² ââââââââ€
ââââââââââââ â ââââââââââââââââ
ââââââââââââââââââºâ ì ëëš â
â ((attr)) â
ââââââââââââââââ
몚ë ìì± ì íìŽ í¬íšë ER ë€ìŽìŽê·žëš¶
âââââââââââââ
â EMPLOYEE â
âââââââââââââ
/ | | | \ \
/ | | | \ \
/ | | | \ \
(emp_id) (name) | (hire_date) {phone} ((age))
[PK] / \ | ë€ì€ê° ì ëëš
/ \ (salary)
(first) (last)
ë³µí©
emp_id: ëšì, í€
name: ë³µí© (first + last)
salary: ëšì, ëšìŒê°
hire_date: ëšì, ì ì¥ëš
phone: ëšì, ë€ì€ê°
age: ëšì, ì ëëš (birth_dateìì)
4. êŽê³ íì ¶
êŽê³ íì (Relationship Type)ì ê°ì²Ž íì ê°ì ì°êŽì ì ìí©ëë€. êŽê³ ìžì€íŽì€(Relationship Instance)ë í¹ì ê°ì²Ž ìžì€íŽì€ ê°ì ì°êŽì ëë€.
ìŽí êŽê³¶
ìŽí êŽê³(Binary Relationship)ë ë ê°ì²Ž íì ì í¬íší©ëë€ (ê°ì¥ ìŒë°ì ìž ê²œì°).
ââââââââââââ ââââââââââââ
â STUDENT âââ<ENROLLS>âââ COURSE â
ââââââââââââ ââââââââââââ
êŽê³ ìžì€íŽì€:
(Alice, CS101), (Alice, CS301), (Bob, CS101), ...
ìŒí êŽê³¶
ìŒí êŽê³(Ternary Relationship)ë ìž ê°ì²Ž íì ì í¬íší©ëë€.
ââââââââââââ
â SUPPLIER â
ââââââââââââ
â
â
â SUPPLIES â
/ \
â â
ââââââââââââ ââââââââââââ
â PART â â PROJECT â
ââââââââââââ ââââââââââââ
êŽê³ ìžì€íŽì€: (Supplier1, PartA, ProjectX)
ì믞: Supplier1ìŽ PartA륌 ProjectXì ê³µêž
ì°žê³ : ìŒí êŽê³ë ì 볎 ìì€ ììŽ íì ìž ê°ì
ìŽí êŽê³ë¡ ë¶íŽí ì ìì!
ì¬ê·(ëší) êŽê³¶
ì¬ê· êŽê³(Recursive Relationship)ë ê°ì²Ž íì ì ìì 곌 ì°êŽìíµëë€.
ââââââââââââ
â EMPLOYEE â
ââââââ¬ââââââ
â â
â â
(ê°ë
ì)
â â
ââââââ
<SUPERVISES>
êŽê³ ìžì€íŽì€: (Manager_Alice, Employee_Bob)
ì믞: Aliceê° Bobì ê°ë
ìí ìŽëŠìŽ ì€ì:
EMPLOYEE (ê°ë
ìë¡) ââ<SUPERVISES>ââ EMPLOYEE (íŒê°ë
ìë¡)
êŽê³ ìì±¶
êŽê³ë ì첎 ìì±ì ê°ì§ ì ììµëë€:
ââââââââââââ ââââââââââââ
â STUDENT âââââ<ENROLLS_IN>âââââ COURSE â
ââââââââââââ â ââââââââââââ
(grade)
(semester)
ì±ì 곌 íêž°ë êŽê³ì ìíë©°, ìŽë ê°ì²Žìë ìíì§ ìì.
íìì í¹ì 곌목ì ëí ì±ì ì ê°ì§ë©°, ìŒë°ì ìŒë¡ ê°ì§ì§ ìì.
êŽê³ì ì°šì¶
êŽê³ íì ì ì°šì(Degree)ë ì°žì¬íë ê°ì²Ž íì ì ìì ëë€.
ì°šì 1: ëší (ì¬ê·) EMPLOYEEê° EMPLOYEE륌 ê°ë
ì°šì 2: ìŽí STUDENTê° COURSEì ë±ë¡
ì°šì 3: ìŒí SUPPLIERê° PART륌 PROJECTì ê³µêž
ì°šì n: ní (ë묟) ìŒë°ì ìŒë¡ ìŽíìŒë¡ ë¶íŽëš
5. 칎ëëëŠ¬í° ì ìœì¡°ê±Ž¶
칎ëëëŠ¬í° ì ìœì¡°ê±Žì ê°ì²Žê° ì°žì¬í ì ìë êŽê³ ìžì€íŽì€ì ì륌 ì§ì í©ëë€. ìŽí êŽê³ì 겜ì°, ìž ê°ì§ Ʞ볞 ë¹ìšì 1:1, 1:N, M:Nì ëë€.
ìŒëìŒ (1:1)¶
Aì ê° ê°ì²Žë ìµë íëì B ê°ì²Žì ì°êŽëë©°, ê·ž ë°ëë ë§ì°¬ê°ì§ì ëë€.
ââââââââââââ 1 1 ââââââââââââ
â EMPLOYEE âââââ<MANAGES>âââââ DEPARTMENTâ
ââââââââââââ ââââââââââââ
ê° ì§ìì ìµë íëì ë¶ì륌 êŽëЬ.
ê° ë¶ìë ìµë íëì ì§ìì ìíŽ êŽëЬëš.
ìžì€íŽì€:
Alice ââââ CS Department
Bob ââââ EE Department
Carol ââââ (êŽëЬíë ë¶ì ìì)
Dave ââââ ME Department
ë§€í:
A: Alice âââ⺠CS
B: Bob âââ⺠EE
D: Dave âââ⺠ME
ìŒëë€ (1:N)¶
Aì ê° ê°ì²Žë Bì ì¬ë¬ ê°ì²Žì ì°êŽë ì ìì§ë§, Bì ê° ê°ì²Žë ìµë íëì A ê°ì²Žì ì°êŽë©ëë€.
ââââââââââââ 1 N ââââââââââââ
âDEPARTMENTâââââ<HAS>âââââ EMPLOYEE â
ââââââââââââ ââââââââââââ
ë¶ìë ì¬ë¬ ì§ìì ê°ì§.
ì§ìì ìµë íëì ë¶ìì ìíš.
ìžì€íŽì€:
CS âââââ¬ââââ Alice
âââââ Bob
âââââ Eve
EE âââââââ Carol
ME âââââââ Dave
ë€ëë€ (M:N)¶
Aì ê° ê°ì²Žë Bì ì¬ë¬ ê°ì²Žì ì°êŽë ì ìê³ , Bì ê° ê°ì²Žë Aì ì¬ë¬ ê°ì²Žì ì°êŽë ì ììµëë€.
ââââââââââââ M N ââââââââââââ
â STUDENT âââââ<ENROLLS>âââââ COURSE â
ââââââââââââ ââââââââââââ
íìì ì¬ë¬ 곌목ì ë±ë¡í ì ìì.
곌목ì ì¬ë¬ íìì ê°ì§ ì ìì.
ìžì€íŽì€:
Alice âââ¬ââ CS101
âââ CS301
âââ MA101
Bob âââ¬ââ CS101
âââ CS301
Carol âââ¬ââ EE201
âââ CS101
ER ë€ìŽìŽê·žëšììì 칎ëëëŠ¬í°¶
ë ê°ì§ 죌ì êŽë¡ê° ììµëë€:
êŽë¡ 1: Chenì íêž°ë² (ì ìì ë ìŽëž)
ââââââââââââ 1 ââââââââââââ N ââââââââââââ
âDEPARTMENTâââââââââ<WORKS_IN>âââââââââ EMPLOYEE â
ââââââââââââ ââââââââââââ
êŽë¡ 2: (ìµì,ìµë) íêž°ë² (ë ì ííš)
ââââââââââââ (1,1) ââââââââââââââ (1,N) ââââââââââââ
â EMPLOYEE âââââââââââ<WORKS_IN>âââââââââââDEPARTMENTâ
ââââââââââââ ââââââââââââ
ìœêž°:
ì§ìì (1,1) ë¶ììì ìŒíš = ì íí íëì ë¶ì
ë¶ìë (1,N) ì§ìì ê°ì§ = í ëª
ìŽìì ì§ì
칎ëëëŠ¬í° ì ìœì¡°ê±Ž ì윶
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 칎ëëëŠ¬í° ë¹ìš â
â â
â 1:1 ââ ê° Aë ìµë 1ê°ì Bì ë§€í; ê° Bë ìµë 1ê°ì Aì â
â ì: Employeeê° Department륌 êŽëЬ â
â â
â 1:N ââ ê° Aë ì¬ë¬ Bì ë§€í; ê° Bë ìµë 1ê°ì Aì â
â ì: Departmentê° Employee륌 ê°ì§ â
â â
â M:N ââ ê° Aë ì¬ë¬ Bì ë§€í; ê° Bë ì¬ë¬ Aì ë§€í â
â ì: Studentê° Courseì ë±ë¡ â
â â
â (ìµì,ìµë) íêž°ë²: â
â (0,1) ââ ì íì , ìµë íë â
â (1,1) ââ íìì , ì íí íë â
â (0,N) ââ ì íì , 묎ì í ë€ì â
â (1,N) ââ íìì , ìµì íë â
â (3,5) ââ ìµì 3, ìµë 5 (í¹ì ë²ì) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
6. ì°žì¬ ì ìœì¡°ê±Ž¶
ì°žì¬ ì ìœì¡°ê±Žì 몚ë ê°ì²Žê° êŽê³ì ì°žì¬íŽìŒ íëì§ ëë ì°žì¬ê° ì íì ìžì§ ì§ì í©ëë€.
ì 첎 ì°žì¬ (íìì )¶
ê°ì²Ž ì§í©ì 몚ë ê°ì²Žë ìµì íëì êŽê³ ìžì€íŽì€ì ì°žì¬íŽìŒ í©ëë€. ìŽì€ì (===)ìŒë¡ íìí©ëë€.
ââââââââââââ ââââââââââââââââ ââââââââââââ
â EMPLOYEE ââââââââââââ<WORKS_IN>âââââââââââDEPARTMENTâ
ââââââââââââ ââââââââââââ
몚ë ì§ìì ìŽë€ ë¶ììì ìŒíŽìŒ íš.
(ë¶ì ììŽ ì§ììŽ ì¡Žì¬í ì ìì.)
ë¶ë¶ ì°žì¬ (ì íì )¶
ê°ì²Žë êŽê³ì ì°žì¬í ìë ìê³ ì°žì¬íì§ ìì ìë ììµëë€. ëšìŒì (---)ìŒë¡ íìí©ëë€.
ââââââââââââ ââââââââââââââââ ââââââââââââ
â EMPLOYEE ââââââââââââ<MANAGES>ââââââââââââDEPARTMENTâ
ââââââââââââ ââââââââââââ
몚ë ì§ììŽ ë¶ì륌 êŽëЬíë ê²ì ìë (EMPLOYEE 쪜ì ë¶ë¶).
몚ë ë¶ìë ëêµ°ê°ì ìíŽ êŽëЬëìŽìŒ íš (DEPARTMENT 쪜ì ì 첎).
칎ëë늬í°ì ì°žì¬ ê²°í©¶
ì: ëí ER ë€ìŽìŽê·žëš (ëšíž)
ââââââââââââ (1,1) ââââââââââââââââ (1,N) ââââââââââââ
â EMPLOYEE ââââââââââ<WORKS_IN>âââââââââââââDEPARTMENTâ
ââââââââââââ ââââââââââââ
(ìµì,ìµë) ìœêž°:
Employee 쪜: (1,1) â ì 첎 ì°žì¬, ì íí íëì ë¶ì
Department 쪜: (1,N) â ì 첎 ì°žì¬, ìµì í ëª
ì ì§ì
ââââââââââââ (0,N) ââââââââââââââââ (0,N) ââââââââââââ
â STUDENT ââââââââââ<ENROLLS_IN>âââââââââââ COURSE â
ââââââââââââ ââââââââââââ
(ìµì,ìµë) ìœêž°:
Student 쪜: (0,N) â ë¶ë¶ (íììŽ ë±ë¡íì§ ìì ì ìì), ì¬ë¬ 곌목
Course 쪜: (0,N) â ë¶ë¶ (곌목ì íììŽ ìì ì ìì), ì¬ë¬ íì
ì¡Žì¬ ì¢ ìì±¶
ê°ì²Žì 졎ì¬ê° ë€ë¥ž ê°ì²Žìì êŽê³ì ì¢ ìë ë, íŽë¹ êŽê³ì ì 첎 ì°žì¬ë¥Œ í©ëë€.
ì:
DEPENDENT (ê°ì¡± 구ì±ì)ë EMPLOYEE ììŽ ì¡Žì¬í ì ìì.
ë°ëŒì DEPENDENTë HAS_DEPENDENT êŽê³ì ì 첎 ì°žì¬.
ââââââââââââ âââââââââââââââââââ âââââââââââââ
â EMPLOYEE ââââââââââââ<HAS_DEPENDENT>âââââââââââââ DEPENDENT â
ââââââââââââ âââââââââââââ
DEPENDENTë ìœí ê°ì²ŽìŽêž°ë íš (ë€ìì ë
Γ).
7. ìœí ê°ì²Ž¶
ìœí ê°ì²Ž íì (Weak Entity Type)ì ìì ì ìì±ë§ìŒë¡ë ê³ ì íê² ìë³ë ì ìë ê°ì²Ž íì ì ëë€. êŽë šë ìì ì(Owner) (ëë ìë³(Identifying)) ê°ì²Ž íì ì ì¢ ìë©ëë€.
ìœí ê°ì²Žì í¹ì±¶
1. ì첎 Ʞ볞 í€ê° ìì
2. ëìŒí ìì ì ê°ì²Žì êŽë šë ìœí ê°ì²Žë¥Œ 구ë³íë
ë¶ë¶ í€(PARTIAL KEY, ìë³ì)륌 ê°ì§
3. ìë³ êŽê³ì íì ì 첎 ì°žì¬
4. ìì ì ê°ì²Žì 졎ì¬-ì¢
ì
íêž°ë²¶
ââââââââââââ âââââââââââââââââ
â OWNER âââ<IDENTIFIES>âââ WEAK ENTITY â
â (ê°í) â â â
ââââââââââââ âââââââââââââââââ
|
(partial_key)
[ì ì ë°ì€]
ìŽì€ ì¬ê°í: ìœí ê°ì²Ž íì
ìŽì€ ë€ìŽì몬ë: ìë³ êŽê³ íì
ì ì ë°ì€: ë¶ë¶ í€ (ìë³ì)
ì: Employeeì Dependent¶
ââââââââââââ âââââââââââââââ
â EMPLOYEE âââ<HAS_DEPENDENT>âââ DEPENDENT â
ââââââââââââ 1:N âââââââââââââââ
| | | |
(emp_id) (dep_name) (birth) (relationship)
[PK] [ë¶ë¶ í€]
EMPLOYEEë Ʞ볞 í€: emp_id륌 ê°ì§
DEPENDENTë ë¶ë¶ í€: dep_nameì ê°ì§
DEPENDENTì ìì í ìë³:
(ìì ìì emp_id, dep_name)
ì:
ì§ì E001 (Alice)ì íŒë¶ìì:
(E001, "Tom") â Aliceì ìë€ Tom
(E001, "Sue") â Aliceì ëž Sue
ì§ì E002 (Bob)ì íŒë¶ìì:
(E002, "Tom") â Bobì ìë€ Tom (E001ì Tom곌 ë€ë¥ž ì¬ë!)
ìì ìì í€ ììŽ "Tom"ë§ìŒë¡ë 몚ížíš.
ìœí ê°ì²Ž vs. ê°í ê°ì²Ž¶
ââââââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââ
â ê°í ê°ì²Ž â ìœí ê°ì²Ž â
ââââââââââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââââââ€
â ì첎 Ʞ볞 í€ë¥Œ ê°ì§ â ë¶ë¶ í€ë§ ê°ì§ â
â ë
늜ì ìŒë¡ ì¡Žì¬ ê°ë¥ â ìì ìì ì¡Žì¬ ì¢
ì â
â ëšìŒ ì¬ê°í â ìŽì€ ì¬ê°í â
â ë¶ë¶ ì°žì¬ ê°ë¥ â ì 첎 ì°žì¬ íì â
â ì: EMPLOYEE, COURSE â ì: DEPENDENT, ROOM â
ââââââââââââââââââââââââââââââââŽâââââââââââââââââââââââââââââââââââ
ìœí ê°ì²Žì ë ë§ì ì:
BUILDING (ê°í) â ROOM (ìœí): room_numberê° ë¶ë¶ í€
INVOICE (ê°í) â LINE_ITEM (ìœí): line_numberê° ë¶ë¶ í€
COURSE (ê°í) â SECTION (ìœí): section_numberê° ë¶ë¶ í€
8. í¥ìë ER (EER) 몚랶
í¥ìë ER(Enhanced ER, EER) 몚ëžì Ʞ볞 ER 몚ëžì ê°ì²Ž ì§í¥ 몚ëžë§ìì ì°šì©í ì¶ê° ê°ë ìŒë¡ íì¥í©ëë€: í¹ìí, ìŒë°í, ìì.
í¹ìí¶
í¹ìí(Specialization)ë 구ë³ëë í¹ì±ì êž°ë°ìŒë¡ ê°ì²Ž íì ì íì íŽëì€ë¥Œ ì ìíë íí¥ì íë¡ìžì€ì ëë€.
ââââââââââââ
â PERSON â
ââââââ¬ââââââ
â
/ \
/ d \ d = ë¶ëЬ(disjoint)
/ \ o = ì€ì²©(overlapping)
/ \
ââââââââââââ ââââââââââââ
â STUDENT â â EMPLOYEE â
ââââââââââââ ââââââââââââ
PERSONì ììíŽëì€(SUPERCLASS)
STUDENTì EMPLOYEEë íìíŽëì€(SUBCLASS)
d/oê° ìë ìì ì ìœì¡°ê±Žì ì§ì
ìŒë°í¶
ìŒë°í(Generalization)ë ì¬ë¬ ê°ì²Ž íì ì ê³µíµ í¹ì§ì ìì ìì€(ìŒë°) ê°ì²Ž íì ìŒë¡ ì¶ìííë ìí¥ì íë¡ìžì€ì ëë€.
ìŒë°í ì:
CARì TRUCKìŽ ëªšë ë€ìì ê°ì§ê³ ììì êŽì°°:
- vehicle_id, make, model, year, color
ë°ëŒì ìŒë°í:
ââââââââââââ
â VEHICLE â â ìŒë°íë ììíŽëì€
ââââââ¬ââââââ
â
/ \
/ d \
/ \
ââââââââââââ ââââââââââââ
â CAR â â TRUCK â
ââââââââââââ ââââââââââââ
(num_doors) (payload_capacity)
(trunk_size) (num_axles)
í¹ìí/ìŒë°í ì ìœì¡°ê±Ž¶
ë ê°ì ì§êµ ì ìœì¡°ê±ŽìŽ í¹ìí륌 ì§ë°°í©ëë€:
ì ìœì¡°ê±Ž 1: ë¶ëЬì±(Disjointness)
ë¶ëЬ(d): ê°ì²Žë ìµë íëì íìíŽëì€ì ìí ì ìì
ì: ì°šëì CAR ëë TRUCKìŽë©°, ë ë€ë ìë
ì€ì²©(o): ê°ì²Žë ì¬ë¬ íìíŽëì€ì ìí ì ìì
ì: ì¬ëì STUDENTìŽë©Žì EMPLOYEEìŒ ì ìì
ì ìœì¡°ê±Ž 2: ìì ì±(Completeness)
ì 첎: 몚ë ììíŽëì€ ê°ì²Žë ìµì íëì íìíŽëì€ì ìíŽìŒ íš
ììíŽëì€ìì í¹ìí ììŒë¡ì ìŽì€ì
ì: 몚ë VEHICLEì CAR ëë TRUCKìŽìŽìŒ íš
ë¶ë¶: ììíŽëì€ ê°ì²Žê° ìŽë€ íìíŽëì€ìë ìíì§ ìì ì ìì
ììíŽëì€ìì í¹ìí ììŒë¡ì ëšìŒì
ì: PERSONì STUDENTë EMPLOYEEë ìë ì ìì
ë€ ê°ì§ ì¡°í©¶
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â í¹ìí ì ìœì¡°ê±Ž ì¡°í© â
â â
â {ë¶ëЬ, ì 첎}: 몚ë ê°ì²Žê° ì íí íëì íìíŽëì€ì â
â ì: VEHICLE â CAR xor TRUCK â
â â
â {ë¶ëЬ, ë¶ë¶}: ê°ì²Žê° ìµë íëì íìíŽëì€ì â
â ì: ACCOUNT â SAVINGS xor CHECKING â
â (ìŒë¶ ê³ì¢ë ë ë€ ìë ì ìì) â
â â
â {ì€ì²©, ì 첎}: ê°ì²Žê° íë ìŽìì íìíŽëì€ì â
â ì: PERSON â STUDENT and/or â
â EMPLOYEE (ê·žë¬ë ìµì íë) â
â â
â {ì€ì²©, ë¶ë¶}: ê°ì²Žê° 0ê° ìŽìì íìíŽëì€ì â
â ì: PERSON â STUDENT and/or â
â EMPLOYEE (ë ë€ ìë ì ìì) â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ìì± ìì¶
íìíŽëì€ë ììíŽëì€ì 몚ë ìì±ì ììíë©° íìíŽëì€ì í¹ì í ì¶ê° ìì±ì ê°ì§ ì ììµëë€.
ââââââââââââââââââââ
â PERSON â
ââââââââââââââââââââ
â person_id (PK) â
â name â
â date_of_birth â
â email â
ââââââââââ¬ââââââââââ
â
/ \
/ o \ (ì€ì²©, ë¶ë¶)
/ \
ââââââââââââââââââ ââââââââââââââââââ
â STUDENT â â EMPLOYEE â
ââââââââââââââââââ ââââââââââââââââââ
â + student_id â â + emp_id â
â + year â â + salary â
â + gpa â â + hire_date â
â + major â â + department â
ââââââââââââââââââ ââââââââââââââââââ
STUDENTë ìì: person_id, name, date_of_birth, email
ê·žëŠ¬ê³ ì¶ê°: student_id, year, gpa, major
STUDENTìŽë©Žì EMPLOYEEìž PERSONì 몚ë ìì±ì ê°ì§.
ë€ì€ ìì곌 ë²ì£Œ (í©ì§í© íì )¶
ë²ì£Œ(Category) (ëë í©ì§í© íì )ë ì¬ë¬ ê°ë¥í ììíŽëì€ë¥Œ ê°ì§ íìíŽëì€ì ëë€:
ââââââââââââ ââââââââââââ ââââââââââââ
â PERSON â â COMPANY â â BANK â
ââââââ¬ââââââ ââââââ¬ââââââ ââââââ¬ââââââ
â â â
âââââââââââââââââââŒâââââââââââââââââââ
â
(U) â í©ì§í© / ë²ì£Œ
â
ââââââââââââââââ
â OWNER â (ì°šëì)
ââââââââââââââââ
OWNERë PERSON, COMPANY, ëë BANK ì€ íëìŒ ì ìì.
(í¹ìíì ë°ëë¡, íìíŽëì€ê° íëì ììíŽëì€ë¥Œ ê³µì .)
9. ER-êŽê³í ë§€í ìê³ ëŠ¬ìŠ¶
ìŽ ì¹ì ììë ER/EER ë€ìŽìŽê·žëšì êŽê³ ì€í€ë§ë¡ ë³ííë 첎ê³ì ìž 7ëšê³ ìê³ ëŠ¬ìŠì ì ìí©ëë€.
1ëšê³: ê°í ê°ì²Ž íì ë§€í¶
ê° ê°í(ìŒë°) ê°ì²Ž íì Eì ëíŽ, Eì 몚ë ëšì ìì±ì í¬íšíë êŽê³ Rì ìì±í©ëë€. Rì Ʞ볞 í€ë¥Œ ì íí©ëë€.
ER:
ââââââââââââ
â EMPLOYEE â
ââââââââââââ
(emp_id), (name), (salary), (hire_date)
êŽê³í:
EMPLOYEE(emp_id, first_name, last_name, salary, hire_date)
PK: emp_id
ê·ì¹:
- ë³µí© ìì±: 늬í êµ¬ì± ììë§ í¬íš
(name â first_name, last_name)
- ì ë ìì±: ìëµ (쿌늬 ì ê³ì°)
- ë€ì€ê° ìì±: 6ëšê³ìì ì²ëЬ
2ëšê³: ìœí ê°ì²Ž íì ë§€í¶
ìì ì ê°ì²Ž E륌 ê°ì§ ê° ìœí ê°ì²Ž íì Wì ëíŽ, ë€ìì í¬íšíë êŽê³ Rì ìì±: - Wì 몚ë ëšì ìì± - Eì Ʞ볞 í€ë¥Œ ìžë í€ë¡ - Rì Ʞ볞 í€ = Eì PK + Wì ë¶ë¶ í€
ER:
ââââââââââââ 1:N âââââââââââââ
â EMPLOYEE ââââââââââââââââ DEPENDENT â
ââââââââââââ âââââââââââââ
(emp_id) (dep_name), (birth_date), (relationship)
êŽê³í:
DEPENDENT(emp_id, dep_name, birth_date, relationship)
PK: (emp_id, dep_name)
FK: emp_id â EMPLOYEE(emp_id) ON DELETE CASCADE
3ëšê³: ìŽí 1:1 êŽê³ íì ë§€í¶
ìž ê°ì§ ì ê·Œë² (ì°žì¬ ì ìœì¡°ê±Žì ë°ëŒ ì í):
ì ê·Œë² A: ìžë í€ ì ê·Œë² (ì ížëš)
í ê°ì²Žì PK륌 ë€ë¥ž ê°ì²Žì FKë¡ ì¶ê°.
ì 첎 ì°žì¬ê° ìë 쪜ì FK ì¶ê°ë¥Œ ì íž.
ER: EMPLOYEE (0,1) ââ<MANAGES>ââ (1,1) DEPARTMENT
êŽê³í:
EMPLOYEE(emp_id, name, salary)
DEPARTMENT(dept_id, dept_name, mgr_emp_id, mgr_start_date)
^^^^^^^^^
FK â EMPLOYEE(emp_id)
(DEPARTMENTê° ì 첎 ì°žì¬ë¥Œ ê°ì§ë¯ë¡ DEPARTMENTì FK:
몚ë ë¶ìë êŽëЬì륌 ê°ì žìŒ íš)
ì ê·Œë² B: êŽê³ ë³í©
ë ê°ì²Ž íì
ì íëì êŽê³ë¡ ë³í©.
ììªœìŽ ëªšë ì 첎 ì°žì¬ë¥Œ ê°ì§ ëë§ ê°ë¥.
ì ê·Œë² C: êµì°š ì°žì¡° (êŽê³ êŽê³)
êŽê³ë¥Œ ìí ë³ëì êŽê³ ìì±.
êŽê³ê° ë§ì ìì±ì ê°ì§ ë ì ì©.
4ëšê³: ìŽí 1:N êŽê³ íì ë§€í¶
"1-쪜" ê°ì²Žì PK륌 "N-쪜" ê°ì²Žì FKë¡ ì¶ê°í©ëë€.
ER: DEPARTMENT (1) ââ<HAS>ââ (N) EMPLOYEE
êŽê³í:
DEPARTMENT(dept_id, dept_name, budget)
EMPLOYEE(emp_id, name, salary, dept_id)
^^^^^^^
FK â DEPARTMENT(dept_id)
êŽê³ ìì±ì N-쪜 ê°ì²Žì íšê» ê°:
HASê° (start_date)륌 ê°ì§ë©Ž, EMPLOYEEì ì¶ê°.
5ëšê³: ìŽí M:N êŽê³ íì ë§€í¶
ìë¡ìŽ êŽê³ êŽê³(Relationship Relation) Rì ìì±í©ëë€. í¬íš: - ì쪜 ì°žì¬ ê°ì²Ž íì ì PK륌 FKë¡ - êŽê³ì 몚ë ìì± - Rì PK = ì쪜 FKì ì¡°í©
ER: STUDENT (M) ââ<ENROLLS>ââ (N) COURSE
ìì±: grade, semester
êŽê³í:
STUDENT(student_id, name, year)
COURSE(course_id, title, credits)
ENROLLMENT(student_id, course_id, semester, grade)
PK: (student_id, course_id, semester)
FK: student_id â STUDENT(student_id)
course_id â COURSE(course_id)
6ëšê³: ë€ì€ê° ìì± ë§€í¶
ê° ë€ì€ê° ìì±ì ëíŽ ìë¡ìŽ êŽê³ë¥Œ ìì±í©ëë€. í¬íš: - ë€ì€ê° ìì± - ê°ì²Žì PK륌 FKë¡ - PK = FK + ë€ì€ê° ìì±
ER: EMPLOYEEê° ë€ì€ê° ìì± {phone_numbers}륌 ê°ì§
êŽê³í:
EMPLOYEE(emp_id, name, salary)
EMPLOYEE_PHONE(emp_id, phone_number)
PK: (emp_id, phone_number)
FK: emp_id â EMPLOYEE(emp_id) ON DELETE CASCADE
7ëšê³: í¹ìí/ìŒë°í ë§€í¶
ë€ ê°ì§ ìµì ìŽ ì¡Žì¬í©ëë€. ìµì ì ì íì ì ìœì¡°ê±Žì ë°ëŒ ë€ëŠ ëë€:
ìµì A: íì ìë³ì륌 ì¬ì©í ëšìŒ í ìŽëž
PERSON(person_id, name, dob, email, person_type,
-- STUDENT ìì± (íììŽ ìë멎 NULL)
student_id, year, gpa, major,
-- EMPLOYEE ìì± (ì§ììŽ ìë멎 NULL)
emp_id, salary, hire_date, department)
person_type IN ('S', 'E', 'SE', 'N') -- Student, Employee, Both, Neither
ì¥ì : ê°ëš, ì¡°ìž íì ìì
ëšì : ë§ì NULL, íìíŽëì€ ì ìœì¡°ê±Ž ìí ìŽë €ì
ìµì : íìíŽëì€ê° ì ê³ , 몚ë íì
ì ê±žì¹ ì¿ŒëŠ¬ê° ë§ì
ìµì B: ê° íìíŽëì€ì ëí ë³ë í ìŽëž (ììíŽëì€ PK ìì)
PERSON(person_id, name, dob, email)
STUDENT(person_id, student_id, year, gpa, major)
FK: person_id â PERSON(person_id)
EMPLOYEE(person_id, emp_id, salary, hire_date, department)
FK: person_id â PERSON(person_id)
ì¥ì : NULL ìì, ê¹ëí ë¶ëЬ
ëšì : ì 첎 ë°ìŽí°ë¥Œ ì»ìŒë €ë©Ž ì¡°ìž íì
ìµì : íìíŽëì€ í¹ì ìì±ìŽ ë§ê³ , ì€ì²© íì©
ìµì C: ë³ë í ìŽëž (ê°ê° ì 첎 ìì±)
STUDENT(person_id, name, dob, email, student_id, year, gpa, major)
EMPLOYEE(person_id, name, dob, email, emp_id, salary, hire_date, dept)
ì¥ì : íìíŽëì€ ì¿ŒëŠ¬ì ì¡°ìž íì ìì
ëšì : ì€ë³µ (ê³µì ìì± ì€ë³µ), 몚ë ì¬ëì ê±žì¹ ì¿ŒëŠ¬ ìŽë €ì,
ì€ì²©ì ë°ìŽí° ì€ë³µ íì
ìµì : ë¶ëЬ, ì 첎 í¹ìí
ìµì D: íìŽëžëЬë (ììíŽëì€ + í¹ìí í ìŽëž)
ì¬ì© íšíŽì ë°ëŒ ì í:
- ì죌 íšê» ì¿ŒëŠ¬ëš â ìµì
A
- ëë¶ë¶ ë³ëë¡ ì¿ŒëŠ¬ëš â ìµì
C
- ì ì°ì± íì â ìµì
B
ë§€í ê²°ì í¶
ââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââ
â ER êµ¬ì± â êŽê³í ë§€í â
ââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââââââââââ€
â ê°í ê°ì²Ž â ì êŽê³, ì첎 PK â
â ìœí ê°ì²Ž â ì êŽê³, ë³µí© PK â
â 1:1 êŽê³ â í ê°ì²Žì FK (ì 첎 쪜) â
â 1:N êŽê³ â N-쪜 ê°ì²Žì FK â
â M:N êŽê³ â ì êŽê³ (ëžëŠ¬ì§ í
ìŽëž) â
â ë€ì€ê° ìì± â ì êŽê³ â
â ë³µí© ìì± â êµ¬ì± ììë¡ ííí â
â ì ë ìì± â ìëµ (쿌늬 ì ê³ì°) â
â í¹ìí/ìŒë°í â ìµì
A, B, C, ëë D â
â ìŒí êŽê³ â 3ê°ì FK륌 ê°ì§ ì êŽê³ â
â ì¬ê· êŽê³ â ìì ì í
ìŽëžì FK (ëë ëžëЬì§) â
ââââââââââââââââââââââââââââŽââââââââââââââââââââââââââââââââââââ
10. ì€ê³ ì¬ë¡ ì°êµ¬: ëí ë°ìŽí°ë² ìŽì€¶
ëí ë°ìŽí°ë² ìŽì€ë¥Œ ìí ìì í ER ë€ìŽìŽê·žëšì ì€ê³íê³ êŽê³ ì€í€ë§ë¡ ë§€ííŽ ëŽ ìë€.
ì구ì¬í¶
1. ëíì ê°ê° ìŽëŠ, 걎묌, ìì°ì ê°ì§ DEPARTMENT륌 ê°ì§.
2. ê° ë¶ìë í ëª
ì CHAIRPERSON (êµì 구ì±ì)ì ê°ì§.
3. FACULTY 구ì±ìì ID, ìŽëŠ, ì§êž, êžì¬ë¥Œ ê°ì§. ê°ê° íëì ë¶ìì ìíš.
4. STUDENTë ID, ìŽëŠ, íë
, GPA륌 ê°ì§. ê°ê° ì ê³µ ë¶ì륌 ê°ì§.
5. COURSEë ID, ì 목, íì ì ê°ì§ë©° ë¶ìì ìíš.
6. êµì 구ì±ììŽ ê³Œëª©ì ê°ë¥Žì¹š(TEACH). ê° ê°ì€ì í¹ì íêž°ì ìì.
곌목ì ë€ë¥ž êµìê° ê°ë¥Žì¹ë ì¬ë¬ ì¹ì
ì ê°ì§ ì ìì.
7. íììŽ ê³Œëª© ì¹ì
ì ë±ë¡(ENROLL)íê³ ì±ì ì ë°ì.
8. íìì ì¬ë¬ ì íë²ížì ìŽë©ìŒ 죌ì륌 ê°ì§ ì ìì.
9. êµìë íìì ì¡°ìží ì ìì(ADVISE) (íìì í ëª
ì ì¡°ìžì륌 ê°ì§).
ER ë€ìŽìŽê·žëš (ASCII)¶
{phone} {email}
\ /
\ /
ââââââââââââ (0,1) (1,1) ââââââââââââ
â STUDENT ââââââ<ADVISES>ââââââ FACULTY â
ââââââââââââ ââââââââââââ
(sid)(name) (fid)(name)
(year)(gpa) (rank)(salary)
| |
(1,N)| (1,N)|
| |
<ENROLLED_IN> <TEACHES>
| |
(1,N)| (1,N)|
| |
ââââââââââââââââ ââââââââââââââââ
â SECTION â â SECTION â
â (sec_number) â â â
ââââââââââââââââ ââââââââââââââââ
| |
(1,1)| |
| |
ââââââââââââ (1,N) (1,1) ââââââââââââ (1,1) ââââââââââââ
â COURSE ââââââ<OFFERED_BY>âââââââDEPARTMENTâââââ<CHAIRS>ââââââ FACULTY â
ââââââââââââ ââââââââââââ (ìŽë¯ž
(cid)(title) (did)(name) íìëš)
(credits) (building)
(budget)
ì°žê³ : ìë ëšìíëììµëë€. ë ì íí ííì SECTIONì COURSEì ìœí ê°ì²Žë¡ 몚ëžë§íê³ , TEACHESë FACULTY륌 SECTIONì, ENROLLED_INì STUDENT륌 SECTIONì ì°ê²°í©ëë€.
ì ì ë ER ì€ê³¶
ê°ì²Ž:
DEPARTMENT(dept_id, dept_name, building, budget) ê°í
FACULTY(fac_id, name, rank, salary) ê°í
STUDENT(stu_id, name, year, gpa, {phone}, {email}) ê°í + MV
COURSE(course_id, title, credits) ê°í
SECTION(sec_number, semester, year) ìœí (ìì ì: COURSE)
êŽê³:
WORKS_IN: FACULTY (N,1) --- DEPARTMENT (1:N)
MAJOR_IN: STUDENT (N,1) --- DEPARTMENT (1:N)
CHAIRS: FACULTY (1,0..1) --- DEPARTMENT (1:1)
OFFERS: DEPARTMENT (1,N) --- COURSE (1:N)
HAS_SECTION: COURSE (1,N) === SECTION (ìë³, 1:N)
TEACHES: FACULTY (1,N) --- SECTION (ì¹ì
ë¹ 1:1)
ENROLLED_IN: STUDENT (M) --- SECTION (N) (M:N, ìì±: grade)
ADVISES: FACULTY (1) --- STUDENT (N) (1:N)
êŽê³ ì€í€ë§ (ë§€íëš)¶
-- 1ëšê³: ê°í ê°ì²Ž
CREATE TABLE department (
dept_id CHAR(4) PRIMARY KEY,
dept_name VARCHAR(50) NOT NULL UNIQUE,
building VARCHAR(30),
budget NUMERIC(12,2) CHECK (budget >= 0)
);
CREATE TABLE faculty (
fac_id CHAR(5) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
rank VARCHAR(20) CHECK (rank IN
('Lecturer','Assistant','Associate','Full')),
salary NUMERIC(10,2) CHECK (salary > 0),
dept_id CHAR(4) NOT NULL, -- 4ëšê³: 1:N WORKS_IN
FOREIGN KEY (dept_id) REFERENCES department(dept_id)
);
CREATE TABLE student (
stu_id CHAR(5) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
year SMALLINT CHECK (year BETWEEN 1 AND 4),
gpa NUMERIC(3,2) CHECK (gpa >= 0.0 AND gpa <= 4.0),
major_id CHAR(4), -- 4ëšê³: 1:N MAJOR_IN
advisor_id CHAR(5), -- 4ëšê³: 1:N ADVISES
FOREIGN KEY (major_id) REFERENCES department(dept_id),
FOREIGN KEY (advisor_id) REFERENCES faculty(fac_id)
);
CREATE TABLE course (
course_id CHAR(6) PRIMARY KEY,
title VARCHAR(100) NOT NULL,
credits SMALLINT NOT NULL CHECK (credits BETWEEN 1 AND 5),
dept_id CHAR(4) NOT NULL, -- 4ëšê³: 1:N OFFERS
FOREIGN KEY (dept_id) REFERENCES department(dept_id)
);
-- 2ëšê³: ìœí ê°ì²Ž (COURSEë¡ ìë³ëë SECTION)
CREATE TABLE section (
course_id CHAR(6) NOT NULL,
sec_number SMALLINT NOT NULL,
semester VARCHAR(10) NOT NULL,
sec_year SMALLINT NOT NULL,
fac_id CHAR(5), -- 4ëšê³: 1:N TEACHES
PRIMARY KEY (course_id, sec_number, semester, sec_year),
FOREIGN KEY (course_id) REFERENCES course(course_id)
ON DELETE CASCADE,
FOREIGN KEY (fac_id) REFERENCES faculty(fac_id)
);
-- 3ëšê³: 1:1 CHAIRS (department 쪜ì FK, ì 첎 ì°žì¬)
ALTER TABLE department
ADD COLUMN chair_fac_id CHAR(5),
ADD CONSTRAINT fk_chair
FOREIGN KEY (chair_fac_id) REFERENCES faculty(fac_id);
-- 5ëšê³: M:N ENROLLED_IN
CREATE TABLE enrollment (
stu_id CHAR(5) NOT NULL,
course_id CHAR(6) NOT NULL,
sec_number SMALLINT NOT NULL,
semester VARCHAR(10) NOT NULL,
sec_year SMALLINT NOT NULL,
grade VARCHAR(2),
PRIMARY KEY (stu_id, course_id, sec_number, semester, sec_year),
FOREIGN KEY (stu_id) REFERENCES student(stu_id),
FOREIGN KEY (course_id, sec_number, semester, sec_year)
REFERENCES section(course_id, sec_number, semester, sec_year)
);
-- 6ëšê³: ë€ì€ê° ìì±
CREATE TABLE student_phone (
stu_id CHAR(5) NOT NULL,
phone VARCHAR(20) NOT NULL,
PRIMARY KEY (stu_id, phone),
FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE
);
CREATE TABLE student_email (
stu_id CHAR(5) NOT NULL,
email VARCHAR(100) NOT NULL,
PRIMARY KEY (stu_id, email),
FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE
);
ì€í€ë§ ë€ìŽìŽê·žëš ì윶
ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ
â DEPARTMENT â â FACULTY â â STUDENT â
âââââââââââââââ†âââââââââââââââ†ââââââââââââââââ€
âPK dept_id âââââââPK fac_id âââââââPK stu_id â
â dept_name â FK â name â FK â name â
â building âdept â rank âadv â year â
â budget â â salary â â gpa â
âFK chair_fac âââââââFK dept_id ââââ âFK major_idâââºâ DEPARTMENT
ââââââââââââââââ ââââââââââââââââ âFK advisor_idâââºFACULTY
â â ââââââââââââââââ
â â â
â âââââââ â
â â â
ââââââââââââ âââââââŽâââââââ âââââââââââââââââŽâââ
â COURSE â â SECTION â â ENROLLMENT â
âââââââââââ†âââââââââââââ†ââââââââââââââââââââ€
âPK crs_id ââââPK crs_id ââââPK stu_id â
â title â âPK sec_num â âPK crs_id â
â creditsâ âPK semester â âPK sec_num â
âFK dept_idâ âPK sec_year â âPK semester â
ââââââââââââ âFK fac_id â âPK sec_year â
ââââââââââââââ â grade â
ââââââââââââââââââââ
âââââââââââââââââââ âââââââââââââââââââ
â STUDENT_PHONE â â STUDENT_EMAIL â
ââââââââââââââââââ†âââââââââââââââââââ€
âPK,FK stu_id â âPK,FK stu_id â
âPK phone â âPK email â
âââââââââââââââââââ âââââââââââââââââââ
11. ìŒë°ì ìž íšì 곌 ëªšë² ì¬ë¡¶
íšì 1: í¬ ížë©¶
í¬ ížë©(Fan Trap)ì ì¬ë¬ 1:N êŽê³ë¥Œ íµí 겜ë¡ê° í¬ ììëìŽ ëªšíží ì°êŽì ë§ë€ ë ë°ìí©ëë€.
묞ì :
DEPARTMENT â1:Nâ EMPLOYEE
DEPARTMENT â1:Nâ PROJECT
쿌늬: "ìŽë€ ì§ììŽ ìŽë€ íë¡ì ížìì ìŒíëê°?"
겜ë¡ë DEPARTMENT â EMPLOYEEì DEPARTMENT â PROJECTë¡ ê°ì§ë§
EMPLOYEEì PROJECT ê°ì ì§ì ë§í¬ê° ìì!
íŽê²°ì±
: EMPLOYEEì PROJECT ê°ì ì§ì WORKS_ON êŽê³ ì¶ê°.
íšì 2: ìºìŠ ížë©¶
ìºìŠ ížë©(Chasm Trap)ì êŽë šëìŽìŒ í ê°ì²Ž íì ê°ì 겜ë¡ê° 졎ì¬íì§ ìì ë ë°ìí©ëë€.
묞ì :
DEPARTMENT â1:Nâ EMPLOYEE (ë¶ë¶)
EMPLOYEE â1:Nâ PROJECT
ìŒë¶ ë¶ìì ì§ììŽ ììŒë©Ž DEPARTMENTìì PROJECTë¡ì 겜ë¡ì
"ìºìŠ(chasm)" (ê°ê²©)ìŽ ìì.
íŽê²°ì±
: DEPARTMENTì PROJECT ê°ì ì§ì HAS_PROJECT êŽê³ ì¶ê°.
íšì 3: ë€ì€ê° ìì±ì 곌ëí ì¬ì©¶
ëìš:
PERSON with {address} â 죌ìê° ì첎 ìì±ìŽ íìí멎
(street, city, state, zip), ì못ëš
ë ì¢ì:
PERSON â1:Nâ ADDRESS
ADDRESS(address_id, street, city, state, zip_code)
íšì 4: êŽê³ ìì± ë뜶
ëìš:
STUDENTê° grade ìì±ì ê°ì§ â ìŽë€ 곌목ì ì±ì ?
ë ì¢ì:
STUDENT âM:Nâ COURSE with êŽê³ ìì±: grade
ëªšë² ì¬ë¡¶
1. ê°ì²Žë¶í° ìì, ê·ž ë€ì êŽê³, ê·ž ë€ì ìì±
2. 몚ë ê°ì²Žë í€ ìì±ì ê°ì žìŒ íš
3. ì€ë³µ êŽê³ íŒíêž° (ë€ë¥ž ê²ìì ì ë ê°ë¥)
4. ìœí ê°ì²Žë ì§ì ìŒë¡ íìí ëë§ ì¬ì©
5. ê°ë¥í멎 ìŒíë³Žë€ ìŽí êŽê³ ì íž
6. 몚ë ê°ì 곌 ì ìœì¡°ê±Ž 묞ìí
7. 구첎ì ìž ìì 륌 ì¬ì©íì¬ ìŽíŽêŽê³ìì ê²ìŠ
8. ê°ì²Žë¥Œ ëšì ëª
ì¬ë¡ ëª
ëª
(STUDENTSê° ìë STUDENT)
9. êŽê³ë¥Œ ëì¬ë¡ ëª
ëª
(ENROLLS_IN, TEACHES)
10. ì íí ì ìœì¡°ê±Žì ìíŽ (min,max) íêž°ë² ì¬ì©
12. ì°ìµ ë¬žì ¶
Ʞ볞 ê°ë ¶
ì°ìµ 묞ì 4.1: ë€ì ê°ê°ì ëíŽ ê°ì²Ž íì , êŽê³ íì , ëë ìì±ìŒë¡ 몚ëžë§íŽìŒ íëì§ ìë³íìžì. ëµì ì ë¹ííìžì.
- (a) ì§ì ìŽëŠ
- (b) ë¶ì
- (c) ê²°íŒ (ë ì¬ë ê°)
- (d) íì GPA
- (e) ì± ISBN
- (f) 곌ì ë±ë¡
- (g) ì§ì êž°ì (ì§ììŽ ë§ì êž°ì ì ê°ì§ ì ìë€ê³ ê°ì )
- (h) íë¡ì íž ë§ê°ìŒ
ì°ìµ 묞ì 4.2: ë€ì ìì±ì ë¶ë¥íìžì:
| ìì± | ëšì/ë³µí© | ëšìŒ/ë€ì€ | ì ì¥/ì ë | í€? |
|---|---|---|---|---|
| SSN | ||||
| ì 첎 ìŽëŠ (first + middle + last) | ||||
| ì íë²íž (ì¬ë¬) | ||||
| ëìŽ (ìë ììŒ ì£ŒìŽì§) | ||||
| ìŽë©ìŒ 죌ì | ||||
| 죌ì (street, city, state, zip) |
ER ì€ê³¶
ì°ìµ 묞ì 4.3: ë€ì ì구ì¬íì ê°ì§ ë³ì ìì€í ì ëí ER ë€ìŽìŽê·žëš 귞늬Ʞ: - íìë ID, ìŽëŠ, ìë ììŒ, íì¡íì ê°ì§ - ìì¬ë ID, ìŽëŠ, ì 묞 ë¶ìŒ, ì íë²ížë¥Œ ê°ì§ - ê° íìë 죌ì¹ììê² ë°°ì ëš - ìì¬ë íììê² ìœì ì²ë°©í ì ìì (ë ì§ì ì©ë êž°ë¡) - ìœì ìœë, ìŽëŠ, ì ì¡°ì¬ë¥Œ ê°ì§ - íìë ì¬ë¬ ìë 륎Ʞ륌 ê°ì§ ì ìì
칎ëë늬í°ì ì°žì¬ ì ìœì¡°ê±Žì ì§ì íìžì.
ì°ìµ 묞ì 4.4: ìšëŒìž íìµ íë«íŒì ëí ER ë€ìŽìŽê·žëš 귞늬Ʞ: - ê°ì¬ê° 곌ì ì ìì±. 곌ì ì ì 목, ì€ëª , ê°ê²©ì ê°ì§. - 곌ì ì í¹ì ììë¡ ì¬ë¬ ë ìšì í¬íš. - íìì 곌ì ì ë±ë¡íê³ ë ìšë³ ì§íë¥ ì¶ì (ìë£ ìí, ìì ìê°). - íìì 곌ì ì íê°íê³ ëŠ¬ë·°í ì ìì (1-5 ë³, í ì€íž). - ê° ë ìš ëì íŽìŠê° ìì. íìì íŽìŠë¥Œ ìëíê³ ì ì륌 ë°ì.
몚ë ê°ì²Ž íì , êŽê³ íì , ìì±, í€, ì ìœì¡°ê±Žì ìë³íìžì.
칎ëë늬í°ì 찞쬶
ì°ìµ 묞ì 4.5: ë€ì ê° ìë늬ì€ì ëíŽ ì¹ŽëëëŠ¬í° ë¹ìš (1:1, 1:N, M:N)곌 ì°žì¬ ì ìœì¡°ê±Ž (ì 첎/ë¶ë¶) ê²°ì :
- (a) êµê°ë íëì ìë륌 ê°ì§; ìëë íëì êµê°ì ìíš
- (b) íìì íëì êž°ìì¬ ë°©ì 거죌; ë°©ì ì¬ë¬ íìì ìì© ê°ë¥
- (c) ì ìë ë§ì ì± ì ìž ì ìì; ì± ì ë§ì ì ì륌 ê°ì§ ì ìì
- (d) ì§ìì ì¬ë¬ íë¡ì ížìì ìŒíš; íë¡ì ížë ì¬ë¬ ì§ìì ê°ì§
- (e) ì¬ëì íëì ì¬ê¶ì ê°ì§; ì¬ê¶ì í ì¬ëìê² ìíš (몚ë ì¬ëìŽ ì¬ê¶ì ê°ì§ë ê²ì ìë)
ìœí ê°ì²Ž¶
ì°ìµ 묞ì 4.6: ê° ìì ëíŽ ìŽë ê²(ìë€ë©Ž)ìŽ ìœí ê°ì²Žì¬ìŒ íëì§ ê²°ì :
- (a) Building곌 Room
- (b) Invoiceì LineItem
- (c) Studentì Course
- (d) Bankì Branch
- (e) Orderì OrderItem
ê° ìœí ê°ì²Žì ëíŽ ë¶ë¶ í€ì ìë³ êŽê³ë¥Œ ìë³íìžì.
EER¶
ì°ìµ 묞ì 4.7: ë€ìì ëí EER ë€ìŽìŽê·žëš ì€ê³:
íì¬ì ì§ììŽ ììµëë€. ì§ìì êŽëЬì, ìì§ëìŽ, ë¹ìë¡ í¹ìíë©ëë€. ìì§ëìŽë ìíížìšìŽ ìì§ëìŽì íëìšìŽ ìì§ëìŽë¡ ë í¹ìíë ì ììµëë€.
- í¹ìíê° ë¶ëЬìžì§ ì€ì²©ìžì§ ê²°ì
- ì 첎ìžì§ ë¶ë¶ìžì§ ê²°ì
- ê° íìíŽëì€ì ëíŽ ìµì ë ê°ì í¹ì ìì± ì¶ê°
- ìì í EER ë€ìŽìŽê·žëš 귞늬Ʞ
ER-êŽê³í ë§€í¶
ì°ìµ 묞ì 4.8: ë€ì ER ë€ìŽìŽê·žëšìŽ ì£ŒìŽì¡ì ë, 7ëšê³ ë§€í ìê³ ëŠ¬ìŠì ì ì©íì¬ SQL DDL곌 íšê» ìì í êŽê³ ì€í€ë§ ìì±:
{skill}
|
ââââââââââââ 1:N ââââââââââââââââ M:N ââââââââââââ
âDEPARTMENTââââââââ<WORKS_IN>ââââââââ EMPLOYEE âââââ<WORKS_ON>âââââ PROJECT â
ââââââââââââ ââââââââââââââââ |hours| ââââââââââââ
(dept_id) (emp_id)(name) (proj_id)(name)
(name) (salary) (budget)
(budget) (birth_date) (location)
|
1:N |
|
âââââââââââââââââ
â DEPENDENT â
â(dep_name) â
â(birth_date) â
â(relationship)â
âââââââââââââââââ
í¬íš: 몚ë í ìŽëž, PK, FK, ëë©ìž ì ìœì¡°ê±Ž, ON DELETE ëì.
ì°ìµ 묞ì 4.9: ë€ì í¹ìí ê³ìžµì ìž ê°ì§ ì ê·Œë² ê°ê°ì ì¬ì©íì¬ êŽê³ ì€í€ë§ë¡ ë§€í (ìµì A: ëšìŒ í ìŽëž, ìµì B: ììíŽëì€ + íìíŽëì€ í ìŽëž, ìµì C: ë³ë í ìŽëž). ížë ìŽëì€í륌 ë Œìíìžì.
VEHICLE
(vin, make, model, year, color)
|
/ \
d,t
/ \
CAR TRUCK
(num_doors, (payload_cap,
trunk_vol) num_axles,
cab_type)
ì€ê³ ëì ¶
ì°ìµ 묞ì 4.10: ì§ì ëìêŽì ë°ìŽí°ë² ìŽì€ ìì€í ìŽ íìí©ëë€. ìì í ê°ë ì€í€ë§ (ER/EER ë€ìŽìŽê·žëš)륌 ì€ê³íê³ êŽê³ ì€í€ë§ë¡ ë§€ííìžì. ì구ì¬í:
- ëìêŽì ê°ê° ìŽëŠ, 죌ì, ì íë²ížë¥Œ ê°ì§ ì¬ë¬ ì§ì ì ê°ì§
- ì± ì ISBNìŒë¡ ìë³ëë©° ì 목, ì¶í ì°ë, íì ê°ì§
- ê° ì± ì í ëª ìŽìì ì ì륌 ê°ì§
- ì± ì íë ìŽìì ë²ì£Œ (Fiction, Science, History ë±)ì ìíš
- ê° ì§ì ì ê° ì± ì ì¬ë¬ ì¬ë³žì ì ì§êŽëЬ. ê° ì¬ë³žì ì¬ë³ž ë²ížì ìí륌 ê°ì§
- íìì 칎ë ë²íž, ìŽëŠ, 죌ì, ì íë²ížë¥Œ ê°ì§. íìì í¹ì ì§ì ì ë±ë¡
- íìì ì¬ë³žì ëì¶í ì ìì. ê° ëì¶ì ëì¶ ë ì§, ë°ë© ìì ìŒ, ë°ë© ë ì§ë¥Œ êž°ë¡
- íìì ì§ì ìì ì± ì ììœí ì ìì (í¹ì ì¬ë³žìŽ ìë)
- ì§ìì ì§ì ìì ìŒíš. ì¬ìì 볎조ììŽ ìì (ë¶ëЬ í¹ìí)
- ê° ì§ì ì ì§ì êŽëЬì ìí ì íë í ëª ì ì¬ì륌 ê°ì§
ì ì¶ë¬Œ: - 몚ë ì ìœì¡°ê±Žì í¬íší ìì í ER/EER ë€ìŽìŽê·žëš - êŽê³ ì€í€ë§ (7ëšê³ 몚ë ì ì©) - ìµì 5ê°ì 죌ì í ìŽëžì ëí SQL DDL - ì€ê³ê° ëìêŽì ì구륌 ì§ìíšì 볎ì¬ì£Œë ìž ê°ì§ ìí 쿌늬
ìŽì : êŽê³ ëì | ë€ì: íšì ì¢ ìì±