1๏ธโฃย ๊ฐ์ธ ์ ๋ฆฌ
์ด ๋ค์ด์ด๊ทธ๋จ์ **DBMS (Database Management System)**์ ๊ตฌ์ฑ ๋ชจ๋์ ์ค๋ช
ํ๊ณ ์๋ค. ๊ฐ๊ฐ์ ์ฃผ์ ๋ชจ๋๊ณผ ํ๋ฆ์ ์ค๋ช
ํด ๋ณด๊ฒ ๋ค.
1. ์ฌ์ฉ์ ์ข ๋ฅ (Users)
- DBA Staff: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์ (DBA)๊ฐ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ ์ ์ ์ธ์ด(DDL)๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํ๋ค.
- Casual Users: ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ฐ ์ฌ์ฉ์๋ค๋ก, ๋ํํ ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ์์ ํ๋ค.
- Application Programmers: ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ํ๋ก๊ทธ๋๋จธ๋ค๋ก, DB์ ์ฐ๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
- Parametric Users: ์ฃผ๋ก ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ ํ๋ผ๋ฉํธ๋ฆญ ์ฌ์ฉ์๋ค๋ก, ์๋ฅผ ๋ค์ด, ์ํ์ ์ํ์ ๋ฑ์ด ์๋ค.
2. ๋ช ๋ น์ด ํ๋ฆ (Commands and Processes)
- DDL Statements: ๋ฐ์ดํฐ ์ ์ ์ธ์ด ๋ช ๋ น์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ ์ํ๊ฑฐ๋ ์์ ํ๋ ๋ช ๋ น์ด๋ค.
- DDL Compiler: DDL ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ญํ ์ ํ๋ค.
- Interactive Query: ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ๋ํํ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ค. ์ฌ์ฉ์๋ ์ฃผ๋ก SQL ๋ฌธ์ ์ง์ ์ ๋ ฅํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์กฐ์ํ๋ค.
- Query Compiler: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ SQL ์ฟผ๋ฆฌ๋ฅผ ์ปดํ์ผํ์ฌ ์คํ ๊ฐ๋ฅํ ํ์์ผ๋ก ๋ณํํ๋ค.
- Query Optimizer: ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋จ๊ณ๋ก, ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐ ๋์์ ์ค๋ค.
- Application Programs: ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
- Precompiler: ํ๋ก๊ทธ๋จ ๋ด์์ ์ฌ์ฉ๋ SQL ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์๋๋ก ๋ณํํ๋ค.
- DML Compiler: ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด(DML) ๋ช ๋ น์ด๋ฅผ ์ปดํ์ผํ์ฌ ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ด๋ก ๋ณํํ๋ค.
- Compiled Transactions: ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํธ๋์ญ์ ์ ํ๋ผ๋ฉํธ๋ฆญ ์ฌ์ฉ์๋ค์ด ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋๋ค.
3. ์ ์ฅ์ ๊ด๋ จ ๋ชจ๋ (Storage Modules)
- Runtime Database Processor: ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ ํธ๋์ญ์ ์ ์คํํ๋ ์ฒ๋ฆฌ๊ธฐ๋ค.
- Concurrency Control/Backup/Recovery Subsystems: ๋์์ฑ ์ ์ด์ ๋ฐฑ์ , ๋ณต๊ตฌ ์์คํ ์ ๋ด๋นํ์ฌ ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์์๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ค.
- Stored Data Manager: ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ชจ๋๋ก, ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์ญํ ์ ํ๋ค.
4. ์ ์ฅ ๋ฐ์ดํฐ (Stored Database)
- Stored Database: ์ค์ ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ์ ์๋ค.
- System Catalog/Data Dictionary: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๋ค. ํ ์ด๋ธ์ ๊ตฌ์กฐ, ๊ด๊ณ, ์ธ๋ฑ์ค ๋ฑ์ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๋ค.
์ด ๋ค์ด์ด๊ทธ๋จ์ DBMS์ ์ฌ๋ฌ ์ฌ์ฉ์ ๊ณ์ธต๊ณผ ๊ทธ๋ค์ด ์ฌ์ฉํ๋ ๋ค์ํ ๋ช
๋ น์ด ๋ฐ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ณด์ฌ์ฃผ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์ด์๋๋์ง ์ค๋ช
ํ๊ณ ์๋ค.
ย
์ด ์ฌ๋ผ์ด๋๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ "๊ด๊ณ" ๋๋ "๊ด๊ณ ์ํ"๊ฐ ๋ฌด์์ธ์ง ์ค๋ช
ํ๊ณ ์๋ค. ๊ฐ ์์๋ฅผ ์ค๋ช
ํด๋ณด๊ฒ ๋ค.
1. Relation (or Relation State) \( r(R) \): ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ด๊ณ๋ ํ ์ด๋ธ๊ณผ ๋์ผํ ๊ฐ๋ ์ผ๋ก ์๊ฐํ ์ ์๋ค. ์ด ๊ด๊ณ๋ ์ํ์ ๊ด๊ณ๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ฌ๋ฌ ์์ฑ(Attribute)์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ๊ฐ์ ์์ฑ์ ํน์ ๋๋ฉ์ธ(Domain) ๋ด์ ๊ฐ์ ๊ฐ์ง๋ค.
2. Mathematical Relation
- ์ํ์ ์ธ ๊ด์ ์์, ๊ด๊ณ๋ ํน์ ๋๋ฉ์ธ์์ ์ ์๋ n์ฐจ์ ํ๋ ฌ์ด๋ค. ์ฌ๊ธฐ์ n์ ์์ฑ(์ปฌ๋ผ)์ ๊ฐ์๋ค.
- \( dom(A_1), dom(A_2), \dots, dom(A_n) \)๋ ๊ฐ ์์ฑ๋ค์ด ๊ฐ์ง๋ ๊ฐ์ ๋ฒ์(๋๋ฉ์ธ)๋ฅผ ๋ํ๋ธ๋ค.
3. Subset of Cartesian Product
- ๊ด๊ณ๋ ์ฌ๋ฌ ์์ฑ์ ๋๋ฉ์ธ๋ค์ **๋ฐ์นด๋ฅดํธ ๊ณฑ(Cartesian Product)**์ ๋ถ๋ถ ์งํฉ์ผ๋ก ์ ์๋๋ค.
- ์ด๋ฅผ ์์์ผ๋ก ๋ํ๋ด๋ฉด \( r(R) \subseteq (dom(A_1) \times dom(A_2) \times \dots \times dom(A_n)) \)์ด๋ค.
- ์๋ฅผ ๋ค์ด, ์์ฑ์ด 3๊ฐ์ธ ๊ฒฝ์ฐ, A1์ ๋๋ฉ์ธ, A2์ ๋๋ฉ์ธ, A3์ ๋๋ฉ์ธ์ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ์ด ์ธ ๋๋ฉ์ธ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ํฌํจํ๋ค. ํ์ง๋ง ๊ด๊ณ๋ ๊ทธ ์ค ์ผ๋ถ ์กฐํฉ๋ง์ ํฌํจํ๊ฒ ๋๋ค.
4. ํ ์ด๋ธ ํ์์ผ๋ก ํํ๋ ๊ด๊ณ
- ๊ทธ๋ฆผ์์ ๋ณด๋ฏ์ด, ๊ด๊ณ๋ ํ(ํ ์ด๋ธ) ํํ๋ก ๋ํ๋ผ ์ ์๋ค.
- A1, A2, A3, โฆ, An์ ํ ์ด๋ธ์ ์ด(์์ฑ)์ ๋ํ๋ด๊ณ , ๊ฐ ์ด์ ํน์ ๋๋ฉ์ธ์์ ๊ฐ์ ๊ฐ์ง๋ค.
- ๊ฐ ํ(row)์ ์์ฑ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด ํ๋ค์ด ๋ฐ๋ก ๊ด๊ณ \( r(R) \)๋ฅผ ๊ตฌ์ฑํ๋ค.
์์ฝ:
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ "๊ด๊ณ"๋ ์ฌ๋ฌ ์์ฑ๋ค ๊ฐ์ ์ฐ๊ด์ฑ์ ๋ํ๋ด๋ฉฐ, ์ด๋ ์ํ์ ์ผ๋ก ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ๋ถ๋ถ์งํฉ์ผ๋ก ํํ๋๋ค.
- ํ ์ด๋ธ์ ์์ฑ๋ค์ ๋๋ฉ์ธ ๋ด ๊ฐ๋ค์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํ ์ด๋ธ์ ๊ฐ ํ์ ๊ด๊ณ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
์ด๋ฅผ ํตํด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ๊ด๊ณ์ ์ํ์ ์ ์๋ฅผ ์ดํดํ ์ ์๋ค.
ย
์ด ์ค๋ช
์ **์ํ์ ๊ด๊ณ(Relation)**์ ๋ํ ์ ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก, ํนํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ๊ด๊ณ๋ฅผ ์ค๋ช
ํ๊ณ ์๋ค. ์ด๋ฅผ ๋จ๊ณ๋ณ๋ก ํ์ด์ ์ค๋ช
ํด ๋ณด๊ฒ ๋ค.
1. ์ํ์ ๊ด๊ณ์ ์ ์
- *"Mathematical relation of degree n"**๋ **n๊ฐ์ ์์ฑ(Attributes)**์ ๊ฐ์ง ์ํ์ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ n์ ๊ด๊ณ์ ์ฐจ์๋ฅผ ๋ํ๋ธ๋ค. ์ฆ, ํ๋์ ํ ์ด๋ธ(๊ด๊ณ)์ ์์ฑ(์ปฌ๋ผ)์ด n๊ฐ ์์ ๋, ์ด๋ฅผ "n์ฐจ ๊ด๊ณ"๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๊ฐ ์์ฑ์ ํน์ **๋๋ฉ์ธ(Domain)**์์ ๊ฐ์ ๊ฐ์ง๋ค. ๋๋ฉ์ธ์ ์์ฑ์ ๊ฐ์ด ๊ฐ์ง ์ ์๋ ๊ฐ์ ๋ฒ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ์๋ฅผ ๋ค์ด,
dom(A1)
์ ์์ฑ A1์ด ๊ฐ์ง ์ ์๋ ๊ฐ๋ค์ ์งํฉ์ด๋ค.
2. ๋ฐ์นด๋ฅดํธ ๊ณฑ(Cartesian Product)
- ์ค๋ช ์ ๋์จ **"Subset of the Cartesian product of the domains"**๋ผ๋ ๊ตฌ๋ฌธ์ ๊ด๊ณ๊ฐ ์ฌ๋ฌ ์์ฑ์ ๋๋ฉ์ธ ๊ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ผ๋ก๋ถํฐ ์ผ๋ถ๋ฅผ ์ ํํ ๊ฒ์ด๋ผ๋ ์๋ฏธ๋ค.
- ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ์ฌ๋ฌ ์งํฉ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ๋ง๋๋ ์ฐ์ฐ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฐ์ ์งํฉ A์ B๊ฐ ์์ ๋, ๊ทธ๋ค์ ๋ฐ์นด๋ฅดํธ ๊ณฑ \( A \times B \)๋ A์ B์์ ํ๋์ฉ ๊ฐ์ ๋ฝ์ ๋ง๋ ๋ชจ๋ ์์์์ ํฌํจํ๋ค.
- ์๋ฅผ ๋ค์ด, \( A = \{1, 2\}, B = \{x, y\} \)์ผ ๋, \( A \times B = \{(1, x), (1, y), (2, x), (2, y)\} \)๊ฐ ๋๋ค.
3. **๊ด๊ณ \( r(R) \)๋ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ๋ถ๋ถ์งํฉ
- *r(R) โ (dom(A1) ร dom(A2) ร ... ร dom(An))**๋ ๊ด๊ณ \( r(R) \)๊ฐ ๊ฐ ์์ฑ์ ๋๋ฉ์ธ \( dom(A1), dom(A2), \dots, dom(An) \)์ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ๋ถ๋ถ์งํฉ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ฌด์จ ๋ป์ด๋๋ฉด:
- \( dom(A1) ร dom(A2) ร ... ร dom(An) \)์ ๊ฐ ์์ฑ์ ๋๋ฉ์ธ์์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ์กฐํฉ์ ์๋ฏธํ๋ค. ์ด ๋ชจ๋ ์กฐํฉ์ด ์ด๋ฃจ์ด์ง ๊ฒ์ด ๋ฐ์นด๋ฅดํธ ๊ณฑ์ด๋ค.
- *r(R)**๋ ๊ทธ ๋ชจ๋ ์กฐํฉ ์ค์์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ค์ด ์๋ ๊ฐ๋ค์ ์งํฉ, ์ฆ ํ ์ด๋ธ์ ํ(row)๋ค์ด ํฌํจ๋ ๋ถ๋ถ์งํฉ์ด๋ค.
์์๋ก ํ์ด์ ์ค๋ช
- ์๋ฅผ ๋ค์ด, ํ ์ด๋ธ์ด ๋ ๊ฐ์ ์์ฑ \( A1 \)๊ณผ \( A2 \)๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ํด๋ณด์.
- \( dom(A1) = \{1, 2\}, dom(A2) = \{x, y\} \)๋ผ๊ณ ํ ๋, ๋ฐ์นด๋ฅดํธ ๊ณฑ์ \( dom(A1) ร dom(A2) = \{(1, x), (1, y), (2, x), (2, y)\} \)๊ฐ ๋๋ค.
- ๊ทธ๋ฌ๋ ์ค์ ๋ก ํ ์ด๋ธ์ ์ ์ฅ๋ ๊ฐ์ด \( (1, x), (2, y) \)๋ง ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, **r(R)**๋ \( \{(1, x), (2, y)\} \)๋ก ํํ๋๋ค. ์ด๋ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ๋ถ๋ถ์งํฉ์ด๋ค.
์์ฝ
- *๊ด๊ณ \( r(R) \)**๋ ์์ฑ๋ค ๊ฐ์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ง ํ ์ด๋ธ์ ํ๋ค์ ๋ํ๋ด๋ฉฐ, ๊ฐ ์์ฑ์ ๋๋ฉ์ธ์ด๋ผ๋ ๊ฐ์ ๋ฒ์์์ ๊ฐ์ ๊ฐ์ง๋ค.
- ์ด ๊ด๊ณ๋ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ ์ค์์ ์ค์ ๋ก ํ ์ด๋ธ์ ์กด์ฌํ๋ ๊ฐ๋ค์ ๋ถ๋ถ์งํฉ์ด๋ค.
ย
์ด ์ฌ๋ผ์ด๋๋ ๊ด๊ณ ์ ์ฝ์กฐ๊ฑด์ ๋ํด ์ค๋ช
ํ๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ
์ด๋ธ ๊ฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ ์ฉ๋๋ ๋ค์ํ ์ ์ฝ์กฐ๊ฑด๋ค์ ์ค๋ช
ํ๊ณ ์๋ค. ๊ฐ๊ฐ์ ์ ์ฝ์กฐ๊ฑด์ ๋ถ์ํด ๋ณด๊ฒ ๋ค.
1. ๋๋ฉ์ธ ์ ์ฝ์กฐ๊ฑด (Domain Constraints)
- ์ ์: ๊ฐ ํ๋์ ๊ฐ์ด ํด๋น ํ๋์ ๋๋ฉ์ธ(์ฆ, ๊ทธ ํ๋์์ ๊ฐ์ง ์ ์๋ ๊ฐ์ ๋ฒ์)์ ์ํด์ผ ํ๋ค๋ ์ ์ฝ์ด๋ค.
- ์์: ์ฌ๋ผ์ด๋์ ์์์์, MgrStartDate ํ๋๋ ๋ ์ง(Date) ํ์ ์ด์ด์ผ ํ๋ค๋ ๋๋ฉ์ธ ์ ์ฝ์กฐ๊ฑด์ด ์ ์ฉ๋๋ค. ๋ฐ๋ผ์ ์ด ํ๋์๋ ๋ฐ๋์ ๋ ์ง ํ์์ ๊ฐ๋ง ๋ค์ด๊ฐ์ผ ํ๋ค.
2. ํค ์ ์ฝ์กฐ๊ฑด (Key Constraints)
- ์ ์: ํค ์ ์ฝ์กฐ๊ฑด์ ํ ์ด๋ธ์ ๊ฐ ํ์ด ๊ณ ์ ํ๊ฒ ์๋ณ๋ ์ ์๋๋ก ๊ธฐ๋ณธ ํค ๋๋ ํ๋ณด ํค๊ฐ ์ค์ ๋์ด์ผ ํ๋ค๋ ์ ์ฝ์ด๋ค.
- ์์: Employee ํ ์ด๋ธ์ SSN(์ฌํ๋ณด์ฅ๋ฒํธ) ํ๋๋ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉ๋์ด, ๊ฐ ์ง์์ด ๊ณ ์ ํ๊ฒ ์๋ณ๋ ์ ์์ด์ผ ํ๋ค. Department ํ ์ด๋ธ์ DNUMBER๋ ๊ณ ์ ํ ๊ฐ์ด์ด์ผ ํ๋ค.
3. ์ํฐํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด (Entity Integrity Constraints)
- ์ ์: ๊ธฐ๋ณธ ํค๋ ์ ๋๋ก NULL ๊ฐ์ ๊ฐ์ง ์ ์๋ค๋ ์ ์ฝ์ด๋ค. ๊ธฐ๋ณธ ํค๋ ํ ์ด๋ธ ๋ด์์ ๊ฐ ํ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๊ฐ์ด ์์ด์ผ ํ๋ค.
- ์์: SSN ํ๋๋ ๊ธฐ๋ณธ ํค์ด๋ฏ๋ก ์ ๋๋ก NULL ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
4. ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด (Referential Integrity Constraints)
- ์ ์: ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ์ธ๋ ํค๊ฐ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ค๋ ์ ์ฝ์ด๋ค. ์ฆ, ํ ํ ์ด๋ธ์์ ์ธ๋ ํค๋ก ์ฌ์ฉ๋ ๊ฐ์ ๋ฐ๋์ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ์กด์ฌํด์ผ ํ๋ค.
- ์์: Department ํ ์ด๋ธ์ MgrSSN(๊ด๋ฆฌ์ ์ฌํ๋ณด์ฅ๋ฒํธ) ํ๋๋ Employee ํ ์ด๋ธ์ SSN ํ๋๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ ํค์ด๋ค. ๋ฐ๋ผ์ MgrSSN์ ์ ๋ ฅ๋ ๊ฐ์ ๋ฐ๋์ Employee ํ ์ด๋ธ์ SSN ํ๋์์ ์ ํจํ ๊ฐ์ด์ด์ผ ํ๋ค.
์์ฝ
์ด ์ฌ๋ผ์ด๋๋ ๋๋ฉ์ธ ์ ์ฝ์กฐ๊ฑด, ํค ์ ์ฝ์กฐ๊ฑด, ์ํฐํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด, ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ์ค๋ช
ํ๋ฉฐ, ๊ฐ ์ ์ฝ์กฐ๊ฑด์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค.
- ๋๋ฉ์ธ ์ ์ฝ์กฐ๊ฑด์ ํ๋ ๊ฐ์ ํ์ ์ด๋ ๋ฒ์๋ฅผ ์ ํํ๊ณ ,
- ํค ์ ์ฝ์กฐ๊ฑด์ ๊ฐ ํ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ฉฐ,
- ์ํฐํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ธฐ๋ณธ ํค์ NULL ๊ฐ์ ํ์ฉํ์ง ์๊ณ ,
- ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ธ๋ ํค๊ฐ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๊ฐ๊ณผ ์ผ์นํด์ผ ํ๋ค๋ ์ ์ฝ์ ์ค์ ํ๋ค.
ย
-- EMPLOYEE ํ ์ด๋ธ ์์ฑ CREATE TABLE EMPLOYEE ( FNAME VARCHAR(15) NOT NULL, -- ์ง์์ ์ด๋ฆ, 15์๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ NULL ๋ถ๊ฐ MINIT CHAR, -- ์ค๊ฐ ์ด๋์ , ๋ฌธ์ 1๊ฐ LNAME VARCHAR(15) NOT NULL, -- ์ง์์ ์ฑ, 15์๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ NULL ๋ถ๊ฐ SSN CHAR(9) NOT NULL, -- ์ง์์ ์ฌํ๋ณด์ฅ๋ฒํธ, 9์๋ฆฌ๋ก NULL ๋ถ๊ฐ BDATE DATE, -- ์ง์์ ์๋ ์์ผ ADDRESS VARCHAR(30), -- ์ง์์ ์ฃผ์, ์ต๋ 30์ SEX CHAR, -- ์ฑ๋ณ, ๋ฌธ์ 1๊ฐ SALARY DECIMAL(10, 2) DEFAULT 3000, -- ๊ธ์ฌ, ์์์ ๋์งธ ์๋ฆฌ๊น์ง ํํ, ๊ธฐ๋ณธ๊ฐ์ 3000 SUPERSSN CHAR(9), -- ์์ฌ์ ์ฌํ๋ณด์ฅ๋ฒํธ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ) DNO INT NOT NULL DEFAULT 1, -- ๋ถ์ ๋ฒํธ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ), NULL ๋ถ๊ฐ, ๊ธฐ๋ณธ๊ฐ์ 1 PRIMARY KEY (SSN), -- SSN์ ๊ธฐ๋ณธ ํค๋ก ์ค์ (๊ณ ์ ๊ฐ) FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL -- ์์ฌ ์ ๋ณด๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ NULL๋ก ์ค์ ON UPDATE CASCADE, -- ์์ฌ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ฐ์์ ์ผ๋ก ์์ FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNUMBER) ON DELETE SET DEFAULT -- ๋ถ์ ์ ๋ณด๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ(DNO=1)์ผ๋ก ์ค์ ON UPDATE CASCADE -- ๋ถ์ ๋ฒํธ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ฐ์์ ์ผ๋ก ์์ ); -- DEPARTMENT ํ ์ด๋ธ ์์ฑ CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, -- ๋ถ์ ์ด๋ฆ, 15์๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ NULL ๋ถ๊ฐ DNUMBER INT NOT NULL, -- ๋ถ์ ๋ฒํธ, NULL ๋ถ๊ฐ MGRSSN CHAR(9) NOT NULL DEFAULT '888665555', -- ๋ถ์ ๊ด๋ฆฌ์์ ์ฌํ๋ณด์ฅ๋ฒํธ, ๊ธฐ๋ณธ๊ฐ ์ค์ MGRSTARTDATE DATE, -- ๋ถ์ ๊ด๋ฆฌ์๊ฐ ์์ํ ๋ ์ง PRIMARY KEY (DNUMBER), -- DNUMBER๋ฅผ ๊ธฐ๋ณธ ํค๋ก ์ค์ CHECK (DNUMBER > 0 AND DNUMBER < 21), -- DNUMBER์ ๊ฐ์ด 1~20 ์ฌ์ด์ฌ์ผ ํจ FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET DEFAULT -- ๊ด๋ฆฌ์๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ(888665555)์ผ๋ก ์ค์ ON UPDATE CASCADE -- ๊ด๋ฆฌ์๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฐ์์ ์ผ๋ก ์์ ); -- DEPT_LOCATIONS ํ ์ด๋ธ ์์ฑ CREATE TABLE DEPT_LOCATIONS ( DNUMBER INT NOT NULL, -- ๋ถ์ ๋ฒํธ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ), NULL ๋ถ๊ฐ DLOCATION VARCHAR(15) NOT NULL, -- ๋ถ์ ์์น, 15์๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ NULL ๋ถ๊ฐ PRIMARY KEY (DNUMBER, DLOCATION), -- DNUMBER์ DLOCATION์ ์กฐํฉ์ผ๋ก ๋ณตํฉ ํค ์ค์ FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT(DNUMBER) ON DELETE CASCADE -- ๋ถ์๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ๋ถ์ ์์น ์ ๋ณด๋ ์ญ์ ๋จ ON UPDATE CASCADE -- ๋ถ์ ๋ฒํธ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฐ์์ ์ผ๋ก ์์ ); -- PROJECT ํ ์ด๋ธ ์์ฑ CREATE TABLE PROJECT ( PNAME VARCHAR(15) NOT NULL, -- ํ๋ก์ ํธ ์ด๋ฆ, 15์๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ NULL ๋ถ๊ฐ PNUMBER INT NOT NULL, -- ํ๋ก์ ํธ ๋ฒํธ, NULL ๋ถ๊ฐ PLOCATION VARCHAR(15), -- ํ๋ก์ ํธ ์์น, ์ต๋ 15์ DNUM INT NOT NULL, -- ๋ถ์ ๋ฒํธ, NULL ๋ถ๊ฐ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ) PRIMARY KEY (PNUMBER), -- PNUMBER๋ฅผ ๊ธฐ๋ณธ ํค๋ก ์ค์ FOREIGN KEY (DNUM) REFERENCES DEPARTMENT(DNUMBER) ON DELETE CASCADE -- ๋ถ์ ์ญ์ ์ ํ๋ก์ ํธ๋ ์ญ์ ๋จ ON UPDATE CASCADE -- ๋ถ์ ๋ฒํธ ๋ณ๊ฒฝ ์ ์ฐ์์ ์ผ๋ก ์์ ); -- WORKS_ON ํ ์ด๋ธ ์์ฑ CREATE TABLE WORKS_ON ( ESSN CHAR(9) NOT NULL, -- ์ง์์ ์ฌํ๋ณด์ฅ๋ฒํธ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ), NULL ๋ถ๊ฐ PNO INT NOT NULL, -- ํ๋ก์ ํธ ๋ฒํธ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ), NULL ๋ถ๊ฐ HOURS DECIMAL(3, 1) NOT NULL, -- ์์ ์๊ฐ, ์์์ 1์๋ฆฌ๊น์ง ํํ, NULL ๋ถ๊ฐ PRIMARY KEY (ESSN, PNO), -- ESSN๊ณผ PNO์ ์กฐํฉ์ผ๋ก ๋ณตํฉ ํค ์ค์ FOREIGN KEY (ESSN) REFERENCES EMPLOYEE(SSN) ON DELETE CASCADE -- ์ง์์ด ์ญ์ ๋ ๊ฒฝ์ฐ ์์ ์ ๋ณด๋ ์ญ์ ๋จ ON UPDATE CASCADE, -- ์ง์ SSN์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฐ์์ ์ผ๋ก ์์ FOREIGN KEY (PNO) REFERENCES PROJECT(PNUMBER) ON DELETE CASCADE -- ํ๋ก์ ํธ๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ์์ ์ ๋ณด๋ ์ญ์ ๋จ ON UPDATE CASCADE -- ํ๋ก์ ํธ ๋ฒํธ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฐ์์ ์ผ๋ก ์์ ); -- DEPENDENT ํ ์ด๋ธ ์์ฑ CREATE TABLE DEPENDENT ( ESSN CHAR(9) NOT NULL, -- ์ง์์ ์ฌํ๋ณด์ฅ๋ฒํธ (์ธ๋ ํค๋ก ์ฐธ์กฐ ๊ฐ๋ฅ), NULL ๋ถ๊ฐ DEPENDENT_NAME VARCHAR(15) NOT NULL, -- ๋ถ์ ๊ฐ์กฑ ์ด๋ฆ, ์ต๋ 15์, NULL ๋ถ๊ฐ SEX CHAR, -- ๋ถ์ ๊ฐ์กฑ ์ฑ๋ณ BDATE DATE, -- ๋ถ์ ๊ฐ์กฑ์ ์๋ ์์ผ RELATIONSHIP VARCHAR(8), -- ์ง์๊ณผ ๋ถ์ ๊ฐ์กฑ์ ๊ด๊ณ, ์ต๋ 8์ PRIMARY KEY (ESSN, DEPENDENT_NAME), -- ESSN๊ณผ DEPENDENT_NAME์ ์กฐํฉ์ผ๋ก ๋ณตํฉ ํค ์ค์ FOREIGN KEY (ESSN) REFERENCES EMPLOYEE(SSN) ON DELETE CASCADE -- ์ง์์ด ์ญ์ ๋ ๊ฒฝ์ฐ ๋ถ์ ๊ฐ์กฑ ์ ๋ณด๋ ์ญ์ ๋จ ON UPDATE CASCADE -- ์ง์ SSN์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฐ์์ ์ผ๋ก ์์ );
์ค๋ช :
- EMPLOYEE ํ ์ด๋ธ:
- ๊ธฐ๋ณธ ํค:
SSN
์ ๊ธฐ๋ณธ ํค๋ก ์ค์ ๋์ด ๊ฐ ์ง์์ ๊ณ ์ ํ๊ฒ ์๋ณํฉ๋๋ค. - ์ธ๋ ํค:
- SUPERSSN: ์์ฌ์ ์ฌํ๋ณด์ฅ๋ฒํธ๋ก EMPLOYEE ํ ์ด๋ธ์ SSN์ ์ฐธ์กฐํ๋ ์ฌ๊ท์ ์ธ๋ ํค์ ๋๋ค.
- DNO: ์ง์์ด ์ํ ๋ถ์๋ฅผ ๋ํ๋ด๋ฉฐ DEPARTMENT ํ ์ด๋ธ์ DNUMBER๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ ํค์ ๋๋ค.
- DEPARTMENT ํ ์ด๋ธ:
- ๊ธฐ๋ณธ ํค:
DNUMBER
๋ ๋ถ์ ๋ฒํธ๋ก์ ๊ธฐ๋ณธ ํค๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๋ถ์๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํฉ๋๋ค. - ์ ์ฝ ์กฐ๊ฑด:
DNUMBER
๊ฐ์ด 1์์ 20 ์ฌ์ด์ฌ์ผ ํ๋ค๋ CHECK ์ ์ฝ ์กฐ๊ฑด์ด ์ค์ ๋์ด ์์ต๋๋ค.
- DEPT_LOCATIONS ํ ์ด๋ธ:
- ๋ณตํฉ ํค:
DNUMBER
์DLOCATION
์ ์กฐํฉ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ์ฌ ๋ถ์ ๋ฒํธ์ ๋ถ์ ์์น์ ์กฐํฉ์ด ๊ณ ์ ํ๋๋ก ์ค์ ํฉ๋๋ค. - ์ธ๋ ํค:
DNUMBER
๋ DEPARTMENT ํ ์ด๋ธ์ DNUMBER๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
- PROJECT ํ ์ด๋ธ:
- ๊ธฐ๋ณธ ํค:
PNUMBER
๋ ํ๋ก์ ํธ ๋ฒํธ๋ก ๊ธฐ๋ณธ ํค์ ๋๋ค. - ์ธ๋ ํค:
DNUM
์ ํ๋ก์ ํธ๊ฐ ์ํ ๋ถ์๋ฅผ ๋ํ๋ด๋ฉฐ, DEPARTMENT ํ ์ด๋ธ์ DNUMBER๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
- WORKS_ON ํ ์ด๋ธ:
- ๋ณตํฉ ํค:
ESSN
(์ง์)๊ณผPNO
(ํ๋ก์ ํธ ๋ฒํธ)์ ์กฐํฉ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ์ฌ, ๊ฐ ์ง์์ด ์ด๋ค ํ๋ก์ ํธ์์ ๋ช ์๊ฐ ์ผํ๋์ง๋ฅผ ๊ธฐ๋กํฉ๋๋ค. - ์ธ๋ ํค:
ESSN
์ EMPLOYEE ํ ์ด๋ธ์ SSN์,PNO
๋ PROJECT ํ ์ด๋ธ์ PNUMBER๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
- DEPENDENT ํ ์ด๋ธ:
- ๋ณตํฉ ํค:
ESSN
(์ง์)๊ณผDEPENDENT_NAME
(๋ถ์ ๊ฐ์กฑ ์ด๋ฆ)์ ์กฐํฉ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ์ฌ ๋ถ์ ๊ฐ์กฑ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. - ์ธ๋ ํค:
ESSN
์ EMPLOYEE ํ ์ด๋ธ์ SSN์ ์ฐธ์กฐํฉ๋๋ค.
ย
์๋๋ PDF์์ (b)๋ถํฐ ์ถ๊ฐ๋
DEFAULT
, CASCADE
๋ฑ์ ๋ฐ์ํ SQL ์ฝ๋์
๋๋ค. ๊ฐ๊ฐ์ ์๋ก์ด ์ ์ฝ ์กฐ๊ฑด(DEFAULT
, CASCADE
๋ฑ)์ ์ถ๊ฐํ๊ณ , ํด๋น ๋ถ๋ถ์ ๋ํ ์ฃผ์๊ณผ ์ค๋ช
๋ ํจ๊ป ์ ๊ณตํฉ๋๋ค.์ถ๊ฐ๋ ์ ์ฝ ์กฐ๊ฑด๊ณผ ๋์ ์ค๋ช :
DEFAULT
:- EMPLOYEE ํ ์ด๋ธ:
- SALARY: ๊ธฐ๋ณธ๊ฐ์ผ๋ก 3000์ด ์ค์ ๋์ด ์์ผ๋ฉฐ, ๊ธ์ฌ๊ฐ ์ ๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ ์ด ๊ฐ์ด ์๋์ผ๋ก ์ ๋ ฅ๋ฉ๋๋ค.
- DNO: ๋ถ์ ๋ฒํธ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก 1์ด ์ค์ ๋์ด ์์ต๋๋ค. ์ง์์ด ์์๋ ๋ถ์๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ถ์ ๋ฒํธ 1์ด ์ ๋ ฅ๋ฉ๋๋ค.
- DEPARTMENT ํ ์ด๋ธ:
- MGRSSN: ๋ถ์ ๊ด๋ฆฌ์์ ๊ธฐ๋ณธ๊ฐ์ **'888665555'**๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ๊ด๋ฆฌ์์ SSN์ด ์ ๋ ฅ๋์ง ์์ผ๋ฉด ์ด ๊ฐ์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
ON DELETE
๋ฐON UPDATE CASCADE
:ON DELETE CASCADE
: ์ฐธ์กฐํ๋ ํ ์ด๋ธ์์ ํ์ด ์ญ์ ๋๋ฉด, ํด๋น ์ธ๋ ํค๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ๊ด๋ จ ๋ฐ์ดํฐ๋ ์ญ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, WORKS_ON ํ ์ด๋ธ์์ ์ง์์ด ์ญ์ ๋๋ฉด ๊ทธ ์ง์๊ณผ ๊ด๋ จ๋ ํ๋ก์ ํธ ์ ๋ณด๋ ์ญ์ ๋ฉ๋๋ค.ON DELETE SET NULL
: ์ฐธ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์์ ๋, ์ธ๋ ํค ํ๋๊ฐ NULL๋ก ์ค์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ฌ๊ฐ ์ญ์ ๋๋ฉด ์ง์์ ์์ฌ ์ ๋ณด๋ NULL๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.ON DELETE SET DEFAULT
: ์ฐธ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์์ ๋, ์ธ๋ ํค ํ๋๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ถ์๊ฐ ์ญ์ ๋๋ฉด ์ง์์ ๋ถ์ ๋ฒํธ๋ ๊ธฐ๋ณธ๊ฐ์ธ 1๋ก ์ค์ ๋ฉ๋๋ค.ON UPDATE CASCADE
: ์ฐธ์กฐํ๋ ํ ์ด๋ธ์์ ๊ธฐ๋ณธ ํค๊ฐ ์์ ๋๋ฉด, ๊ทธ ํค๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ธ๋ ํค ๊ฐ๋ ์ฐ์์ ์ผ๋ก ์์ ๋ฉ๋๋ค.
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด๋ค์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ , ํ
์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช
ํํ ์ ์ํ ์ ์์ต๋๋ค.
ย
(SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM = DNUMBER AND MGRSSN = SSN AND LNAME = 'Smith') UNION (SELECT PNUMBER FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER = PNO AND ESSN = SSN AND LNAME = 'Smith');
-- ์์ ๋ ์ฟผ๋ฆฌ: ๋ช ์์ ์ธ JOIN๊ณผ ์ ํํ ์กฐ๊ฑด ์ฌ์ฉ (SELECT PNUMBER FROM PROJECT INNER JOIN DEPARTMENT ON PROJECT.DNUM = DEPARTMENT.DNUMBER INNER JOIN EMPLOYEE ON DEPARTMENT.MGRSSN = EMPLOYEE.SSN WHERE EMPLOYEE.LNAME = 'Smith') UNION (SELECT PNUMBER FROM PROJECT INNER JOIN WORKS_ON ON PROJECT.PNUMBER = WORKS_ON.PNO INNER JOIN EMPLOYEE ON WORKS_ON.ESSN = EMPLOYEE.SSN WHERE EMPLOYEE.LNAME = 'Smith');
ย
2๏ธโฃย ์์ฝ ์ ๋ฆฌ
- ๋ง์ฝ ์์ฑ์ผ๋ก ์ ์ฅํ๋ค๋ฉด ์ผ์ผ์ด ์ ๋ง์ ์ฑ ์ ์ถํ์ฌ์ ๋ ํ ์ ๋ณด๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ค๋ณต์ผ๋ก ์ ์ฅ๋์ด ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ด ๊ฒฐ์ฌ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ณ , ์ถํ์ฌ ์ ๋ณด๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ ์ฐจํ ์ ๋ฐ์ดํธ ํ๊ธฐ ๋ถํธํ๊ฒ ๋๋ค ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฉ๋์ฆ๊ฐ, ์ ๋ฐ์ ์ธ ์์ธ ์๋ ์ ํ, ์ ์ ์๊ฐ๋ฑ์ด ์ค๋ ๊ฑธ๋ฆฐ ๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
- ํ ์ ์๊ฐ ๋ค์์ ์ฑ ์ ์ถํ ํ์ ์ ์๊ณ , ๊ฐ์ ์ฑ ์ด ์ฌ๋ฌ๊ถ ์์ ์ ์๋ค. ๋ ๋์ผ ์ ์์ฌ๋ ์ถํ์ฌ๊ฐ ๋ค๋ฅผ์ ์๋ค. ํจ๊ป ์ ์ฅํ์ ๊ฒฝ์ฐ ์ฐจ ํ SQL๋ฌธ์ด ๋ณต์กํด์ง๊ณ , ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒฐ์ฌ ์ ํ, ์์ฑ์ ์ ์ฝ์ ๊ฑธ๊ธฐ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ ๊ทํ ๊ณผ์ ์ ๋ถ๋ฆฌํ ์ฌ ์ ์ฅํ๋๊ฒ ๋ฐ๋์งํ๋ฉฐ ํ๋์ ํ๋์ ํตํฉํ์ฌ ์ ์ฅํ์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ์ถฉ๋ถํ๊ณ , ๋น๋ฒํ๊ฒ ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์กฐํ ํ๋๊ฒฝ์ฐ ์์๊ฐ์ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ํ๋ค๋ฉด ๊ฐ๋ฅํ๋ค.
- ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ดํด๋ณด๋ฉด ๊ฐ์ ์ฑ , ํน์ ๊ฐ๊ฐ์ ์ฑ ์ ๋ ํด ๋น๋ ค๊ฐ ์ง์ ๊ณผ ์ฌ๋๊ณผ ๋์ถ, ๋ฐ๋ฉ์ผ์๋ฑ์ด ๋ค๋ฅด๊ณ BOOK_LOANS์ด ํฌํจํ๊ณ ์๋ ์์ฑ์ ๊ฐ์๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ํ๋์ ํ ์ด๋ธ๋ก ์ ์ฅํ๋๊ฒ ๋ณด๋ค ๋ฐ๋ก ์ ๋ณด๋ฅผ ๋๋์ ์ ๊ทํ ๊ณผ ์ ์ ๊ฑฐ์ฒ ๊ด๋ฆฌํ๋๊ฒ์ด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๊ด๋ฆฌ์ ์ธก๋ฉด์์ ํจ ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ฐธ์กฐํ๋ ํ
์ด๋ธ์์ ์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด ์ค์ ์
ON DELETE CASCADE
์ต์ ์ ์ฌ์ฉํด์ผ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ด ์ง์ผ์ง๋ค.
SELECT A.DNAME, COUNT(B.DNUMBER) FROM DEPARTMENT A, DEPT_LOCATIONS B WHERE A.DNUMBER = B.DNUMBER GROUP BY A.DNAME, B.DNUMBER; -- ๋์ด ๊ฐ์ SELECT A.DNAME, COUNT(B.DNUMBER) FROM DEPARTMENT A INNER JOIN DEPT_LOCATIONS B ON A.DNUMBER = B.DNUMBER GROUP BY A.DNAME, B.DNUMBER;
- SQL์์ GROUP BY๋ฅผ ์ฌ์ฉํ ๋, SELECT ์ ์ ์๋ ๋ชจ๋ ํ๋๋ GROUP BY ์ ์ ํฌํจ๋์ด์ผ ํ๋ค. ์ฆ, ์ง๊ณ ํจ์๊ฐ ์๋ ํ๋๋ค์ ๋ชจ๋ ํฌํจ๋์ด์ผ ํ๋ค.
- WHERE์ ์ ํ ์ด๋ธ์ ์๋ ํ๋ค์ ๋ํ ์กฐ๊ฑด (๊ทธ๋ฃนํ๋๊ธฐ ์ ), HAVING ์ ์ ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ๋ํ ์กฐ๊ฑด์ ์ค์
- ์ค์ฒฉ ์ง์์์ ์ธ๋ถ ์ง์์ ํฌํจ๋ ํ ์ด๋ธ์ ์์ฑ์ ๋ด๋ถ ์ง์์์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ๋ด๋ถ ์ง์ ์คํํ์๋ ์ธ๋ถ ์ง์ด์ ํํ ์ ๋งํผ ์คํ๋๋ค.
- ๋ฐ์ดํฐ ๋ ๋ฆฝ์ฑ์ด ์ ๊ณต๋์ง ์์ผ๋ฉด ๋ฌผ๋ฆฌ์ ์ ์ฅ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์์ฉ ํ๋ก๊ทธ๋๋ฐ ์ํฅ์ ๋ฐ์ ์์ ์ด ํ์ํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
1. SELECT ์ด๋ฆ, ๊ณผ๋ชฉ๋ช FROM STUDENT INNER JOIN (COURSE INNER JOIN ์๊ฐ์ ์ฒญ ON COURSE.์ฝ์ค๋ฒํธ = ์๊ฐ์ ์ฒญ.์ฝ์ค๋ฒํธ) ON STUDENT.ํ๋ฒ = ์๊ฐ์ ์ฒญ.ํ๋ฒ 2. SELECT STUDENT.์ด๋ฆ, COUNT (*), AVG(์ฑ์ ) FROM STUDENT INNER JOIN ์๊ฐ์ ์ฒญ ON STUDENT.ํ๋ฒ = ์๊ฐ์ ์ฒญ.ํ๋ฒ GROUP BY STUDENT.์ด๋ฆ; 3. SELECT COURSE.๊ณผ๋ชฉ๋ช , COUNT (*), AVG(์ฑ์ ) FROM STUDENT INNER JOIN (COURSE INNER JOIN ์๊ฐ์ ์ฒญ ON COURSE.์ฝ์ค๋ฒํธ = ์๊ฐ์ ์ฒญ.์ฝ์ค๋ฒํธ) ON STUDENT.ํ๋ฒ = ์๊ฐ์ ์ฒญ.ํ๋ฒ GROUP BY COURSE.๊ณผ๋ชฉ๋ช ; SELECT COURSE.์ฝ์ค๋ฒํธ, COURSE.๊ณผ๋ชฉ๋ช , COUNT(์๊ฐ์ ์ฒญ.ํ๋ฒ), AVG(์๊ฐ์ ์ฒญ.์ฑ์ ) FROM COURSE INNER JOIN ์๊ฐ์ ์ฒญ ON COURSE.์ฝ์ค๋ฒํธ = ์๊ฐ์ ์ฒญ.์ฝ์ค๋ฒํธ GROUP BY COURSE.์ฝ์ค๋ฒํธ, COURSE.๊ณผ๋ชฉ๋ช ; 4. SELECT ํ๊ณผ.ํ๊ณผ๋ช , COUNT (*) FROM ํ๊ณผ INNER JOIN COURSE ON ํ๊ณผ.ํ๊ณผ๋ฒํธ = COURSE.ํ๊ณผ์ ๋ณด GROUP BY ํ๊ณผ.ํ๊ณผ๋ช HAVING COUNT (*) >= 3; 5. SELECT ๊ณผ๋ชฉ๋ช , ํ์ FROM COURSE WHERE ์ฝ์ค๋ฒํธ IN (SELECT ์๊ฐ์ ์ฒญ.์ฝ์ค๋ฒํธ FROM ์๊ฐ์ ์ฒญ WHERE ํ๊ธฐ LIKE "2013-2"); 6. SELECT ๊ณผ๋ชฉ๋ช FROM COURSE WHERE (SELECT COUNT (*) FROM ์๊ฐ์ ์ฒญ WHERE COURSE.์ฝ์ค๋ฒํธ = ์๊ฐ์ ์ฒญ.์ฝ์ค๋ฒํธ) >= 2;
ย
๋๊ธ