[DB Theory] Normalization
๐งฉ Relation
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์ ์ฌ์ ์ ๋ฆด๋ ์ด์ (Relation)์ด๋ผ๋ ๊ฐ๋ ์ ์ ํํ ํด๋ถํ๋ ๊ฒ์์ ์์ํฉ๋๋ค. ํํ ์ค๋ฌด์์ โํ ์ด๋ธโ๊ณผ โ๋ฆด๋ ์ด์ โ์ ํผ์ฉํ์ฌ ๋ถ๋ฅด๊ณค ํ์ง๋ง, ์ ๊ทํ์ ๋ ผ๋ฆฌ์ ์๋ฐํจ์ ํ๋ณดํ๊ธฐ ์ํด์๋ ์ด ๋์ ์ฒ ์ ํ ๊ตฌ๋ถํด์ผ ํฉ๋๋ค. ํ ์ด๋ธ์ด ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ์์ํ๋ ์ฉ์ด๋ผ๋ฉด, ๋ฆด๋ ์ด์ ์ ์ํ์ ์งํฉ๋ก ์ ๋ฟ๋ฆฌ๋ฅผ ๋ ๋ ผ๋ฆฌ์ ์ถ์ํ์ ๋๋ค.
๋ฆด๋ ์ด์ ์ ์ํ์ ๋ณธ์ง
๋ฆด๋ ์ด์ ์ ๋ณธ์ง์ ์ผ๋ก ํํ(Tuple)๋ค์ ์งํฉ์ ๋๋ค. ์งํฉ๋ก ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฆด๋ ์ด์ ๋ด์์ ํํ์ ์์๋ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ, ์ค๋ณต๋ ํํ ๋ํ ์กด์ฌํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ ์ผํ๊ฒ ์๋ณ ๊ฐ๋ฅํด์ผ ํ๋ค๋ ์ด ๋จ์ํ ์ ์ ๊ฐ ์ ๊ทํ์ ๋์ ์ ์ ๋๋ค.
์ํ์ ์งํฉ๊ณผ ๋ฆด๋ ์ด์
๋ฆด๋ ์ด์ ๋ชจ๋ธ์ ์ฐฝ์์ E.F. Codd๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์งํฉ๋ก (Set Theory)์ n-ํญ ๋ฆด๋ ์ด์ (n-ary Relation) ๊ฐ๋ ์ ๋์ ํ์ต๋๋ค. ์ด๋ ๋จ์ํ ํ๊ณผ ์ด์ ๋ง์ถ๋ ์์ ์ ๋์ด, ๊ฐ ์์ฑ(Attribute)์ด ๊ฐ์ง ์ ์๋ ๊ฐ์ ์งํฉ์ธ ๋๋ฉ์ธ(Domain)๋ค์ ๋ฐ์นด๋ฅดํธ ๊ณฑ(Cartesian Product)์ ๋ถ๋ถ ์งํฉ์ผ๋ก ๋ฆด๋ ์ด์ ์ ์ ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ๋ฒ ๋๋ฉ์ธ $D_1$๊ณผ ์ด๋ฆ ๋๋ฉ์ธ $D_2$๊ฐ ์๋ค๋ฉด, ์ด๋ค์ ๋ฐ์นด๋ฅดํธ ๊ณฑ $D_1 \times D_2$๋ ๋ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ํ๋ฒ๊ณผ ์ด๋ฆ์ ์กฐํฉ์ ํฌํจํฉ๋๋ค. ์ค์ โํ์โ ๋ฆด๋ ์ด์ ์ ์ด ๋ฐฉ๋ํ ์กฐํฉ ์ค ํ์ค ์ธ๊ณ์ ์ค์ฒด(Entity)์ ์ผ์นํ๋ ์ ํจํ ํํ๋ค๋ง์ ์ ํ์ ์ผ๋ก ๋ณด์ ํ๋ ์ํ์ ๋ถ๋ถ ์งํฉ์ ๋๋ค.
์ด๋ฌํ ์ํ์ ๊ธฐ์ด๋ ์ ๊ทํ ๊ณผ์ ์์ ๋ฆด๋ ์ด์ ์ ๋ถํดํ๊ฑฐ๋ ๊ฒฐํฉํ ๋, ๋ฐ์ดํฐ์ ๋ฌด์์ค์ฑ(Losslessness)์ ์ฆ๋ช ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๊ฐ ๋ฉ๋๋ค. ๋ฆด๋ ์ด์ ๋ด์ ๋ชจ๋ ์์ฑ ๊ฐ์ โ์์์ (Atomic)โ์ด์ด์ผ ํ๋ค๋ ์์น ์ญ์ ์งํฉ๋ก ์ ๋จ์์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ฅ์น์ ๋๋ค. ๋ฆฌ์คํธ๋ ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ง ์๋ ์ด ์๊ฒฉํจ์ด ์คํ๋ ค ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์์ธก ๊ฐ๋ฅ์ฑ์ ๊ทน๋ํํฉ๋๋ค.
์คํค๋ง์ ์ธ์คํด์ค์ ์ ์
๋ฆด๋ ์ด์ ์ ์ดํดํ๋ ๋ ๋ค๋ฅธ ์ถ์ โ์ ์ ์ธ ๊ตฌ์กฐโ์ โ๋์ ์ธ ์ํโ์ ๋ถ๋ฆฌ์ ๋๋ค. ์ด๋ฅผ ๊ฐ๊ฐ ์คํค๋ง(Schema)์ ์ธ์คํด์ค(Instance)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ์คํค๋ง(Schema): ๋ฆด๋ ์ด์ ์ ์ด๋ฆ, ์์ฑ์ ์ด๋ฆ๊ณผ ํ์ , ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๊ฐ ์ค์ํด์ผ ํ ์ ์ฝ ์กฐ๊ฑด(Integrity Constraints)์ ์ ์ํ๋ ๋ ผ๋ฆฌ์ ์ค๊ณ๋์ ๋๋ค. ์ด๋ โ๋ดํฌ(Intension)โ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ์๊ฐ์ด ์ง๋๋ ์ฝ๊ฒ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ์ ๋ผ๋ ์ญํ ์ ํฉ๋๋ค. ์ ๊ทํ๋ ๋ฐ๋ก ์ด ์คํค๋ง๋ฅผ ์ต์ ํํ์ฌ ๋ ผ๋ฆฌ์ ๋ชจ์์ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ๋๋ค.
- ์ธ์คํด์ค(Instance): ํน์ ์์ ์ ๋ฆด๋ ์ด์ ์ ์กด์ฌํ๋ ์ค์ ํํ๋ค์ ์งํฉ์ ๋๋ค. ์ด๋ โ์ธ์ฐ(Extension)โ์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ , ์์ ์ ๋ฐ๋ผ ๋์์์ด ๋ณํํฉ๋๋ค.
์์ง๋์ด๋ง ๊ด์ ์์ ์ค์ํ ์ง์ ์, ์ด๋ ํ ์ธ์คํด์ค ๋ณํ ์์์๋ ์คํค๋ง๊ฐ ์ ์ํ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋์ ์ ์ง๋์ด์ผ ํ๋ค๋ ์ ์ ๋๋ค. ๋ฆด๋ ์ด์ ๋ชจ๋ธ์ ์ธ์คํด์ค์ ํน์ ํํ์ ์์กดํ์ง ์๊ณ , ์คํค๋ง์ ๊ตฌ์กฐ์ ์ ์๋ง์ผ๋ก ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ด๋ณดํ ์ ์๋ ์ํ์ ์ ๋น์ฑ์ ๋ถ์ฌํฉ๋๋ค.
๊ฒฐ๊ตญ ์ ๊ทํ๋, ๋ณํ๋ฌด์ํ ์ธ์คํด์ค๋ฅผ ์์ฉํ๊ธฐ ์ํด ๊ฐ์ฅ ๊ฒฌ๊ณ ํ๊ณ ํ๋ค๋ฆฌ์ง ์๋ ์คํค๋ง๋ฅผ ์ค๊ณํ๋ ๊ณตํ์ ์์ฌ๊ฒฐ์ ์ ์ฐ์์ ๋๋ค. ์์ฑ ๊ฐ์ ๋ ผ๋ฆฌ์ ๊ฒฐํฉ๋๊ฐ ์คํค๋ง ์์ค์์ ์๋ฒฝํ๊ฒ ์ ์๋ ๋, ์ฐ๋ฆฌ๋ ๋น๋ก์ ๋ฐ์ดํฐ์ ์ํธ๋กํผ๋ฅผ ํต์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๐งฉ Anomaly
์ ๊ทํ๋์ง ์์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ฒ๋ณด๊ธฐ์ ํธ๋ฆฌํด ๋ณด์ผ ์ ์์ผ๋, ์๊ฐ์ด ํ๋ฅผ์๋ก ์์คํ ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฐ์๋จน๋ โ์ด์ ํ์(Anomaly)โ์ด๋ผ๋ ๋๊ฐ๋ฅผ ์น๋ฅด๊ฒ ๋ฉ๋๋ค. ์ด์ ํ์์ ๋ฐ์ดํฐ์ ์ค๋ณต์ฑ(Redundancy)์ด ๋ ผ๋ฆฌ์ ์ผ๊ด์ฑ์ ์๋ํ ๋ ๋ฐ์ํ๋ ์ค๊ณ์ ๋ถ์์ฉ์ ๋๋ค. ๋งํด ํ์ธ๋ฌ๊ฐ ๊ฐ์กฐํ๋ฏ, ๋์ ์ค๊ณ๋ ๋จ์ํ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ์ ๋์ด, ๋ฐ์ดํฐ ์์ฒด๊ฐ ์ค์ค๋ก๋ฅผ ๋ถ์ ํ๊ฒ ๋ง๋๋ ๋ชจ์์ ๋ช์ผ๋ก ์ฐ๋ฆฌ๋ฅผ ์ธ๋ํฉ๋๋ค.
์ฝ์ , ์ญ์ , ๊ฐฑ์ ์ ์ค๋ฅ
์ ๊ทํ๊ฐ ๊ฒฐ์ฌ๋ ๋ฆด๋ ์ด์ ์์ ์ฐ๋ฆฌ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ํํ์ ์น๋ช ์ ์ธ ์ด์ ํ์๊ณผ ๋ง์ฃผํ๊ฒ ๋ฉ๋๋ค.
- ์ฝ์ ์ด์ (Insertion Anomaly): ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค ํ ๋, ๋ถํ์ํ๊ฑฐ๋ ์์น ์๋ ์ ๋ณด๊น์ง ๊ฐ์ ๋ก ์ ๋ ฅํด์ผ ํ๊ฑฐ๋, ํน์ ๋ฐ์ดํฐ ์์ด๋ ์ฝ์ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ ์ํฉ์ ๋๋ค. ์๋ฅผ ๋ค์ด, โ์๊ฐโ ๋ฆด๋ ์ด์ ์ ํ์ ์ ๋ณด์ ๊ณผ๋ชฉ ์ ๋ณด๊ฐ ์์ฌ ์๋ค๋ฉด, ์์ง ๊ณผ๋ชฉ์ ์ ์ฒญํ์ง ์์ ์ ์ ์์ ๊ณผ๋ชฉ ๋ฒํธ(Primary Key์ ์ผ๋ถ)๊ฐ ์๋ค๋ ์ด์ ๋ก ํ์ ์์คํ ์ ๋ฑ๋ก์กฐ์ฐจ ํ ์ ์๋ ์ฌํ๊ฐ ๋ฒ์ด์ง๋๋ค.
- ์ญ์ ์ด์ (Deletion Anomaly): ํํ์ ์ญ์ ํ ๋, ์ญ์ ํ๋ ค๋ ์ ๋ณด์๋ ๋ฌด๊ดํ ์ ์ฉํ ์ ๋ณด๊น์ง ํจ๊ป ์์ค๋๋ ํ์์ ๋๋ค. ์์ ์์์์ ํน์ ๊ณผ๋ชฉ์ ์๊ฐ์์ด ๋จ ํ ๋ช ๋ฟ์ผ ๋, ๊ทธ ํ์์ ์๊ฐ ์ทจ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ฉด ํด๋น ๊ณผ๋ชฉ์ ์์ธ ์ ๋ณด(๊ต์์ง, ๊ฐ์์ค ๋ฑ)๊น์ง ์์คํ ์์ ์๊ตฌํ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํด์ผ ํ ์ํฐํฐ๊ฐ ๋ถ์์ ์ธ ๊ด๊ณ์ ์ญ์ ๋ก ์ธํด ์ฆ๋ฐํด๋ฒ๋ฆฌ๋ ์ ๋ณด์ ๋น๊ฐ์ญ์ ์์ค์ ์๋ฏธํฉ๋๋ค.
- ๊ฐฑ์ ์ด์ (Update Anomaly): ์ค๋ณต๋ ํํ ์ค ์ผ๋ถ๋ง ์์ ๋์ด ๋ฐ์ดํฐ ๊ฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ํ์์ ๋๋ค. ํ์์ ์ ํ๋ฒํธ๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ๊ทธ ํ์์ด ์๊ฐ ์ค์ธ ๋ชจ๋ ํํ์ ์ฐพ์ ์ ๋ฐ์ดํธํ์ง ๋ชปํ๋ค๋ฉด, ์์คํ ์ ๋์ผ ์ธ๋ฌผ์ ๋ํด ์๋ก ๋ค๋ฅธ ์ ํ๋ฒํธ๋ฅผ ๊ฐ์ง ์ฌ๋ฌ ๊ฐ์ โ์ง์คโ์ ๋ณด์ ํ๊ฒ ๋ฉ๋๋ค. ์ด๋ค ํํ์ ์กฐํํ๋๋์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ โ๋ฐ์ดํฐ ๋ถํจ(Data Corruption)โ์ ์์์ ์ ๋๋ค.
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ๊ดด์ ์์ธ
์ด๋ฌํ ํ์๋ค์ ๋จ์ํ โ๋ถํธํจโ์ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์์คํ ์ ์ ๋ขฐ๋๋ฅผ ๋ฌด๋๋จ๋ฆฌ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋ณต์กํ ๋ฐฉ์ด ๋ก์ง์ ๊ฐ์ํ๊ฒ ๋ง๋ญ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํคํ ํธ๋ ์ด๋ฅผ ์ฝ๋(Application level)๋ก ํด๊ฒฐํ๋ ค ํ๊ธฐ๋ณด๋ค, ๋ฆด๋ ์ด์ ์ ๊ตฌ์กฐ์ ๋ถํด๋ฅผ ํตํด ์์ง(Database level) ์์ค์์ ์์ฒ ์ฐจ๋จํด์ผ ํฉ๋๋ค.
์ด์ ํ์์ ๋ฐฉ์นํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ์ด์ ์ ๋ขฐํ ์ ์๋ โSource of Truthโ๊ฐ ์๋, ๋ถํ์ค์ฑ์ด ๊ฐ๋ํ ์ ์ฅ์๋ก ์ ๋ฝํฉ๋๋ค. ์ ๊ทํ๋ ๋ฐ๋ก ์ด๋ฌํ ๋ชจ์์ ์ํ์ ์ผ๋ก ์ฆ๋ช ํ๊ณ , ๊ฐ ์์ฑ์ด ์์ ์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋๋ก ์ฌ๋ฐฐ์นํ๋ ์ ๋ฐํ ์์ง๋์ด๋ง ์์ ์ ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- 1. ๋น์ ๊ทํ๋ ํ
์ด๋ธ ์์ฑ (ํ๋ฒ, ํ์๋ช
, ๊ณผ๋ชฉ๋ฒํธ, ๊ณผ๋ชฉ๋ช
, ๊ต์, ๊ฐ์์ค)
-- PK๋ (student_id, course_id)๋ก ์ค์
CREATE TABLE course_registration (
student_id INT,
student_name VARCHAR(50),
course_id VARCHAR(10),
course_name VARCHAR(50),
professor VARCHAR(50),
room VARCHAR(20),
PRIMARY KEY (student_id, course_id)
);
-- 2. ์ฝ์
์ด์ (Insertion Anomaly)
-- ์ํฉ: ์ ์
์ '๊น์ฒ ์'๋ฅผ ๋ฑ๋กํ๊ณ ์ถ์ง๋ง, ์์ง ์๊ฐ์ ์ฒญ์ ํ์ง ์์.
-- ๋ฌธ์ : course_id๊ฐ PK์ ์ผ๋ถ์ด๋ฏ๋ก NULL์ ํ์ฉํ์ง ์์ ํ์ ์ ๋ณด๋ง์ผ๋ก๋ ์ฝ์
๋ถ๊ฐ.
INSERT INTO course_registration (student_id, student_name, course_id)
VALUES (2024001, '๊น์ฒ ์', NULL); -- Error: Column 'course_id' cannot be null
-- 3. ์ญ์ ์ด์ (Deletion Anomaly)
-- ์ํฉ: '์ด์ํฌ' ํ์์ด ์ ์ผํ๊ฒ ์๊ฐํ๋ 'Database' ๊ณผ๋ชฉ์ ์ทจ์ํจ.
-- ๋ฌธ์ : ํ์ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ฉด 'Database' ๊ณผ๋ชฉ์ ๊ต์(์๋๋ )์ ๊ฐ์์ค(B101) ์ ๋ณด๊น์ง ์์คํ
์์ ์ฆ๋ฐํจ.
DELETE FROM course_registration WHERE student_id = 2024002;
-- ๊ฒฐ๊ณผ์ ์ผ๋ก 'Database' ๊ณผ๋ชฉ์ ๋ํ ๋ชจ๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง.
-- 4. ๊ฐฑ์ ์ด์ (Update Anomaly)
-- ์ํฉ: '์๋๋ ' ๊ต์์ ๊ฐ์์ค์ด 'B101'์์ 'C303'์ผ๋ก ๋ณ๊ฒฝ๋จ.
-- ๋ฌธ์ : ํด๋น ๊ต์์ ๊ณผ๋ชฉ์ ๋ฃ๋ ๋ชจ๋ ํ์์ ํํ์ ์์ ํด์ผ ํจ. ํ๋๋ผ๋ ๋๋ฝ๋๋ฉด ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฐ์.
UPDATE course_registration SET room = 'C303'
WHERE professor = '์๋๋ ' AND student_id = 2024003;
-- 2024004 ํ์์ ํํ์ ์ฌ์ ํ 'B101'๋ก ๋จ์์์ด ๋
ผ๋ฆฌ์ ๋ชจ์ ๋ฐ์.
๐งฉ Functional Dependency
์ ๊ทํ๋ผ๋ ๋ณต์กํ ์์ ์ ์ง๋ํ๊ธฐ ์ํด ์ํคํ ํธ๊ฐ ์์ ์ฅ์ด์ผ ํ ๊ฐ์ฅ ๋ ์นด๋ก์ด ๋ฉ์ค(Scalpel)๋ ๋ฐ๋ก ํจ์์ ์ข ์์ฑ(Functional Dependency, FD)์ ๋๋ค. ๋ฆด๋ ์ด์ ๋ด์ ์์ฑ๋ค์ด ์๋ก ์ด๋ค ๋ ผ๋ฆฌ์ ์ธ๊ณผ๊ด๊ณ๋ก ์ฝํ ์๋์ง ํ์ ํ์ง ๋ชปํ๋ค๋ฉด, ์ ๊ทํ๋ ๋จ์ํ ํ ์ด๋ธ์ ํํธํํ๋ ๋ฌด์๋ฏธํ ์์ ์ ๊ทธ์น๊ณ ๋ง๋๋ค.
ํจ์์ ์ข ์์ฑ์ ์ํ์ ์ผ๋ก ๋งค์ฐ ์๋ฐํ ํ ๋ ์์ ์ ์์ต๋๋ค. ๋ฆด๋ ์ด์ $R$์ ์์ฑ ์งํฉ์ $X$์ $Y$๋ผ๊ณ ํ ๋, ์์์ ๋ ํํ $t_1, t_2$์์ $X$์ ๊ฐ์ด ๊ฐ๋ค๋ฉด($t_1[X] = t_2[X]$) ๋ฐ๋์ $Y$์ ๊ฐ๋ ๊ฐ์์ผ($t_1[Y] = t_2[Y]$) ํฉ๋๋ค. ์ด๋ ์ฐ๋ฆฌ๋ โ$Y$๋ $X$์ ํจ์์ ์ผ๋ก ์ข ์๋๋คโ๊ณ ๋งํ๋ฉฐ, ์ด๋ฅผ $X \to Y$๋ก ํ๊ธฐํฉ๋๋ค. ์ด๋ ๋จ์ํ ๋ฐ์ดํฐ์ ๋์ด์ ๋์ด, ํ์ค ์ธ๊ณ์ ๋น์ฆ๋์ค ๊ท์น์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ํฌ์๋๋ ๊ฐ์ฅ ๊ตฌ์ฒด์ ์ธ ๋ ผ๋ฆฌ์ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ์ ๋๋ค.
๊ฒฐ์ ์์ ์ข ์์์ ์ฌ์
์ด๋ฌํ ํจ์์ ์ข ์์ฑ์ ์์ฑ ๊ฐ์ โ๊ฒฐ์ ๋ก ์ ๊ด๊ณโ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฌ๊ธฐ์ ํ์ดํ์ ์์์ ์ธ $X$๋ฅผ ๊ฒฐ์ ์(Determinant), ๊ฒฐ๊ณผ๊ฐ์ธ $Y$๋ฅผ ์ข ์์(Dependent)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด๋ ์ํ์ ํจ์ $y = f(x)$์ ์๋ฒฝํ ๊ถค๋ฅผ ๊ฐ์ด ํฉ๋๋ค. ์ ๋ ฅ๊ฐ $x$๊ฐ ์ ํด์ง๋ฉด ๊ฒฐ๊ณผ๊ฐ $y$๊ฐ ์ ์ผํ๊ฒ ๊ฒฐ์ ๋๋ฏ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๊ฒฐ์ ์์ ๊ฐ์ ์๋ฉด ์ข ์์์ ๊ฐ์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด ๊ด๊ณ๋ ๋ฐ์ดํฐ์ ์๋ฏธ๋ก ์ (Semantic) ํน์ฑ์์ ๊ธฐ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ โ ์ด๋ฆ์ด๋ผ๋ ์ข
์์ฑ์ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๊ฐ ์์คํ
๋ด์์ ๊ณ ์ ํ๋ฉฐ ํ ์ฌ๋์ ์ด๋ฆ์ ํน์ ํ ์ ์๋ค๋ ๋น์ฆ๋์ค ๊ท์น์์ ํ์ํฉ๋๋ค. ์ค์ํ ์ง์ ์, ์ด ๊ด๊ณ๊ฐ ํ์ฌ ์ ์ฅ๋ ์ธ์คํด์ค์ ์ํด ์ฐ์ฐํ ์ฑ๋ฆฝํ๋ ๊ฒ์ด ์๋๋ผ, ์คํค๋ง ์ค๊ณ ๋จ๊ณ์์ ์๊ตฌํ ๋ณด์ฅ๋์ด์ผ ํ๋ ๊ท์น์ด๋ผ๋ ์ ์
๋๋ค. ๊ฒฐ๊ตญ ํจ์์ ์ข
์์ฑ์ ํ์
ํ๋ ๊ฒ์ ๋ฐ์ดํฐ์ ์ํธ๋กํผ๋ฅผ ํต์ ํ๊ธฐ ์ํด โ๋๊ฐ ๋๊ตฌ๋ฅผ ์ง๋ฐฐํ๋๊ฐโ๋ฅผ ๊ท๋ช
ํ๋ ์ค๊ณ์ ํต์ฌ ๊ณต์ ์
๋๋ค.
ํจ์์ ์ข ์์ ์ ํ๋ณ ํ๋ณ
์ ๊ทํ์ ๋จ๊ณ๋ฅผ ๊ฒฐ์ ์ง๋ ๊ฒ์ ์ข ์์ฑ์ โ์์โ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ธ ๊ฐ์ง ํต์ฌ ๋ฒ์ฃผ๋ก ๋ถ๋ฅํ์ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฒฐํจ์ ์ง๋จํฉ๋๋ค.
- ์์ ํจ์ ์ข ์ (Full Functional Dependency): ์ข ์์๊ฐ ๊ฒฐ์ ์์ โ์ ์ฒดโ์๋ง ์ข ์๋๋ ๊ฒฝ์ฐ์ ๋๋ค. ๋ณตํฉํค๊ฐ ๊ฒฐ์ ์์ผ ๋, ํน์ ์์ฑ์ด ํค์ ์ผ๋ถ๊ฐ ์๋ ์ ์ฒด ์กฐํฉ์ ์ํด์๋ง ๊ฒฐ์ ๋๋ค๋ฉด ์ด๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋งค์ฐ ๊ฒฌ๊ณ ํ ์ํ์ ๋๋ค.
- ๋ถ๋ถ ํจ์ ์ข ์ (Partial Functional Dependency): ๊ฒฐ์ ์๊ฐ ๋ณตํฉํค์์๋ ๋ถ๊ตฌํ๊ณ , ์ข ์์๊ฐ ํค์ ์ผ๋ถ๋ถ์๋ง ๋ฐ์ํ๋ ํ์์ ๋๋ค. ์ด๋ ๋ถํ์ํ ์ ๋ณด๊ฐ ํค์ ๊ณ๋ค๋ฆฌ์ ๋ถ์ด ์ค๋ณต์ ์ผ๊ธฐํ๋ ์ ํธ์ด๋ฉฐ, ์ 2์ ๊ทํ(2NF)์์ ๋๋ ค๋ด์ผ ํ ์ฃผ๋ ํ๊ฒ์ ๋๋ค.
- ์ดํ์ ํจ์ ์ข ์ (Transitive Functional Dependency): ์ง์ ์ ์ธ ๊ด๊ณ๊ฐ ์๋ ์์ฑ๋ค์ด ์ค๊ฐ ๋งค๊ฐ์ฒด๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ์ํ์ ๋๋ค. $X \to Y$์ด๊ณ $Y \to Z$์ฌ์ ๊ฒฐ๊ณผ์ ์ผ๋ก $X \to Z$๊ฐ ์ฑ๋ฆฝํ๋ค๋ฉด, $Z$๋ $X$์ ์ดํ์ ์ผ๋ก ์ข ์๋ ๊ฒ์ ๋๋ค. ์ 3์ ๊ทํ(3NF)์ ๋ฐ๋ก ์ด ์ง๊ฒ๋ค๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋์ด๋ด์ด ๋ฐ์ดํฐ ๊ฐฑ์ ์์ ์ฐ์ ๋ชจ์์ ๋ฐฉ์งํฉ๋๋ค.
์์คํธ๋กฑ์ ์ถ๋ก ๊ท์น
ํ์ค์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์์ญ ๊ฐ์ ์์ฑ์ด ์ฝํ ์์ด ์ข ์์ฑ์ ํ๋์ ํ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๋ ์์ง๋์ด๋ ์์คํธ๋กฑ์ ๊ณต๋ฆฌ(Armstrongโs Axioms)๋ผ๋ ๋ ผ๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์จ๊ฒจ์ง ์ข ์์ฑ์ ์ฐพ์๋ ๋๋ค.
- ์ฌ๊ท์ฑ ๊ท์น (Reflexivity): $Y \subseteq X$์ด๋ฉด, $X \to Y$์ด๋ค. (์๊ธฐ ์์ ์ ์ธ์ ๋ ์์ ์ ๊ฒฐ์ ํจ)
- ๋ถ๊ฐ์ฑ ๊ท์น (Augmentation): $X \to Y$์ด๋ฉด, $XZ \to YZ$์ด๋ค. (์๋ณ์ ๋์ผํ ์์ฑ์ ์ถ๊ฐํด๋ ์ข ์์ฑ์ ์ ์ง๋จ)
- ์ดํ์ฑ ๊ท์น (Transitivity): $X \to Y$์ด๊ณ $Y \to Z$์ด๋ฉด, $X \to Z$์ด๋ค.
์ด ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ๊ท์น์ ์กฐํฉํ๋ฉด โ๋ถํดโ, โ์ฐํฉโ, โ์์ฌ ์ดํโ ๋ฑ ํ์ ๊ท์น์ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์ ๋ง์น ์ํ ๋ฌธ์ ๋ฅผ ํ๋ฏ ์ ๊ตํด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋์ถ๋ ํ์ ์งํฉ(Closure)์ ํด๋น ๋ฆด๋ ์ด์ ์ด ๊ฐ์ง ์ ์๋ ๋ชจ๋ ํ๋ณดํค๋ฅผ ์ฐพ์๋ด๋ ๊ฒฐ์ ์ ๋จ์๊ฐ ๋ฉ๋๋ค. ๊ฒฐ๊ตญ ํจ์์ ์ข ์์ฑ์ ์๋ฒฝํ ์ดํดํ๋ค๋ ๊ฒ์, ๋ฐ์ดํฐ ๊ฐ์ ๊ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ ํ์ ํ์ฌ ๋๊ฐ โ์ง์ ํ ์ฃผ์ธ(Key)โ์ธ์ง๋ฅผ ๊ฐ๋ ค๋ด๋ ๊ณผ์ ๊ณผ ๊ฐ์ต๋๋ค.
๐งฉ Normal Form
์ ๊ทํ(Normal Form)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๊ฐ ๋๋ฌํด์ผ ํ๋ ์ผ๋ จ์ ๋ฌด๊ฒฐ์ฑ ์งํ์ ๋๋ค. ๊ฐ ์ ๊ทํ์ ์ด์ ๋จ๊ณ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค. ์ ๊ทํ ๊ณผ์ ์ ๋จ์ํ ํ ์ด๋ธ์ ์ชผ๊ฐ๋ ํ์๊ฐ ์๋๋ผ, ๋ฐ์ดํฐ ๊ฐ์ ํจ์์ ์ข ์์ฑ์ ์ํ์ ์ผ๋ก ๋ถ์ํ์ฌ โ๋ฌด์์ค ๋ถํด(Lossless Decomposition)โ๋ฅผ ๋ฌ์ฑํ๋ ๊ณ ๋์ ๊ณตํ์ ์ต์ ํ ๊ณผ์ ์ ๋๋ค.
๋ฌด์์ค ์กฐ์ธ ๋ถํด
๋ฆด๋ ์ด์ $R$์ $R_1$๊ณผ $R_2$๋ก ๋ถํดํ์ ๋, ์ด๋ค์ ๋ค์ ์์ฐ ์กฐ์ธ(Natural Join)ํ ๊ฒฐ๊ณผ๊ฐ ์๋์ $R$๊ณผ ์๋ฒฝํ ์ผ์นํด์ผ ํฉ๋๋ค. ๋ง์ฝ ๋ถํด ํ ์กฐ์ธํ์ ๋ ์กด์ฌํ์ง ์๋ ๊ฐ๊ณต์ ํํ(Spurious Tuple)์ด ์์ฑ๋๋ค๋ฉด, ๊ทธ ๋ถํด๋ ์๋ชป๋ ๊ฒ์ ๋๋ค.
์์๊ฐ๊ณผ ์ 1์ ๊ทํ
์ 1์ ๊ทํ(1NF)์ ๋ฆด๋ ์ด์ ์ด ๋๊ธฐ ์ํ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ์๊ฒฉ ์๊ฑด์ ๋๋ค. ๋ชจ๋ ์์ฑ์ ๋๋ฉ์ธ์ด ์์๊ฐ(Atomic Value)์ผ๋ก๋ง ๊ตฌ์ฑ๋์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค. ์ฆ, ํ๋์ ์ปฌ๋ผ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ฃ๊ฑฐ๋(Multi-valued Attribute), ์ ์ฌํ ์์ฑ์ ๋ฐ๋ณต์ ์ผ๋ก ๋์ดํ๋ ๊ตฌ์กฐ(Repeating Group)๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค.
1NF๋ฅผ ์๋ฐํ๋ ์คํค๋ง๋ ์ฟผ๋ฆฌ์ ๋ณต์ก๋๋ฅผ ๋น์ฝ์ ์ผ๋ก ์์น์ํต๋๋ค. ํน์ ์์ฑ ๊ฐ์ ์ผ๋ถ๋ง ๊ฒ์ํ๊ฑฐ๋ ์์ ํ๋ ํ์๊ฐ ๋ถ๊ฐ๋ฅํด์ง๋ฉฐ, ๋ฐ์ดํฐ์ ์ง๊ณ์ ๋ถ์ ๊ธฐ๋ฅ์ด ๋ง๋น๋ฉ๋๋ค. 1NF์ ๋ฌ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ์์ ๋ ผ๋ฆฌ์ ๋จ์๋ก ํํธํํ์ฌ, ํฅํ ์งํ๋ ๋ชจ๋ ์ ๊ทํ ๋จ๊ณ์ ๊ธฐ์ด ์ฒด๋ ฅ์ ํ๋ณดํ๋ ์์ ์ ๋๋ค.
์์ ํจ์ ์ข ์๊ณผ ์ 2์ ๊ทํ
์ 2์ ๊ทํ(2NF)์ ํต์ฌ ํ๊ฒ์ โ๋ถ๋ถ ํจ์ ์ข ์(Partial Functional Dependency)โ์ ๋๋ค. ์ด ๋จ๊ณ๋ ๊ธฐ๋ณธํค๊ฐ ๋ ๊ฐ ์ด์์ ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋ โ๋ณตํฉํค(Composite Key)โ์ผ ๋ ์ฃผ๋ก ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
๊ธฐ๋ณธํค์ ์ผ๋ถ๋ถ์๋ง ์ข ์๋ ์์ฑ์ด ์กด์ฌํ๋ค๋ฉด, ํด๋น ์์ฑ์ ๊ธฐ๋ณธํค ์ ์ฒด์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ด ์๋๋ผ ํค์ ์ผ๋ถ์ ๊ธฐ์ํ๊ณ ์๋ ๊ผด์ ๋๋ค. 2NF๋ ์ด๋ฌํ ๋ถ๋ถ ์ข ์ ์์ฑ๋ค์ ๋ณ๋์ ๋ฆด๋ ์ด์ ์ผ๋ก ๋ถ๋ฆฌํ ๊ฒ์ ์๊ตฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ธฐ๋ณธํค ์ ์ฒด์ ๋ํด์๋ง ์์ฑ๋ค์ด ๊ฒฐ์ ๋๋ โ์์ ํจ์ ์ข ์โ ์ํ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ๊ณผ์ ์ด ์๋ฃ๋๋ฉด, ํน์ ์ํฐํฐ์ ๋ถ์์ ์ธ ์ ๋ณด ๋๋ฌธ์ ๊ธฐ๋ณธ ์ํฐํฐ์ ์ฝ์ ์ด๋ ์ญ์ ๊ฐ ์ ํ๋๋ ์ด์ ํ์์ด ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋ญ๋๋ค.
์ดํ์ ์ข ์๊ณผ ์ 3์ ๊ทํ
์ 3์ ๊ทํ(3NF)์ ๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ๋ค ์ฌ์ด์ ์ข ์ ๊ด๊ณ, ์ฆ โ์ดํ์ ํจ์ ์ข ์(Transitive Functional Dependency)โ์ ์ ๊ฑฐํฉ๋๋ค. $X \to Y$์ด๊ณ $Y \to Z$์ผ ๋ $X \to Z$๊ฐ ์ฑ๋ฆฝํ๋ค๋ฉด, $Z$๋ $X$์ ์ดํ์ ์ผ๋ก ์ข ์๋ ๊ฒ์ ๋๋ค.
์ค๋ฌด์ ๊ด์ ์์ 3NF๋ โ๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ์ ์ค์ง ๊ธฐ๋ณธํค์ ์ํด์๋ง ๊ฒฐ์ ๋์ด์ผ ํ๋คโ๋ ์์น์ผ๋ก ์์ฝ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, โํ๋ฒโ์ด โํ๊ณผโ๋ฅผ ๊ฒฐ์ ํ๊ณ โํ๊ณผโ๊ฐ โ๊ฐ์์คโ์ ๊ฒฐ์ ํ๋ค๋ฉด, ํ๋ฒ ๋ฆด๋ ์ด์ ์ ๊ฐ์์ค ์ ๋ณด๋ฅผ ๋์ด์๋ ์ ๋ฉ๋๋ค. ํ๊ณผ์ ๊ฐ์์ค์ ๊ด๊ณ๋ฅผ ๋ณ๋ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ, ํ๊ณผ ์ ๋ณด๊ฐ ์์ ๋ ๋ ์๋ง ๋ช ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ์ ๋ฐ์ดํธํด์ผ ํ๋ ๊ฐฑ์ ์ด์์ ์ํ์ ์์ฒ ๋ด์ํฉ๋๋ค.
๊ฒฐ์ ์ ๋ณด์๊ณผ BCNF
Boyce-Codd ์ ๊ทํ(BCNF)์ 3NF๋ฅผ ๋์ฑ ์๊ฒฉํ๊ฒ ๋ณด์ํ ํํ์ ๋๋ค. 3NF๋ฅผ ๋ง์กฑํ๋๋ผ๋, ๋ชจ๋ ๊ฒฐ์ ์(Determinant)๊ฐ ํ๋ณดํค(Candidate Key)๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํนํ ์ฌ๋ฌ ๊ฐ์ ํ๋ณดํค๊ฐ ์ค์ฒฉ๋์ด ์กด์ฌํ๋ ๋ณต์กํ ๋ฆด๋ ์ด์ ์์ ์ด๋ฌํ ํ์ ์ด ๋๋ฌ๋ฉ๋๋ค.
BCNF๋ โ๋ชจ๋ ๊ฒฐ์ ์๋ ๋ฐ๋์ ํ๋ณดํค์ฌ์ผ ํ๋คโ๋ ๊ฐ๋ ฅํ ๊ท์น์ ์ธ์๋๋ค. ๋ง์ฝ ํ๋ณดํค๊ฐ ์๋ ์์ฑ์ด ๋ค๋ฅธ ์์ฑ์ ๊ฒฐ์ ํ๊ณ ์๋ค๋ฉด, ๊ทธ ๊ฒฐ์ ๊ด๊ณ ์ญ์ ๋ ๋ฆฝ๋ ๋ฆด๋ ์ด์ ์ผ๋ก ์ถ์ถํด์ผ ํฉ๋๋ค. BCNF๊น์ง ๋๋ฌํ ์คํค๋ง๋ ํจ์์ ์ข ์์ฑ์ ๊ธฐ์ธํ ๋ชจ๋ ์ด์ ํ์์ ์ฌ์ค์ ์ ๊ฑฐํ ์ํ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์์์ฑ์ ๊ทน๋ํํ์ฌ, ์ด๋ค ๋น์ฆ๋์ค ๋ก์ง์ ๋ณํ์๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ๋ ผ๋ฆฌ์ ๋ชจ์์ ๋น ์ง์ง ์๋๋ก ๋ฐฉ์ดํ๋ ์ตํ์ ๋ณด๋ฃจ์ ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-- [Initial: ๋น์ ๊ทํ ์ํ]
-- orders (order_id, customer_id, customer_name, items[item_id, item_name, quantity])
-- ๋ฌธ์ : items ์์ฑ์ด ์์์ ์ด์ง ์์ (๋ค์ค๊ฐ ์์ฑ)
-- [Step 1: ์ 1์ ๊ทํ (1NF)]
-- ์์น: ๋ชจ๋ ์์ฑ์ ์์๊ฐ์ ๊ฐ์ ธ์ผ ํจ.
CREATE TABLE order_1nf (
order_id INT,
customer_id INT,
customer_name VARCHAR(50),
item_id INT,
item_name VARCHAR(50),
quantity INT,
PRIMARY KEY (order_id, item_id)
);
-- [Step 2: ์ 2์ ๊ทํ (2NF)]
-- ์์น: ๋ถ๋ถ ํจ์ ์ข
์ ์ ๊ฑฐ (๊ธฐ๋ณธํค์ ์ผ๋ถ์๋ง ์ข
์๋ ์์ฑ ๋ถ๋ฆฌ)
-- (order_id, item_id) -> quantity (์์ ์ข
์)
-- order_id -> customer_id, customer_name (๋ถ๋ถ ์ข
์)
-- item_id -> item_name (๋ถ๋ถ ์ข
์)
CREATE TABLE order_header ( -- ์ฃผ๋ฌธ ๊ธฐ๋ณธ ์ ๋ณด
order_id INT PRIMARY KEY,
customer_id INT,
customer_name VARCHAR(50)
);
CREATE TABLE item ( -- ์์ดํ
๋ง์คํฐ
item_id INT PRIMARY KEY,
item_name VARCHAR(50)
);
CREATE TABLE order_items ( -- ์ฃผ๋ฌธ ์์ธ (์์ ์ข
์)
order_id INT,
item_id INT,
quantity INT,
PRIMARY KEY (order_id, item_id),
FOREIGN KEY (order_id) REFERENCES order_header(order_id),
FOREIGN KEY (item_id) REFERENCES item(item_id)
);
-- [Step 3: ์ 3์ ๊ทํ (3NF)]
-- ์์น: ์ดํ์ ํจ์ ์ข
์ ์ ๊ฑฐ (์ผ๋ฐ ์์ฑ ๊ฐ์ ์ข
์ ์ ๊ฑฐ)
-- order_header์์ order_id -> customer_id ์ด๊ณ customer_id -> customer_name ์.
CREATE TABLE customer ( -- ๊ณ ๊ฐ ๋ง์คํฐ๋ก ๋ถ๋ฆฌ
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50)
);
ALTER TABLE order_header DROP COLUMN customer_name;
ALTER TABLE order_header ADD FOREIGN KEY (customer_id) REFERENCES customer(customer_id);
-- [Step 4: BCNF]
-- ์์น: ๋ชจ๋ ๊ฒฐ์ ์๋ ํ๋ณดํค์ฌ์ผ ํจ.
-- ๋ง์ฝ (ํ๋ฒ, ๊ณผ๋ชฉ) -> ๊ต์ ์ด๊ณ ๊ต์ -> ๊ณผ๋ชฉ ์ธ ๊ด๊ณ๊ฐ ์๋ค๋ฉด,
-- ๊ฒฐ์ ์์ธ '๊ต์'๊ฐ ํ๋ณดํค๊ฐ ์๋๋ฏ๋ก ํ
์ด๋ธ์ ๋ถ๋ฆฌํจ.
CREATE TABLE professor_subject (
professor VARCHAR(50) PRIMARY KEY,
subject_name VARCHAR(50)
);
CREATE TABLE student_course (
student_id INT,
professor VARCHAR(50),
PRIMARY KEY (student_id, professor),
FOREIGN KEY (professor) REFERENCES professor_subject(professor)
);
Advanced Design
์ ๊ทํ์ ์ฌ์ ์ BCNF์์ ๋ฉ์ถ์ง ์์ต๋๋ค. ๋น๋ก ์ค๋ฌด์์๋ 3NF๋ BCNF ์์ค์์ ์ค๊ณ๋ฅผ ํํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ์๊ฒฐ์ฑ์ ์ถ๊ตฌํ๋ ์ํคํ ํธ๋ผ๋ฉด ๊ทธ ๋๋จธ์ ์กด์ฌํ๋ ๊ณ ์ฐจ ์ ๊ทํ๊ณผ ์ค๋ฌด์ ํธ๋ ์ด๋์คํ์ ๊ฒฝ๊ณ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ ๋จ์ํ ์ด๋ก ์ ์ธ ์ ํฌ๊ฐ ์๋๋ผ, ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ณต์ก์ฑ์ด ์๊ณ์ ์ ๋์์ ๋ ์์คํ ์ ๋ณดํธํ๋ ์ตํ์ ์ค๊ณ ์ ๋ต์ ๋๋ค.
์ ๊ทํ์ ์ญ์ค
์ ๊ทํ๋ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์ฐ๊ธฐ(Write) ์ฑ๋ฅ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋์ด์ง๋ง, ํํธํ๋ ํ ์ด๋ธ์ ๋ค์ ํฉ์น๋ ์กฐ์ธ(Join) ๋น์ฉ์ ์ฝ๊ธฐ(Read) ์ฑ๋ฅ์ ๋ณ๋ชฉ์ ์ด๋ํฉ๋๋ค. ์๋ฒฝํ ์ค๊ณ๋ ์ํ์ ์ ๊ตํจ๊ณผ ๋ฌผ๋ฆฌ์ ์ฑ๋ฅ ์ฌ์ด์ ์ ๊ตํ ์คํ๊ธฐ ๊ฒฐ๊ณผ๋ฌผ์ ๋๋ค.
๋ค์น ์ข ์๊ณผ ์ 4์ ๊ทํ
์ 4์ ๊ทํ(4NF)์ โ๋ค์น ์ข ์(Multi-valued Dependency, MVD)โ์ด๋ผ๋ ๋ ํนํ ํ์์ ํด๊ฒฐํฉ๋๋ค. ๋ฆด๋ ์ด์ ๋ด์ ๋ ๋ฆฝ์ ์ธ ๋ ๊ฐ ์ด์์ ๋ค๊ฐ ์์ฑ(Multi-valued Attribute)์ด ๊ธฐ๋ณธํค์ ์ข ์๋ ๋ ๋ฐ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ ๋ช ์ โ๊ต์โ๊ฐ ์ฌ๋ฌ โ์ ๊ณตโ์ ๊ฐ๋ฅด์น๊ณ ๋์์ ์ฌ๋ฌ โ์ธ์ดโ๋ฅผ ๊ตฌ์ฌํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ ๊ณต๊ณผ ์ธ์ด๋ ์๋ก ์๋ฌด๋ฐ ์๊ด์ด ์์์๋ ๋ถ๊ตฌํ๊ณ , ํ๋์ ๋ฆด๋ ์ด์ ์ ๋ชฐ์๋ฃ์ผ๋ฉด ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ด ํํ๋ก ์กด์ฌํด์ผ ํ๋ ํญ๋ฐ์ ์ธ ์ค๋ณต์ด ๋ฐ์ํฉ๋๋ค. 4NF๋ ์ด๋ฌํ ๋ ๋ฆฝ์ ์ธ ๋ค์น ์ข ์ ๊ด๊ณ๋ฅผ ๋ณ๋์ ๋ฆด๋ ์ด์ ์ผ๋ก ๋ถ๋ฆฌํ ๊ฒ์ ๋ช ๋ นํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์๋ฏธ์ ๋ ๋ฆฝ์ฑ์ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ๋ก ์นํํ๋ ์์ ์ ๋๋ค.
์กฐ์ธ ์ข ์๊ณผ ๋ฌด์์ค ๋ถํด
์ 5์ ๊ทํ(5NF)์ ์ ๊ทํ์ ์ด๋ก ์ ์ ์ ์ธ โ์กฐ์ธ ์ข ์(Join Dependency)โ์ ๋ค๋ฃน๋๋ค. ์ด๋ค ๋ฆด๋ ์ด์ ์ ๋ ๊ฐ๋ก ๋ถํดํ์ ๋๋ ์ ๋ณด ์์ค์ด ๋ฐ์ํ์ง๋ง, ์ธ ๊ฐ ์ด์์ ๋ฆด๋ ์ด์ ์ผ๋ก ๋ถํดํ์ ๋ ๋น๋ก์ ๋ฌด์์ค ์กฐ์ธ์ด ๊ฐ๋ฅํด์ง๋ ํน์ํ ๊ฒฝ์ฐ์ ๋๋ค.
์ค๋ฌด์์ 5NF๊น์ง ๊ณ ๋ คํด์ผ ํ๋ ์ํฉ์ ๋งค์ฐ ๋๋ญ ๋๋ค. ํ์ง๋ง ์ํ ๊ด๊ณ(Recursive Relationship)๋ ๋ณต์กํ ๋ค์๊ฐ ๊ด๊ณ(n-ary Relationship)๋ฅผ ์ค๊ณํ ๋, 5NF์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ์๋ค๋ฉด ๋ถํ์ํ ์กฐ์ธ ์์ฑ์ ์ ๊ฑฐํ์ฌ ์คํค๋ง๋ฅผ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ ์ ์์ต๋๋ค. ์ด๋ โ๋ฐ์ดํฐ๋ ๊ทธ ๋ณธ์ฐ์ ์๋ฏธ๊ฐ ํ์ฉํ๋ ์ต์ ๋จ์๊น์ง ์ชผ๊ฐ์ ธ์ผ ํ๋คโ๋ ์์น์ ์ข ์ฐฉ์ญ์ ๋๋ค.
์ค๊ณ ์ต์ ํ์ ํธ๋ ์ด๋์คํ
๋ชจ๋ ๊ธฐ์ ์ ๊ฒฐ์ ์๋ ๋น์ฉ์ด ๋ฐ๋ฆ
๋๋ค. ์ ๊ทํ๊ฐ ๊น์ด์ง์๋ก ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๊ฒฌ๊ณ ํด์ง์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๋ ๋ ๋ง์ JOIN ๋ฌธ๊ณผ ์ธ์์ผ ํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ์ฌ ํฉ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ชจ์์ผ ํฉ๋๋ค.
- ์ ๋ต์ ๋ฐ์ ๊ทํ(Denormalization): ์ฝ๊ธฐ ๋น๋๊ฐ ์๋์ ์ผ๋ก ๋๊ณ ์ค์๊ฐ ์ฑ๋ฅ์ด ์ง๊ทนํ ์ค์ํ ๊ฒฝ์ฐ, ์๋์ ์ผ๋ก ์ค๋ณต์ ํ์ฉํฉ๋๋ค. ์ด๋ ์ค๊ณ๋ฅผ ํฌ๊ธฐํ๋ ๊ฒ์ด ์๋๋ผ, ์ฑ๋ฅ์ ์ํด ์ ๊ทํ๋ ๋ชจ๋ธ์ โ๊ณ์ฐ๋ ๋ฐฉ์โ์ผ๋ก ๋ถ๊ดด์ํค๋ ๊ณ ๋์ ์ต์ ํ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋ฌด๊ฒฐ์ฑ ๋น์ฉ์ ์ด์ : ๋ฐ์ ๊ทํ๋ฅผ ์ ํํ๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ณด์ฅํด์ฃผ๋ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ์ ์ฑ ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด๋ ๋ฐฐ์น ํ๋ก์ธ์ค๋ก ์ด์ ํด์ผ ํฉ๋๋ค. ์ด ๋น์ฉ์ด ์กฐ์ธ ๋น์ฉ๋ณด๋ค ์ ๋ ดํ์ง ํ๋จํ๋ ๊ฒ์ด ์๋์ด ์ํคํ ํธ์ ์ญ๋์ ๋๋ค.
๊ฒฐ๊ตญ ํ๋ฅญํ ์คํค๋ง ์ค๊ณ๋ ์ ๊ทํ์ด๋ผ๋ ๋ถ๊ทน์ฑ์ ๋ฐ๋ผ๊ฐ๋, ํ์ค์ ์ธํ๋ผ ์ ์ฝ์ด๋ผ๋ ์ค๋ ฅ์ ๋ฌด์ํ์ง ์๋ ๊ท ํ ๊ฐ๊ฐ์์ ํ์ํฉ๋๋ค.
Summary
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ๋ ๋จ์ํ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ธฐ์ ์ ์ ์ฐจ๋ฅผ ๋์ด, ์งํฉ๋ก ๊ณผ ํจ์์ ์ข ์์ฑ์ด๋ผ๋ ์ํ์ ํ ๋ ์์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ธ์ฐ๋ ๊ณ ๋์ ์ค๊ณ ์ฒ ํ์ ๋๋ค. ์ด์ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฆด๋ ์ด์ ์ ์์์ ๋จ์๋ก ๋ถํดํ๋ ๊ณผ์ ์ ์์คํ ์ ์ํธ๋กํผ๋ฅผ ๋ฎ์ถ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ขฐํ ์ ์๋ ๋จ์ผ ์ง์ค ๊ณต๊ธ์(Single Source of Truth)์ผ๋ก ๋ง๋ญ๋๋ค. ๋น๋ก ๊ณ ์ฐจ ์ ๊ทํ๋ก ๊ฐ์๋ก ์กฐ์ธ ๋น์ฉ๊ณผ ์ฑ๋ฅ ์ฌ์ด์ ํธ๋ ์ด๋์คํ๊ฐ ๋ฐ์ํ์ง๋ง, ์ ๊ทํ๋ ๋ชจ๋ธ์ ๊ธฐ์ค์ ์ผ๋ก ์ผ์ ์ ๋ต์ ์ธ ๋ฐ์ ๊ทํ๋ฅผ ์ ํํ๋ ๊ฒ์ด ํ๋ ์ํคํ ํธ์ ํต์ฌ ์ญ๋์ ๋๋ค. ๊ฒฐ๊ตญ ๊ฒฌ๊ณ ํ ์คํค๋ง ์ค๊ณ๋ ๋ณํํ๋ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ ์์์๋ ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฐฉ์ด ๊ธฐ์ ๊ฐ ๋ฉ๋๋ค.



