Final Note
1. ์ธ๋ฑ์ฑ (Indexing) - B+ Tree
๊ฐ์ฅ ํ์คํ๊ฒ ๋์ค๋ ์ ํ์ผ๋ก, B+ Tree์ ๊ตฌ์กฐ ๋ณํ๋ฅผ ์ง์ ๊ทธ๋ฆด ์ ์์ด์ผ ํจ.
- B+ Tree ์ฐ์ฐ: ์ด๊ธฐํ ์ํ์์ ์์ํ์ฌ ๊ฐ์ ์ฝ์ (Insert) ๋ฐ ์ญ์ (Delete) ๊ณผ์ ์ํ
- ๊ตฌ์กฐ ๋ณํ: ์ฝ์ ์ ๋ ธ๋ ๋ถํ (Split)๊ณผ ์ญ์ ์ ๋ณํฉ(Merge) ๊ณผ์ ์ ํฌํจํ์ฌ ์ต์ข ๊ฒฐ๊ณผ ํธ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ
2. ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ๋ฐ ์ต์ ํ (Query Processing & Optimization)
๊ณ์ฐ ๋ฌธ์ ๊ฐ ๋ค์ ์ถ์ ๋๋ ํํธ. ๊ณต์์ ์ ํํ ์๊ธฐํด์ผ
- ๋น์ฉ(Cost) ๊ณ์ฐ: ๋ ๋ฆด๋ ์ด์
์กฐ์ธ ์ ๊ฐ ๋ฐฉ๋ฒ๋ณ Block Transfer ํ์์ Seek ํ์ ๊ตฌํ๊ธฐ
- ๋์ ์๊ณ ๋ฆฌ์ฆ: Nested-loop join, Block nested-loop join, Merge join ๋ฑ
- ์กฐ์ธ ์ต์ ํ (Join Optimization)
- 3๊ฐ์ ๋ฆด๋ ์ด์ (R1, R2, R3)์ ์กฐ์ธํ ๋, ์ฃผ์ด์ง ํํ ์์ V๊ฐ(Distinct values)์ ๊ธฐ๋ฐ์ผ๋ก ์กฐ์ธ ์์ ๊ฒฐ์
- ์กฐ์ธ ํ ๊ฒฐ๊ณผ ๋ฆด๋ ์ด์ ์ ํฌ๊ธฐ(Tuple ์) ์์ธก
- ๋ ํจ์จ์ ์ธ ์กฐ์ธ ๋ฐฉ๋ฒ ์ฐพ๊ธฐ
3. ํธ๋์ญ์ ๊ด๋ฆฌ (Transaction Management)
์ค์ผ์ค์ ์ ํฉ์ฑ๊ณผ ์ฑ์ง์ ํ๋จํ๋ ์ด๋ก ๋ฐ ํ๋ณ ๋ฌธ์
- ์ค์ผ์ค ์ฑ์ง ํ๋ณ (OX ๋๋ ๋จ๋ตํ)
- ์ฃผ์ด์ง ์ค์ผ์ค์ด Conflict Serializable ํ์ง ํ๋จ
- Recoverable Schedule์ธ์ง ํ๋จ
- Cascadeless Schedule์ธ์ง ํ๋จ
- ๋์์ฑ ์ ์ด (Concurrency Control)
- Lock / Unlock ์์ ๋ฐ ํ๋กํ ์ฝ ๊ด๋ จ ๋ฌธ์
- ๊ฐ ํธ๋์ญ์ ์ ๊ณต์ ๋ฐ์ดํฐ R/W ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ค์ผ์ค ๋ถ์
4. ํ๋ณต ์์คํ (Recovery System)
๋ก๊ทธ ๊ธฐ๋ฐ ํ๋ณต ๊ธฐ๋ฒ์ ๋ํ ์ดํด๋ฅผ ๋ฌผ์. PPT ์์ ์ํฉ์ ์ ๋ด๋๋ ๊ฒ์ด ์ค์
- ๋ก๊ทธ ๊ธฐ๋ก ๋ฐ ๋ณต๊ตฌ: ์ฒดํฌํฌ์ธํธ(Checkpoint)์ ์ฅ์ ๋ฐ์ ์์ (Failure)์ด ์ฃผ์ด์ก์ ๋ ๋ก๊ทธ ์ํ ๋ถ์
- Undo / Redo
- ์ด๋ค ํธ๋์ญ์ ์ Undo ๋๋ Redo ํด์ผ ํ๋์ง ํ๋จ
- ๋ณต๊ตฌ ๊ณผ์ ์์์ ๋ณ์ ๊ฐ ๋ณํ ๋ฐ ์์ ์์
5. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ (Relational Database Design)
๊ธฐ๋ง ๋ฒ์๋ ์๋์ง๋ง ์ค๊ฐ๊ณ ์ฌ ๋ฒ์์์ 1๋ฌธ์ ๊ธฐ์ด์ ์ธ ๋ด์ฉ ์ถ์
- ์ ๊ทํ (Normalization): ์ฃผ์ด์ง ๋ฆด๋ ์ด์ ์ 3NF(์ 3์ ๊ทํ)๋ก ๋ณํํ๊ธฐ
- ๊ธฐํ ๊ฐ๋ฅ์ฑ: BCNF ๋ถํด, Canonical Cover, ํ๋ณดํค(Candidate Key) ์ฐพ๊ธฐ ์ค ํ๋
์ ๋ฆฌํด์ฃผ์ Final Note์ ์กฑ๋ณด(๊ธฐ์ถ ๊ฒฝํฅ)๋ฅผ ๋ฐํ์ผ๋ก, ์ค์ ์ํ์ ๋์ฌ ๋ฒํ ๋ณํ ๋ฌธ์ 5์ธํธ๋ฅผ ์ถ์ ํ์ต๋๋ค.
๊ต์ฌ ์ฐ์ต๋ฌธ์ ์คํ์ผ์ ์ ์งํ๋, ์กฑ๋ณด์์ ์ธ๊ธ๋ ํฌ์ธํธ(๊ณ์ฐ, ๊ทธ๋ฆฌ๊ธฐ, OX ํ๋จ, ๋ก๊ทธ ๋ถ์)๋ฅผ ์ง์ค์ ์ผ๋ก ๋ฐ์ํ์ต๋๋ค.
1. Indexing (B+ Tree)
์ ํ: ์ฝ์ /์ญ์ ์ ๋ฐ๋ฅธ ๊ตฌ์กฐ ๋ณํ ๊ทธ๋ฆฌ๊ธฐ (์กฑ๋ณด 1์์)
[English Problem] Construct a B+-tree for the following set of key values: . Assume that the tree is initially empty and values are added in ascending order. Construct the tree for the case where the number of pointers in each node is 4 (). After construction, show the steps to delete the value 23 and describe how the tree structure changes (merge or redistribution).
[ํ๊ตญ์ด ๋ฒ์ญ] ํค ๊ฐ ์งํฉ ์ ๋ํด B+ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ์์ค. ํธ๋ฆฌ๋ ์ด๊ธฐ์ ๋น์ด ์์ผ๋ฉฐ ๊ฐ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฅ๋๋ค๊ณ ๊ฐ์ ํ๋ค. ๊ฐ ๋ ธ๋์ ํฌ์ธํฐ ๊ฐ์๊ฐ 4๊ฐ()์ธ ๊ฒฝ์ฐ์ ๋ํด ํธ๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ์์ค. (์ฆ, ํ ๋ ธ๋์ ํค๋ ์ต๋ 3๊ฐ๊น์ง ์ ์ฅ ๊ฐ๋ฅ). ๊ตฌ์ถ ํ, ๊ฐ 23์ ์ญ์ ํ๋ ๊ณผ์ ์ ๋ณด์ด๊ณ , ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง(๋ณํฉ ๋๋ ์ฌ๋ถ๋ฐฐ) ์ค๋ช ํ์์ค.
[Solution Guide]
- ๊ตฌ์ฑ (, Max Key=3): 3๊ฐ๊ฐ ์ฐจ๋ฉด ์ชผ๊ฐ์ง๋๋ค(Split).
- ์ต์ข ํธ๋ฆฌ๋ Root๊ฐ ์๊ณ , ์ค๊ฐ ๋ ๋ฒจ์ด ์๊ธฐ๋ฉฐ, ๋ฆฌํ ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋ ํํ๊ฐ ๋ฉ๋๋ค.
- ์ญ์ (23 ์ญ์ ):
- 23์ด ์๋ ๋ฆฌํ ๋ ธ๋์์ ๊ฐ์ ์ง์๋๋ค.
- ์ญ์ ํ ํด๋น ๋ ธ๋์ ํค ๊ฐ์๊ฐ ์ต์ ์กฐ๊ฑด(๊ฐ ์๋๋ผ ๋ณดํต ์ ๋ฐ, ์ฌ๊ธฐ์๋ 1๊ฐ ํน์ 2๊ฐ ๋ฏธ๋ง์ผ ๋)์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด(Underflow), ํ์ ๋ ธ๋(Sibling)์์ ๋น๋ ค์ค๊ฑฐ๋(Redistribution), ํ์ ์ ํฉ์นฉ๋๋ค(Merge).
- ์ด ๋ฌธ์ ์์๋ ํ์ ๋ ธ๋์ **๋ณํฉ(Merge)**์ด ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ณํฉ ํ ๋ถ๋ชจ ๋ ธ๋์ ํฌ์ธํฐ๋ ์กฐ์ ํด์ผ ํฉ๋๋ค.
2. Query Processing (Cost Calculation)
์ ํ: ์กฐ์ธ ๋น์ฉ(Block Transfer, Seek) ๊ณ์ฐ (๊ณต์ ์๊ธฐ ํ์)
[English Problem] Let relations and have the following properties:
- Number of tuples of :
- Number of blocks of :
- Number of tuples of :
- Number of blocks of :
- Memory buffer size: blocks
Calculate the cost (number of block transfers and seeks) for a Block Nested-Loop Join, assuming is the outer relation and is the inner relation. Assume worst-case seek cost.
[ํ๊ตญ์ด ๋ฒ์ญ] ๋ฆด๋ ์ด์ ์ ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์์ฑ์ ๊ฐ์ง๋ค๊ณ ํ์:
- ์ ํํ ์: , ์ ๋ธ๋ก ์:
- ์ ํํ ์: , ์ ๋ธ๋ก ์:
- ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ ํฌ๊ธฐ: ๋ธ๋ก
์ด ์ธ๋ถ(Outer), ๊ฐ ๋ด๋ถ(Inner) ๋ฆด๋ ์ด์ ์ด๋ผ๊ณ ๊ฐ์ ํ ๋, **๋ธ๋ก ์ค์ฒฉ ๋ฃจํ ์กฐ์ธ(Block Nested-Loop Join)**์ ๋น์ฉ(๋ธ๋ก ์ ์ก ํ์์ ํ์(Seek) ํ์)์ ๊ณ์ฐํ์์ค. (์ต์ ์ ํ์ ๋น์ฉ์ ๊ฐ์ ํ ๊ฒ).
[Solution Guide]
- ๊ณต์ (Block Nested-Loop):
- ๋ธ๋ก ์ ์ก(Transfers):
- (์ฐธ๊ณ : ๋ ์ ๋ ฅ ๋ฒํผ์ฉ. ๋ฉ๋ชจ๋ฆฌ์ ์ ์ต๋ํ ์ ์ฌํ๊ณ ๋ฅผ ํ ๋ฐํด ๋)
- ํ์(Seeks):
- ๋ธ๋ก ์ ์ก(Transfers):
- ๊ณ์ฐ:
- Chunk ๊ฐ์ = (๋ฉ๋ชจ๋ฆฌ์ 2๋ฒ ๋๋์ด ์ ์ฌ ๊ฐ๋ฅ)
- Block Transfers:
- Seeks: (ํน์ ์ด๊ธฐ ํ์ ํฌํจ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฅผ 2๋ฒ ์ฝ์ด์ผ ํ๋ฏ๋ก ํ ๊ทผ์ฌ์น)
3. Transaction Management (Schedule Properties)
์ ํ: Conflict Serializable, Recoverable, Cascadeless ํ๋จ (OX ๋ฌธ์ )
[English Problem] Consider the following schedule involving transactions and :
- Is this schedule Conflict Serializable? Explain why or why not using a precedence graph.
- Is this schedule Recoverable?
- Is this schedule Cascadeless?
[ํ๊ตญ์ด ๋ฒ์ญ] ํธ๋์ญ์ ๊ฐ ํฌํจ๋ ๋ค์ ์ค์ผ์ค ๋ฅผ ๊ณ ๋ คํ์์ค:
- ์ด ์ค์ผ์ค์ **์ถฉ๋ ์ง๋ ฌ ๊ฐ๋ฅ(Conflict Serializable)**ํ๊ฐ? ์ฐ์ ์์ ๊ทธ๋ํ(Precedence Graph)๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ฅผ ์ค๋ช ํ์์ค.
- ์ด ์ค์ผ์ค์ **ํ๋ณต ๊ฐ๋ฅ(Recoverable)**ํ๊ฐ?
- ์ด ์ค์ผ์ค์ ์ฐ์ ๋ณต๊ท๊ฐ ์๋(Cascadeless) ์ค์ผ์ค์ธ๊ฐ?
[Solution Guide]
- Conflict Serializable? No.
- (Edge )
- (Edge )
- (Edge )
- ๊ทธ๋ํ์ ์ฌ์ดํด์ด ์กด์ฌํ๋ฏ๋ก ์ง๋ ฌ ๋ถ๊ฐ๋ฅ. (Blind Write/Lost Update ๋ฌธ์ )
- Recoverable? Yes.
- ๋ ์ด ์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ง ์์(Blind Write). ์์กด์ฑ ์์. ์ปค๋ฐ ํ ์ปค๋ฐ๋จ.
- Cascadeless? Yes.
- Dirty Read()๊ฐ ๋ฐ์ํ์ง ์์์ผ๋ฏ๋ก ์ฐ์ ๋ณต๊ท ๋ฌธ์ ์์.
4. Recovery System (Log Analysis)
์ ํ: ์ฒดํฌํฌ์ธํธ ์ดํ Crash ๋ฐ์ ์ Redo/Undo ๋ฆฌ์คํธ ๋ฐ ๋ณ์ ๊ฐ (์กฑ๋ณด ์๋ฒฝ ๋์)
[English Problem] Consider the following log records. Suppose the system crashes right after the last log record is written to stable storage.
1. <T0, start>
2. <T0, A, 1000, 900>
3. <T1, start>
4. <checkpoint {T0, T1}>
5. <T1, B, 2000, 2100>
6. <T0, commit>
7. <T2, start>
8. <T2, C, 500, 400>
9. <T2, abort> <-- CRASH!
- List the transactions that must be in the Redo-List and Undo-List.
- What is the final value of A, B, and C after the recovery process is completed?
[ํ๊ตญ์ด ๋ฒ์ญ] ๋ค์ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ ๊ณ ๋ คํ์์ค. ๋ง์ง๋ง ๋ก๊ทธ ๋ ์ฝ๋ ๊ฐ ์์ ์ ์ฅ ์ฅ์น์ ๊ธฐ๋ก๋ ์งํ ์์คํ ์ถฉ๋(Crash)์ด ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ์.
- Redo ๋ฆฌ์คํธ์ Undo ๋ฆฌ์คํธ์ ํฌํจ๋์ด์ผ ํ ํธ๋์ญ์ ์ ๋์ดํ์์ค.
- ํ๋ณต ๊ณผ์ ์ด ์๋ฃ๋ ํ A, B, C์ ์ต์ข ๊ฐ์ ์ผ๋ง์ธ๊ฐ?
[Solution Guide]
- Lists:
- Analysis: ์ฒดํฌํฌ์ธํธ ์์ Active . ์ดํ ๋ Commit, ๋ Start ํ Abort, ์ ์๋ฌด ๊ธฐ๋ก ์์(Active ์ํ๋ก ๋๋จ).
- Redo-List: (Commit ๋จ), (Log์ ์์ผ๋ ์ผ๋จ Redo ๋์์ด๊ธด ํจ, ํน์ ARIES์์๋ History Repeat๋ฅผ ์ํด ๋ชจ๋ ๋ด์ฉ Redo), (Log ์์).
- ์ํ ๋ต์์ฉ: "Commit ๋ ํธ๋์ญ์ ๋ง Redo"๋ผ๊ณ ๋ฐฐ์ด ๊ฒฝ์ฐ ๋ง Redo. ํ์ง๋ง ์ต์ ARIES๋ All Redo. (๊ต์ฌ ๊ธฐ์ค: Redo, Undo).
- Undo-List: (๋๋์ง ์์), (Abort ๋จ).
- Final Values:
- A: 900 ( Commit Redo New Value ์ ์ง)
- B: 2000 ( ๋ฏธ์๋ฃ Undo Old Value ๋ณต๊ตฌ)
- C: 500 ( Abort Undo Old Value ๋ณต๊ตฌ. ์ฃผ์: ๊ฐ Abort ๋ก๊ทธ๊น์ง ์ผ์ผ๋ฏ๋ก ํ๋ณต ๊ณผ์ ์์ ๋กค๋ฐฑ ์๋ฃ๋จ)
๋ค, ์์ฒญํ์ ๋๋ก ์์ฑ์ A๋ถํฐ H๊น์ง(8๊ฐ) ๋๋ ค์, ์กฐ๊ธ ๋ ๋ณต์กํ ์ข ์์ฑ ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ 3์ ๊ทํ(3NF) ๋ณํ ๋ฌธ์ ๋ฅผ ์ถ์ ํด ๋๋ฆฝ๋๋ค.
์ด ๋ฌธ์ ๋ ํ๋ณดํค ์ฐพ๊ธฐ, ์ดํ์ ์ข ์์ฑ(Transitive Dependency), ๋ถ๋ถ ํจ์ ์ข ์์ฑ(Partial Dependency) ๊ฐ๋ ์ ๋ชจ๋ ํ ์คํธํ ์ ์๋ ์์ฃผ ์ข์ ์ ํ์ ๋๋ค.
๐ Relational Database Design (Advanced)
[English Problem] Consider the relation schema and the following set of functional dependencies :
- Find the candidate key(s) for . Show the closure computation to justify your answer.
- Explain why this relation is not in 3NF. Identify all functional dependencies that violate the 3NF condition.
- Decompose into a set of relations that are in 3NF. Ensure the decomposition is lossless and dependency-preserving.
[ํ๊ตญ์ด ๋ฒ์ญ] ๋ค์ ํจ์์ ์ข ์์ฑ ์งํฉ ๋ฅผ ๊ฐ์ง ๋ฆด๋ ์ด์ ์คํค๋ง ๋ฅผ ๊ณ ๋ คํ์์ค:
- ์ ํ๋ณดํค(Candidate Key)๋ฅผ ๋ชจ๋ ์ฐพ์ผ์์ค. ๋ต์ ์ ๋นํํ๊ธฐ ์ํด ํํฌ(Closure) ๊ณ์ฐ ๊ณผ์ ์ ๋ณด์ด์์ค.
- ์ด ๋ฆด๋ ์ด์ ์ด ์ ์ 3์ ๊ทํ(3NF)์ด ์๋์ง ์ค๋ช ํ์์ค. 3NF ์กฐ๊ฑด์ ์๋ฐํ๋ ๋ชจ๋ ํจ์์ ์ข ์์ฑ์ ์๋ณํ์์ค.
- ์ 3NF๋ฅผ ๋ง์กฑํ๋ ๋ฆด๋ ์ด์ ์งํฉ์ผ๋ก ๋ถํดํ์์ค. ๋ถํด๋ ๋ฌด์์ค ์กฐ์ธ(Lossless join)๊ณผ ์ข ์์ฑ ๋ณด์กด(Dependency preservation)์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
๐ก Solution Guide (ํ์ด ๋ฐ ํด์ค)
1. ํ๋ณดํค ์ฐพ๊ธฐ (Finding Candidate Key)
ํ๋ณดํค๋ฅผ ์ฐพ๊ธฐ ์ํด, ์ด๋ค ์์ฑ๋ค์ด ๋ค๋ฅธ ๋ชจ๋ ์์ฑ์ ๊ฒฐ์ ํ ์ ์๋์ง ํํฌ(Closure)๋ฅผ ๊ตฌํด๋ด ๋๋ค.
๊ด์ฐฐ:
- ์ ๋ ๊ทธ ์ด๋ค ์ข ์์ฑ์ ์ค๋ฅธ์ชฝ(RHS)์๋ ๋ํ๋์ง ์์ต๋๋ค. ์ฆ, ์ ๋ ๋ฐ๋์ ํค์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
- ์ ๊ฒฐํฉ์ด ์ ์ฒด๋ฅผ ๊ฒฐ์ ํ๋์ง ํ์ธํด ๋ด ์๋ค.
Closure of :
- Start with .
- Use : add . Now .
- Use : add . Now .
- Use and : add . Now .
- Use : add .
- Use : add .
- Result: (๋ชจ๋ ์์ฑ ํฌํจ)
๐ Candidate Key:
2. 3NF ์๋ฐ ๋ถ์ (Violation Check)
3NF์ ์กฐ๊ฑด: ํจ์์ ์ข ์์ฑ ์ ๋ํด, ๋ค์ ์ค ํ๋๋ผ๋ ๋ง์กฑํด์ผ ํฉ๋๋ค.
- ๊ฐ ์๋ช ํ๋ค (Trivial, ).
- ๊ฐ ์ํผํค(Superkey)์ด๋ค.
- ์ ๋ชจ๋ ์์ฑ์ด ํ๋ณดํค์ ์ผ๋ถ(Prime attribute)์ด๋ค.
์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ ์๋ฐ ์ฌ๋ก๋ฅผ ์ฐพ์ต๋๋ค:
- :
- ๋ ์ํผํค๊ฐ ์๋ (ํ๋ณดํค ์ ์ผ๋ถ์ผ ๋ฟ).
- ๋ Prime attribute๊ฐ ์๋.
- ์๋ฐ (Partial Dependency).
- , :
- ๋ ์ํผํค๊ฐ ์๋.
- ์๋ฐ (Transitive Dependency).
- :
- ๋ ์ํผํค๊ฐ ์๋.
- ์๋ฐ (Transitive Dependency).
- :
- ๋ ์ํผํค๊ฐ ์๋.
- ์๋ฐ (Transitive Dependency).
3. 3NF ๋ถํด (Decomposition)
3NF ๋ถํด ์๊ณ ๋ฆฌ์ฆ(Canonical Cover ๊ธฐ๋ฐ ํฉ์ฑ)์ ์ฌ์ฉํ์ฌ ๊ฐ ์ข ์์ฑ์ ๋ณ๋์ ํ ์ด๋ธ๋ก ๋ง๋ญ๋๋ค.
๋ถํด๋ ๋ฆด๋ ์ด์ ์งํฉ:
- From : ๐
- From : ๐
- From and : (D๊ฐ ๊ฐ์ผ๋ฏ๋ก ํฉ์น ์ ์์) ๐
- From : ๐
- From : ๐
๊ฒ์ฆ:
- ์๋ ํ๋ณดํค ๋ฅผ ํฌํจํ๋ ๋ฆด๋ ์ด์
์ด ์๋๊ฐ?
- ๋ค, ๊ฐ ํค๋ฅผ ํฌํจํ๋ฏ๋ก ๋ณ๋๋ก ํค๋ฅผ ์ ์ฅํ๋ ๋ฆด๋ ์ด์ ์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
์ต์ข ์ ๋ต (Final Schema):
(๋ฐ์ค์ ๊ฐ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธํค)

