รายวิชาการจัดการฐานข้อมูล (Database Management System) ง30250 สำหรับใช้เป็นสื่อการสอน ยินดีต้อนรับนักเรียนทุกคนนะค่ะ โดย อ.พรหมพร เพิ่มพูล

วันพุธที่ 18 กันยายน พ.ศ. 2556

หน่วยการเรียนรู้ที่ 6 การปรับให้เป็นบรรทัดฐาน (Normalization)


หน่วยการเรียนรู้ที่ 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
20/02/2546
P2
25
1235
25/02/2546
P3
200
1235
25/02/2546
P2
100
1236
25/02/246
P5
120
1237
1/04/2546
P2
50
1238
1/04/2546
P4
100
1238
1/04/2546
P5
200
1238
1/04/2546
P1
150

จากข้อมูล จะพบว่ามีฟังก์ชันการขึ้นต่อกัน ดังนี้
เลขที่ใบสั่งซื้อ  à วันที่สั่งซื้อ
เลขที่ใบสั่งซื้อ , รหัสสินค้า  à จำนวนสินค้า


ตัวอย่างที่ 2  ถ้ามี Relational Schema สำหรับเก็บข้อมูลการทำงานของพนักงานดังนี้
            Work ( รหัสพนักงาน , รหัสแผนก , วันที่ , เวลาเข้าทำงาน , เวลาออก )
รหัสพนักงาน
รหัสแผนก
วันที่
เวลาเข้าทำงาน
เวลาออกงาน
0001
D1
10/10/2546
8.00
16.30
0002
D1
10/10/2546
8.20
17.00
0003
D2
10/10/2546
8.10
16.30
0004
D3
10/10/2546
8.00
16.30
0001
D1
12/10/2546
8.30
17.00
0002
D1
12/10/2546
8.45
17.50
0003
D2
15/10/2546
9.00
18.00
0004
D3
15/10/2546
8.45
17.00
0002
D1
20/10/2546
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

JOB(P_ID , Position , Chg_Hour)

P_ID

Position
Chg_Hour
01
Elect. Engineer
1000
02
Database Designer
1500
03
Programmer
800
04
System Analyst
2000
05
Application Designer
1800
06
General Support
1200
07
DSS Analyst
1750


 
 


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