หน่วยการเรียนรู้ที่ 6
การปรับให้เป็นบรรทัดฐาน (Normalization)
6.1 บทนำ
การทำให้เป็นบรรทัดฐาน(Normalization) คือหลักการในการออกแบบฐานข้อมูลเชิงสัมพันธ์(Relational Database) ซึ่งคิดค้นโดย Dr. E.F.
Codd ตั้งแต่ปี 1963 วัตถุประสงค์เพื่อหลีกหนีการเกิดกลุ่มข้อมูลซ้ำ
ๆ หรือไม่ทำให้เกิดความซ้ำซ้อนของข้อมูล
และทำให้เกิดความมั่นใจว่าการจัดเก็บและค้นหาข้อมูลทำได้อย่างมีประสิทธิภาพ
การทำให้เป็นบรรทัดฐาน(Normalization) ถือว่าเป็นเทคนิคที่ที่นิยมใช้เป็นแนวทางในการออกแบบฐานข้อมูลเชิงสัมพันธ์ โดยการปรับตารางข้อมูลที่มีความผิดปกติ(Anormaly)โดยอาศัยหลักการและกฏเกณฑ์ของรูปแบบบรรทัดฐาน(Normal Form)รูปต่าง ๆ
ซึ่งมีการนิยามรูปแบบบรรทัดฐานขั้นต่างๆ ไว้ 6 รูปแบบดังนี้
·
รูปแบบบรรทัดฐานขั้นที่ 1(First Normal Form :1NF)
·
รูปแบบบรรทัดฐานขั้นที่ 2(Second Normal Form : 2NF)
·
รูปแบบบรรทัดฐานขั้นที่ 3(Third Normal Form :3NF)
·
รูปแบบบรรทัดฐานขั้นบอยซ์คอดด์(Boyce/Codd Normal Form : BCNF)
·
รูปแบบบรรทัดฐานขั้นที่ 4(Fourth Normal Form : 4NF)
·
รูปแบบบรรทัดฐานขั้นที่ 5(Fifth Normal Form :5NF)
ในการปรับตารางข้อมูลให้เป็นบรรทัดฐานไม่จำเป็นต้องเริ่มต้นที่รูปแบบบรรทัดฐานขั้นที่
1 (1
NF) เสมอไป
แต่จะทำการปรับโครงสร้างตารางข้อมูลในรูปปัจจุบันให้อยู่ในรูปแบบบรรทัดฐานที่ต้องการในขั้นต่อไป
แต่การปรับโครงสร้างตารางข้อมูลในขั้นที่สูงขึ้นจำเป็นต้องใช้คุณสมบัติของรูปแบบบรรทัดฐานขั้นก่อนหน้าเป็นพื้นฐานในการปรับในขั้นที่สูงขึ้น
6.2
ฟังก์ชันการขึ้นต่อกัน(Functional
Dependency)
6.2.1 นิยาม
ฟังก์ชันการขึ้นต่อกันเป็นการแสดงความสัมพันธ์ระหว่างแอททริบิวต์ต่างๆ
ในรีเลชัน ว่ามีความสัมพันธ์กันอย่างไร
กำหนด
X , Y , Z เป็น แอททริบิวต์ของรีเลชัน R
ถ้าทราบค่าของข้อมูลในแอททริบิวต์
X แล้วสามารถบอกค่าข้อมูลในแอททริบิวต์
Y , Z ได้
แสดงว่าแอททริบิวต์ Y
, Z มีฟังก์ชันการขึ้นต่อกันกับ
แอททริบิวต์ X
เขียนแทนด้วยสัญลักษณ์ X à
Y , Z
ฟังก์ชันการขึ้นต่อกันสามารถแสดงได้โดยการใช้
ไดอะแกรมการขึ้นต่อกัน ดังนี้
รูปที่ 6.1
ไดอะแกรมการขึ้นต่อกัน
ตัวอย่างที่ 1
ถ้ามี Relational Schema สำหรับเก็บข้อมูลจากใบสั่งซื้อ
ดังนี้
Order_Detail
( เลขที่ใบสั่งซื้อ , วันที่สั่งซื้อ , รหัสสินค้า , จำนวนสินค้า )
เลขที่ใบสั่งซื้อ
|
วันที่สั่งซื้อ
|
รหัสสินค้า
|
จำนวนสินค้า
|
1234
|
20/02/2546
|
P1
|
100
|
1234
|
P2
|
25
|
|
1235
|
P3
|
200
|
|
1235
|
P2
|
100
|
|
1236
|
25/02/246
|
P5
|
120
|
1237
|
P2
|
50
|
|
1238
|
P4
|
100
|
|
1238
|
P5
|
200
|
|
1238
|
P1
|
150
|
จากข้อมูล
จะพบว่ามีฟังก์ชันการขึ้นต่อกัน ดังนี้
เลขที่ใบสั่งซื้อ à วันที่สั่งซื้อ
เลขที่ใบสั่งซื้อ
, รหัสสินค้า à จำนวนสินค้า
ตัวอย่างที่
2
ถ้ามี Relational Schema สำหรับเก็บข้อมูลการทำงานของพนักงานดังนี้
Work
( รหัสพนักงาน , รหัสแผนก , วันที่ , เวลาเข้าทำงาน , เวลาออก )
รหัสพนักงาน
|
รหัสแผนก
|
วันที่
|
เวลาเข้าทำงาน
|
เวลาออกงาน
|
0001
|
D1
|
8.00
|
16.30
|
|
0002
|
D1
|
8.20
|
17.00
|
|
0003
|
D2
|
8.10
|
16.30
|
|
0004
|
D3
|
8.00
|
16.30
|
|
0001
|
D1
|
8.30
|
17.00
|
|
0002
|
D1
|
8.45
|
17.50
|
|
0003
|
D2
|
9.00
|
18.00
|
|
0004
|
D3
|
8.45
|
17.00
|
|
0002
|
D1
|
9.00
|
17.00
|
จากข้อมูลพบว่ามีฟังก์ชันการขึ้นต่อกัน ดังนี้
รหัสพนักงาน à
รหัสแผนก
รหัสพนักงาน , วันที่
à เวลาเข้าทำงาน , เวลาออกงาน
6.2.2
ชนิดของฟังก์ชันการขึ้นต่อกัน
1.
การขึ้นต่อกันแบบบางส่วนกับคีย์หลัก(Partial
Dependency)
ในกรณีที่รีเลชันมีคีย์หลักที่ประกอบด้วยแอททริบิวต์มากกว่า
1 แอททริบิวต์ แล้วมีแอททริบิวต์อื่นๆ
ที่ไม่ใช่คีย์หลัก(Nonkey
attribute) มีฟังก์ชันการขึ้นต่อกันกับบางส่วนของคีย์หลัก เรียกว่า
การขึ้นต่อกันกับบางส่วนของคีย์หลัก
2.
การขึ้นต่อกันแบบทุกส่วนกับคีย์หลัก(Full Functional
Dependency)
ถ้าแอททริบิวต์ที่ไม่ได้เป็คีย์หลัก(Nonkey
attribute) มีฟังก์ชันการขึ้นต่อกันกับแอททริบิวต์ที่ตัวที่ประกอบกันเป็นคีย์หลัก
หรือไม่มีฟังก์ชันการขึ้นกับบางส่วนของคีย์หลัก
แสดงว่าเป็นการขึ้นต่อกันแบบขึ้นต่อกันแบบทุกส่วนของคีย์หลัก
รูปที่ 6.2 ไดอะแกรมการขึ้นต่อกันกับบางส่วนกับคีย์หลัก
จากรูปที่ 7.2 สามารถแยกฟังก์ชันการขึ้นต่อกันแต่ละส่วน
ได้ดังนี้
A , B
à D , E *** เป็นฟังก์ชันการขึ้นต่อกันแบบขึ้นกับทุกส่วนของคีย์หลัก
B
à C *** เป็นฟังก์ชันการขึ้นต่อกันแบบขึ้นกับบางส่วนของคีย์หลัก
3.
การขึ้นต่อกันแบบทรานซิทีฟ(Transitive
Dependency)
ในกรณีที่แอททริบิวต์ที่ไม่ได้เป็นคีย์หลัก(Nonkey
attribute) สามารถมีฟังก์ชันการขึ้นต่อกันเองได้ จะเรียกฟังก์ชันการขึ้นต่อกันแบบนี้ว่า
การขึ้นต่อกันแบบทรานซิทีฟ
รูปที่ 6.3
ไดอะแกรมการขึ้นต่อกันระหว่างนันคีย์
D
à E *** เป็นฟังก์ชันการขึ้นต่อกันแบบทรานซิทีฟ
6.3
การปรับให้เป็นบรรทัดฐาน(Normalization)
จากที่กล่าวไปแล้วว่า
การปรับให้เป็นบรรทัดฐานมีจุดประสงค์เพื่อ ขจัดความผิดปกติลดความซ้ำซ้อนของข้อมูล
อันเนื่องมาจากการออกแบบตารางข้อมูลที่ไม่ถูกต้อง แบ่งเป็นระดับพื้นฐาน 3 ระดับ คือ
รูปแบบบรรทัดฐานระดับที่ 1 (1NF) , ระดับที่ 2(2NF) และ ระดับที่ 3(3NF) สำหรับระดับที่สูงขึ้น คิดค้นร่วมกันระหว่าง Boyce
และ Codd จึงตั้งชื่อเพื่อเป็นการให้เกียรติกับผู้คิดค้น
จึงได้ตั้งชื่อ การปรับให้เป็นบรรทัดฐานระดับต่อไปว่า รูปแบบบรรทัดฐานบอยซ์คอดด์(Boyce/Codd
Normal Form : BCNF)
ส่วนการปรับบรรทัดฐานในระดับที่สูงมี 2 ระดับ คือ ระดับที่ 4(4NF) และ ระดับที่ 5(5NF)
รูปที่ 6.4 ระดับในการปรับบรรทัดฐาน
กรณีศึกษา
จากรูปที่ 6.5 เป็นตัวอย่างรายงานการทำงานของพนักงานในบริษัท
บริษัทต้องการจัดเก็บข้อมูลดังกล่าวเป็นฐานข้อมูลการทำงานของพนักงาน
จึงต้องมีการแปลงรายงานดังกล่าวให้อยู่ในรูปของตารางข้อมูล สามารถแปลงเป็นตารางได้ดังรูปที่ 6.6
รูปที่ 6.5 ตัวอย่างรายงาน
P_Num
|
P_Name
|
E_Num
|
E_Name
|
P_ID
|
Position
|
Chg_Hour
|
Hours
|
15
|
Evergreen
|
001
|
Somsak
|
01
|
Elect.
Engineer
|
1000
|
23.8
|
002
|
Wanida
|
02
|
Database
Designer
|
1500
|
19.4
|
||
003
|
Seri
|
02
|
Database
Designer
|
1500
|
30.0
|
||
008
|
Prakarn
|
03
|
Programmer
|
800
|
32.5
|
||
004
|
Rewadee
|
04
|
System
Analyst
|
2000
|
22.5
|
||
18
|
Power
Web
|
005
|
Sawitree
|
05
|
Application
Designer
|
1800
|
19.5
|
006
|
Chalee
|
06
|
General
Support
|
1200
|
15.7
|
||
009
|
Kannika
|
04
|
System
Analyst
|
2000
|
36.0
|
||
010
|
Wasan
|
07
|
DSS
Analyst
|
1750
|
20.3
|
||
22
|
Blue
Wave
|
003
|
Seri
|
02
|
Database
Designer
|
1500
|
32.5
|
009
|
Kannika
|
04
|
System
Analyst
|
2000
|
28.5
|
||
012
|
Jirasak
|
05
|
Application
Designer
|
1800
|
18.7
|
||
015
|
Wilai
|
03
|
Programmer
|
800
|
38.5
|
||
25
|
Atomic
|
016
|
Wanna
|
03
|
Programmer
|
800
|
42.5
|
018
|
Porntip
|
04
|
System
Analyst
|
2000
|
24.5
|
||
002
|
Wanida
|
02
|
Database
Designer
|
1500
|
32.4
|
||
005
|
Sawitree
|
05
|
Applicaton
Designer
|
1800
|
28.5
|
||
006
|
Chalee
|
06
|
General
Support
|
1200
|
24.8
|
||
010
|
Wasan
|
07
|
DSS
Analyst
|
1750
|
19.5
|
รูปที่ 6.6
ตารางข้อมูลการทำงานของพนักงานที่มีกลุ่มข้อมูลซ้ำ
รูปแบบการจัดเก็บข้อมูลในตารางข้อมูลที่แปลงมาดังรูปที่
5.6
ยังไม่ถือว่าเป็นตารางข้อมูลที่นำไปจัดเก็บข้อมูลได้จริง
เนื่องจากในตารางยังมีกลุ่มข้อมูลซ้ำ(Repeating group) ทำให้ตารางข้อมูลนี้ไม่อยู่ในรูปแบบบรรทัดฐานขั้นใดเลย อีกทั้งยังมีปัญหาในการเพิ่ม แก้ไข และ ลบข้อมูลในตาราง
ดังนั้นเพื่อให้การจัดเก็บข้อมูลตามหลักการของฐานข้อมูลเชิงสัมพันธ์ถูกต้องจึงต้องออกแบบตารางข้อมูลใหม่โดยอาศัยหลักการปรับให้เป็นบรรทัดฐาน ซึ่งมีรูปแบบและวิธีการดังที่จะอธิบายต่อไปนี้
6.3.2
รูปแบบบรรทัดฐานขั้นที่ 1 (First Normal Form : 1NF)
นิยาม
หลักการแปลงเป็น 1NF
1.
หากพบว่ามีกลุ่มข้อมูลซ้ำ ให้แยกข้อมูลออกให้เป็นเอกเทศเป็นแต่ละทูเพิล
2.
กำหนดคีย์หลักให้กับรีเลชัน
จากรูปที่
5.6 โครงสร้างตารางยังไม่อยู่ในรูปแบบบรรทัดฐานขั้นใดเลย เนื่องจากยังมีกลุ่มข้อมูลซ้ำ(Repeating Group) สามารถทำให้เป็นบรรทัดฐานขั้นที่1
โดยการกำจัดกลุ่มข้อมูลซ้ำ
ได้ด้วยการใส่ข้อมูลให้ครบถ้วนในช่องที่มีข้อมูลว่าง พร้อมทั้งกำหนดคีย์หลัก ดังรูปที่ 6.7
P_Num
|
P_Name
|
E_Num
|
E_Name
|
P_ID
|
Position
|
Chg_Hour
|
Hours
|
15
|
Evergreen
|
001
|
Somsak
|
01
|
Elect.
Engineer
|
1000
|
23.8
|
15
|
Evergreen
|
002
|
Wanida
|
02
|
Database
Designer
|
1500
|
19.4
|
15
|
Evergreen
|
003
|
Seri
|
02
|
Database
Designer
|
1500
|
30.0
|
15
|
Evergreen
|
008
|
Prakarn
|
03
|
Programmer
|
800
|
32.5
|
15
|
Evergreen
|
004
|
Rewadee
|
04
|
System
Analyst
|
2000
|
22.5
|
18
|
Power
Web
|
005
|
Sawitree
|
05
|
Application
Designer
|
1800
|
19.5
|
18
|
Power
Web
|
006
|
Chalee
|
06
|
General
Support
|
1200
|
15.7
|
18
|
Power
Web
|
009
|
Kannika
|
04
|
System
Analyst
|
2000
|
36.0
|
18
|
Power
Web
|
010
|
Wasan
|
07
|
DSS
Analyst
|
1750
|
20.3
|
22
|
Blue
Wave
|
003
|
Seri
|
02
|
Database
Designer
|
1500
|
32.5
|
22
|
Blue
Wave
|
009
|
Kannika
|
04
|
System
Analyst
|
2000
|
28.5
|
22
|
Blue
Wave
|
012
|
Jirasak
|
05
|
Application
Designer
|
1800
|
18.7
|
22
|
Blue
Wave
|
015
|
Wilai
|
03
|
Programmer
|
800
|
38.5
|
25
|
Atomic
|
016
|
Wanna
|
03
|
Programmer
|
800
|
42.5
|
25
|
Atomic
|
018
|
Porntip
|
04
|
System
Analyst
|
2000
|
24.5
|
25
|
Atomic
|
002
|
Wanida
|
02
|
Database
Designer
|
1500
|
32.4
|
25
|
Atomic
|
005
|
Sawitree
|
05
|
Applicaton
Designer
|
1800
|
28.5
|
25
|
Atomic
|
006
|
Chalee
|
06
|
General
Support
|
1200
|
24.8
|
25
|
Atomic
|
010
|
Wasan
|
07
|
DSS
Analyst
|
1750
|
19.5
|
รูปที่ 6.7
รีเลชันที่อยู่ในรูป 1 NF
ผลจากการกำจัดกลุ่มข้อมูลซ้ำ
ทำให้สามารถกำหนดหาฟังก์ชันการขึ้นต่อกัน(Functional
Dependency) จากความสัมพันธ์ของแอททริบิวต์ในตารางข้อมูล ได้ดังนี้
P_Num
, E_Num à P_Name , E_Name , P_ID , Position , Chg_Hour , Hours
CHARGE(P_Num ,P_Name , E_Num
, E_Name , P_ID , Position , Char_Hour , Hours)
รูปที่ 6.8 ไดอะแกรมการขึ้นต่อกันของตารางที่อยู่ในรูป 1NF
ถึงแม้ว่ารีเลชันในรูปที่ 6.8 จะอยู่ในระดับ 1NF แล้วก็ตาม
แต่ก็มีปัญหาในการปรับปรุงข้อมูลในตาราง ที่ทำให้เกิดวามซ้ำซ้อนของข้อมูล
ซึ่งทำให้เกิดปัญหาดังนี้
·
การเพิ่มข้อมูล(Insert Anomaly) ถ้าต้องการเพิ่มรายการข้อมูลโครงการใหม่ของบริษัท
โดยยังไม่มีข้อมูลพนักงานที่ทำงานในโครงการใหม่ดังกล่าว จะทำให้ไม่สามารถเพิ่มข้อมูลได้
เพราะค่าของคีย์หลักคือ รหัสพนักงาน(E_Num) จะเป็นค่าว่าง(Null)
·
การแก้ไขข้อมูล(Insert Anomaly) ถ้าต้องการแก้ไขชื่อโครงการ เช่น จากชื่อ Evergreen เป็น Forever จะต้องแก้ไขข้อมูลมากกว่า
1 รายการ และถ้าแก้ไขไม่ครบทุกรายการ
จะมีผลทำให้เกิดข้อมูลไม่สอดคล้องกัน(Data inconsistency)
·
การลบข้อมูล(Delete Anomaly) ถ้ามีการลบข้อมูลโครงการ รหัส 15
Evergreen ออกไป
จะมีผลทำให้ข้อมูลของพนักงานบางคนหายไปจากฐานข้อมูลด้วย
จากเหตุผลดังกล่าว
จึงทำให้ต้องมีการปรับให้เป็นบรรทัดฐานในขั้นที่สูงขึ้นต่อไป
6.3.3
รูปแบบบรรทัดฐานขั้นที่ 2 (Second
Normal Form : 2NF)
นิยาม
หลักการแปลงเป็น 2NF
1.
หากมีรีเลชันใดที่มีแอททริบิวต์มีการขึ้นต่อกันกับบางส่วนของคีย์หลัก
ให้ตัดแอททริบิวต์ดังกล่าวออกไปไว้ในรีเลชันใหม่
และในรีเลชันเดิมให้คงแอททริบิวต์ที่ขึ้นกับทุกส่วนของคีย์หลักไว้
2.
สร้างรีเลชันใหม่ โดยดึงแอททริบิวต์ที่ขึ้นกับบางส่วนของคีย์หลัก
และกำหนดคีย์หลักของรีเลชันจากแอททริบิวต์ที่เป็นส่วนประกอบของรีเลชันที่แอททริบิวต์เหล่านี้มีฟังก์ชันการขึ้นต่อกัน
รูปที่ 6.9 ไดอะแกรมการขึ้นต่อกันกับบางส่วนของคีย์หลัก
จากแผนภาพแสดงความสัมพันธ์ระหว่างแอททริบิวต์ในรูปที่ 6.9 พบว่ามีแอททริบิวต์ที่มีฟังก์ชันการขึ้นต่อกันกับบางส่วนของคีย์หลัก(Partial Dependency) ได้แก่
P_Num
à P_Name
E_Num
à E_Name , P_ID , Position , Chg_Hour
และมีแอททริบิวต์
Hours มีฟังก์ชันการขึ้นต่อกันแบบทั้งหมดกับคีย์หลัก(Full
Functional Dependency)
P_Num
, E_Num àHours
เพราะฉะนั้นรีเลชั่น
CHARGE ที่อยู่ในรูปแบบบรรทัดฐานขั้นที่1
แล้ว แต่ยังไม่อยู่ในรูปแบบขั้นที่ 2
จะต้องทำการปรับให้อยู่ในรูปแบบบรรทัดฐานขั้นที่2 ได้เป็นรีเลชันดังนี้
รูปที่ 6.10 รีเลชันที่อยู่ในรูป 2NF
ปัญหาที่เกิดกับตารางที่อยู่ในรูปแบบบรรทัดฐานขั้นที่
2
ตาราง
EMPLOYEE ถือว่าเป็นตารางที่อยู่ในรูปแบบบรรทัดฐานขั้นที่
2 แล้ว แต่ยังมีปัญหาความผิดปกติของโครงสร้างตาราง(Anomaly)คือ
·
ปัญหาในการเพิ่มข้อมูล(Insert anomaly)
กล่าวคือ หากต้องการจัดเก็บข้อมูลตำแหน่งงานใหม่ที่กำหนดขึ้นในตาราง
เช่น ตำแหน่ง Project manager แต่ตำแหน่งงานนี้ยังไม่ได้กำหนดว่าให้พนักงานคนใดทำงานในตำแหน่งดังกล่าว จะไม่สามารถจัดเก็บได้
เนื่องจากจะทำให้ค่าของคีย์หลักในรายการดังกล่าวเป็นค่าว่าง
·
ปัญหาในการแก้ไขข้อมูล(Update anomaly) กล่าวคือ
หากต้องการปรับปรุงอัตราค่าจ้างของตำแหน่งงานบางตำแหน่งจะต้องเปลี่ยนข้อมูลดังกล่าวในทุกรายการที่มีพนักงานทำงานในตำแหน่งนั้น
เช่น ต้องการแก้ไขอัตราค่าจ้างของตำแหน่งงาน
Programmer จาก 800 เป็น ค่า 1000 จะต้องแก้ไขทุกรายการที่มีตำแหน่งงานเป็น Programmer ถ้าสมมุติแก้ไขไม่ครบทุกรายการจะทำให้เกิดปัญหาข้อมูลขัดแย้งกัน(Data
Inconsistency) คือ
ตำแหน่งงานเดียวกันแต่มีค่าจ้างไม่เท่ากันในบางรายการ
·
ปัญหาในการลบข้อมูล(Delete anomaly) กล่าวคือ
หากต้องการลบข้อมูลพนักงานบางรายการออกไป อาจทำให้ข้อมูลที่จำเป็นถูกลบตามไปด้วย
เช่น หากต้องการลบข้อมูลพนักงานรหัส 001 ออกจากตารางข้อมูล
จะทำให้ข้อมูลของตำแหน่งงาน Electric
Engineer หายไปด้วย เนื่องจากในกรณีนี้มีเพียงพนักงานรหัสดังกล่าวที่ทำงานในตำแหน่งนี้เท่านั้น
จากเหตุการณ์ที่อาจจะเป็นไปได้ดังกล่าวทำให้ตารางข้อมูลที่อยู่ในรูปบบบรรทัดฐานขั้นที่
2 ไม่เพียงพอที่จะนำไปจัดเก็บในฐานข้อมูล
จึงต้องมีการปรับโครงสร้างตารางให้อยู่ในรูปแบบบรรทัดฐานในขั้นที่สูงขึ้น
6.3.4
รูปแบบบรรทัดฐานขั้นที่ 3 (Third Normal Form : 3NF)
นิยาม
หลักการแปลงให้เป็น 3NF
1.
หากในรีเลชันมีการขึ้นต่อกันแบบทรานซิทีฟ
ให้ตัดเอาแอททริบิวต์ที่ขึ้นต่อกันแบบทรานซิทีฟออกไปสร้างรีเลชันใหม่
2.
สร้างรีเลชันใหม่
โดยนำเอาแอททริบิวต์ที่ขึ้นต่อกันแบบทรานซิทีฟจากรีเลชันเดิมมา
และกำหนดคีย์หลักโดยเลือกเอาแอททริบิวต์ที่สามารถกำหนดค่าของแอททริบิวต์อื่น
ๆ ได้
3.
ในรีเลชันเดิมให้คง
แอททริบิวต์ที่สามารถเลือกค่าแอททริบิวต์ที่ไม่ใช่คีย์หลักไว้เป็น คีย์นอก (Foreign key) เพื่อใช้ในการเชื่อมโยงกับรีเลชันใหม่
จากรูปที่ 7.10 เป็นรีเลชันที่อยู่ในรูปแบบบรรทัดฐานขั้นที่
2 แล้ว แต่ยังพบว่ามีรีเลชัน EMPLOYEE ที่ยังมีแอททริบิวต์ที่ไม่ใช่คีย์หลัก(Non-key
attribute) สามารถระบุค่าแอททริบิวต์ที่ไม่ใช่คีย์หลักอื่นได้ในรีเลชันเดียวกันซึ่งเรียกความสัมพันธ์แบบนี้ว่า
Transitive Dependency ดังแผนภาพแสดงการขึ้นต่อกันของแอททริบิวต์ดังรูปที่ 6.11
รูปที่ 6.11 แผนภาพการขึ้นต่อกันแบบ Transitive Dependency
จากแผนภาพในรูปที่ 6.11 จะพบว่ารีเลชัน EMPLOYEE
มีคุณสมบัติ Transitive Dependency เกิดขึ้นในรีเลชัน
จึงไม่เป็น รูปแบบบรรทัดฐานขั้นที่ 3
ดังนั้นจึงสามารถปรับให้เป็ยรูปแบบบรรทัดฐานได้โดยการแยกความสัมพันธ์แบบ Transitive
Dependency เป็นอีกรีเลชัน ดังนี้
E_Num
àE_Name , P_ID
P_ID
à Position , Chg_Hour
|
EMPLOYEE(E_Num , E_Name , P_ID)
E_Num
|
E_Name
|
P_ID |
001
|
Somsak
|
01
|
002
|
Wanida
|
02
|
003
|
Seri
|
02
|
004
|
Rewadee
|
04
|
005
|
Sawitree
|
05
|
006
|
Chalee
|
06
|
008
|
Prakarn
|
03
|
009
|
Kannika
|
04
|
010
|
Wasan
|
07
|
012
|
Jirasak
|
05
|
015
|
Wilai
|
03
|
016
|
Wanna
|
03
|
018
|
Porntip
|
04
|
รูปที่ 6.12 รีเลชันที่อยู่ในรูป 3NF
โดยทั่วไปการแปลงรีเลชันให้อยู่ในรูปแบบบรรทัดฐานขั้นที่
3 (3NF) ถือว่าเพียงพอที่จะแก้ไขปัญหาต่าง
ๆ ที่เกิดขึ้นในการ เพิ่ม แก้ไข
และลบข้อมูลได้แล้ว
แต่ถ้ายังพบปัญหาดังกล่าวอีก
ก็สามารถพิจารณาและแปลงรีเลชันให้อยู่ในรูปแบบบรรทัดฐานขั้นที่สูงขึ้นไปได้อีก
แต่อย่างไรก็ตามการแปลงให้อยู่ในรูปแบบบรรทัดฐานที่สูงขึ้นก็จะทำให้รีเลชันมีขนาดเล็กลงเสมอด้วยเช่นกัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น