หน่วยการเรียนรู้ที่ 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) ถือว่าเพียงพอที่จะแก้ไขปัญหาต่าง ๆ ที่เกิดขึ้นในการ เพิ่ม แก้ไข และลบข้อมูลได้แล้ว แต่ถ้ายังพบปัญหาดังกล่าวอีก ก็สามารถพิจารณาและแปลงรีเลชันให้อยู่ในรูปแบบบรรทัดฐานขั้นที่สูงขึ้นไปได้อีก แต่อย่างไรก็ตามการแปลงให้อยู่ในรูปแบบบรรทัดฐานที่สูงขึ้นก็จะทำให้รีเลชันมีขนาดเล็กลงเสมอด้วยเช่นกัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น