240 likes | 710 Views
ตัวอย่างการปรับบรรทัดฐาน 1NF >> 3NF. ตารางที่ยังไม่เป็น Normal Form ขั้นใด. Step 1 : ขจัด Derived Attribute (ถ้ามี). เกิดจาก UnitPrice * QTY. รีเลชันที่ขจัด Derived Attr. แล้ว. First Normal Form (1NF). นิยามของ 1NF
E N D
ตัวอย่างการปรับบรรทัดฐาน1NF >> 3NF
ตารางที่ยังไม่เป็น Normal Form ขั้นใด
Step 1 : ขจัด Derived Attribute(ถ้ามี) เกิดจาก UnitPrice * QTY
First Normal Form (1NF) นิยามของ 1NF รีเลชันที่เป็น 1NF ต้องไม่มีกลุ่มข้อมูลซ้ำ(Repeating Group) และไม่มีแอตทริบิวต์ที่มีหลายค่า(Multivalued Attribute)
รีเลชันที่ไม่มี Multivalued Attr. และ Repeating groupโดยการแยกแต่ละข้อมูลออกเป็นเอกเทศในแต่ละทูเพิล
หา Functional Dependency • FD1 :Bill_No Bill_date , Cus_ID ,Cus_Name , Address , Emp_ID , Emp_Name • FD2: P_ID P_name , UnitPrice • FD3: Bill_No , P_ID QTY • FD4: Cus_ID Cus_Name , Address • FD5 : Emp_ID Emp_Name • เอา FD1 , FD2 และ FD3 มารวมกัน(Composition)ได้ • FD6 : BiLL_No , P_ID Bill_date , Cus_ID ,Cus_Name , Address , Emp_ID , Emp_Name ,P_Name , UnitPrice • ดังนั้นพิจารณาได้ว่า primary key ของรีเลชันคือ Bill_No รวมกับ P_ID
Second Normal Form (2NF) นิยามของ 2NF รีเลชันที่เป็น 2NF ต้องต้องเป็น 1NF มาก่อน และ ไม่มีแอตทริบิวต์ที่ขึ้นต่อกันกับบางส่วนของคีย์หลัก(Partial Dependency)
รีเลชันอยู่ในรูป 1NF แต่ไม่เป็น 2NF เนื่องจากมี Partial Dependency Partial Dependency Partial Dependency Fully Functional Dependency
Bill_No Bill_Date P_ID P_Name Unit Price QTY Cus_ID Cus_ Name Address Emp_ID • Emp_Name B001 1/08/2004 P01 Sofa Bed 12,500 1 C03 Pim Australia E02 Smith B001 1/08/2004 P03 Dinning Table 5,000 2 C03 Pim Australia E02 Smith B002 1/08/2004 P02 Bed 15,000 2 C03 Pim Australia E03 Benny B002 1/08/2004 P05 Electric Fan 3,000 10 C03 Pim Australia E03 Benny B002 1/08/2004 P04 Printer 12,000 2 C03 Pim Australia E03 Benny B003 3/08/2004 P01 Sofa Bed 12,500 10 C01 Jennifer Newzeland E01 Johnson B004 4/08/2004 P03 Dinning Table 5,000 2 C02 David USA E01 Johnson B004 4/08/2004 P05 Electric Fan 3,000 5 C02 David USA E01 Johnson B005 4/08/2004 P07 Air Conditioner 20,000 2 C01 Jennifer Newzeland E02 Smith B005 4/08/2004 P04 Printer 12,000 1 C01 Jennifer Newzeland E02 Smith Bill_No Bill_Date Cus_ID Cus_Name Address Emp_ID Emp_Name P_ID P_Name Unit Price Bill_No P_ID QTY วิธรการปรับจาก 1NF เป็น 2NF ให้แตกรีเลชัน โดยเอากลุ่มแอตทริบิวต์ที่ขึ้นกับบางส่วนของ Primary ออกเป็นรีเลชันใหม่
Bill Bill_Details Product
Thrid Normal Form (3NF) นิยามของ 3NF รีเลชันที่เป็น 3NF ต้องต้องเป็น 2NF มาก่อน และ ไม่มีแอตทริบิวต์ที่ไม่ได้เป็นคีย์หลักขึ้นต่อค่าของแอตทริบิวต์ที่ไม่ได้เป็นคีย์หลัก(Transitive Dependency)
ยังไม่เป็น 3NF Bill Bill_Details Product เป็น 3NF แล้ว ยังไม่เป็น 3NF
Product แต่การแตกแบบนี้ทำให้เกิดความซ้ำซ้อนมากกว่า จึงไม่นิยมแตกออก ให้ใช้รีเลชัน Product เดิมก่อนแตก อาจแตกตารางเป็นดังนี้
Transitive Dependency Bill แตกรีเลชันได้เป็นดังนี้ Bill Customer Employee
Bill Customer Employee Bill_Details Product