430 likes | 748 Views
Chapter 2-3 Normalization. โดยอาจารย์ เกศแก้ว ประดิษฐ์ สาขาวิชาการจัดการเทคโนโลยีสารสนเทศ. เนื้อหาที่เรียนในบทนี้ Normalization คือ ขั้นตอนการทำ Normalization Functional Dependency (FDs) ประเภทของ Functional Dependency First Normal Form (1NF)
E N D
Chapter 2-3Normalization โดยอาจารย์ เกศแก้ว ประดิษฐ์ สาขาวิชาการจัดการเทคโนโลยีสารสนเทศ
เนื้อหาที่เรียนในบทนี้ • Normalization คือ • ขั้นตอนการทำ Normalization • Functional Dependency (FDs) • ประเภทของ Functional Dependency • First Normal Form (1NF) • Second Normal Form (2NF) • Third Normal Form (3NF) Normalization
Normalization • เนื้อหาที่เรียนในบทนี้ ต่อ • Boyce-Codd Normalization Form (BCNF) • Fourth Normalization Form (4NF) • Fifth Normalization Form (5NF)
Normalization Normalization คือ วิธีการใช้ในการตรวจสอบและแก้ปัญหาทางด้านความซ้ำซ้อนของข้อมูล โดยการดำเนินการให้ข้อมูลในแต่ละ Relation อยู่ในรูปที่เป็นหน่วยที่เล็กที่สุดที่ไม่สามารถแตกย่อยเป็นหน่วยย่อย ๆ ได้อีก โดยยังคงความสัมพันธ์ระหว่างข้อมูลใน Relation ต่าง ๆไว้ตามหลักการที่กำหนดไว้ใน Relational Model
Normalization ขั้นตอนในการทำ Normalization เป็นการดำเนินงานอย่างเป็นลำดับที่กำหนดไว้ด้วยกันเป็นขั้นตอน ตามปัญหาที่เกิดขึ้นในขั้นตอนนั้น ๆ ซึ่งแต่ละขั้นตอนเป็นดังนี้ • First Normalization Form (1NF) • Second Normalization Form (2NF) • Third Normalization Form (3NF) • Boyce-Codd Normalization Form (BCNF) • Fourth Normalization Form (4NF) • Fifth Normalization Form (5NF)
Functional Dependency (FDs) การพิจารณาโครงสร้างแต่ละ Relation ว่ามีโครงสร้างอยู่ใน Normal Form ระดับใด จะพิจารณาจาก Functional Dependency ซึ่งความสัมพันธ์ระหว่าง Attribute ต่าง ๆภายใน Relation กับ Attribute หรือกลุ่ม Attribute ที่ทำหน้าที่เป็น Key ของ Relation นั้น ซึ่งความสัมพันธ์นี้ จะถูกนิยามด้วยรูปแบบทางคณิตศาสตร์ที่เรียกว่า “Functional Dependency” ดังนี้ FD : Determinant-attribute Dependency-attribute
Functional Dependency (FDs) โดยที่ค่า Determinant-attribute หมายถึง Attribute ที่ระบุค่าด้วยค่าใดค่าหนึ่งแล้ว สามารถแสดงค่าของ Dependency-attribute ซึ่งเป็น Attribute ที่มีความสัมพันธ์กับ Determinant-attribute นั้นออกมาเช่น ตารางแสดงความสัมพันธ์ระหว่างหมายเลขบัตรประชาชน และชื่อเจ้าของบัตรดังนี้
Person_ID Person_Name Functional Dependency (FDs)
Functional Dependency (FDs) Person_ID Person_Name จากรูปแสดงการกำหนดความสัมพันธ์ระหว่าง Attribute ในรูปของ Functional Dependency
Person_ID Person_Name ประเภท Functional Dependency (FDs) Functional Dependency แบ่งออกเป็น 4 ประเภทดังนี้ 1. Functional Dependency ที่เกิดขึ้นจากความสัมพันธ์ระหว่าง Determinant และ Dependency อย่างละ 1 ค่า เช่นความสัมพันธ์ระหว่างหมายเลขบัตรประจำตัวประชาชนและชื่อเจ้าของบัตร ดังตารางนี้
ประเภท Functional Dependency (FDs) 2. Functional Dependency ที่เกิดขึ้นจากความสัมพันธ์ระหว่าง Determinant 1 ค่ากับ Dependency หลายค่า เช่น หมายเลขบัตรประชาชน และข้อมูลที่ปรากฏอยู่บนบัตรประชาชน ดังตารางนี้
Person_ID Person_Name , LName , Address , BirthDate ประเภท Functional Dependency (FDs)
ประเภท Functional Dependency (FDs) 3. Functional Dependency ที่มีความสัมพันธ์ 2 ทาง ซึ่งเป็น Functional Dependency ทั้ง Determinant และ Dependency ต่างสามารถทำหน้าที่ของอีกฝ่ายหนึ่งได้ เช่น ความสัมพันธ์ระหว่างชื่อของผู้จัดการโครงการ (Attribute “Manager”) กับชื่อโครงการ (Attribute “Project_No”)ซึ่งถ้าทราบชื่อผู้จัดการโครงการจะสามารถทราบถึงชื่อของโครงการที่ผู้จัดการนั้นเป็นเจ้าของได้ ในขณะเดียวกัน เมื่อทราบชื่อโครงการก็จะสามารถทราบถึงชื่อของผู้จัดการโครงการนั้นได้ เช่นเดียวกัน ดังตารางต่อไปนี้
Project_No Manager Manager Project_No ประเภท Functional Dependency (FDs) Manager Project_No
ประเภท Functional Dependency (FDs) 4. Functional Dependency ที่ต้องใช้ Determinant มากกว่า 1 ค่า เพื่ออ้างถึง Dependency เช่น ความสัมพันธ์ระหว่างจำนวนสินค้าที่ผลิตได้ของสินค้าแต่ละชนิดภายใต้สายการผลิตต่างๆ ดังตารางต่อไปนี้
ประเภท Functional Dependency (FDs) Product_Line , Item_No Used_Qut
First Normal Form (1NF) • ขั้นตอนนี้เป็นขั้นตอนสำหรับปรับโครงสร้างของ Relation • เพื่อให้ทุก Attribute ของ Relation มีคุณสมบัติ Atomicity กล่าวคือ • โครงสร้างข้อมูลของ Relation ในแบบ 1NF ต้องประกอบด้วย • Table ที่อยู่ในรูป 1NF • มี Attribute ที่ได้กำหนดให้เป็น Primary Key • ไม่มี Repeating Group • Attribute อื่นๆ ต้องขึ้นอยู่กับ Primary Key
First Normal Form (1NF) ตัวอย่างที่ 1 แสดงการทำ First Normal Form โดยกำหนดให้ Relation “Order” มีข้อมูลดังนี้
First Normal Form (1NF) ผลลัพธ์ที่ได้จากการทำ 1NF ในรูปของ Function Dependency ดังนี้ Cust_No,Product_ID Cust_Name,City,Zone_Sale, Order_Qut เขียนให้อยู่ในรูปแบบของ Table ได้ดังนี้ Order(Cust_No,Product_ID,Cust_Name,City,Zone_Sale,Order_Qut)
Second Normal Form (2NF) Table ที่อยู่ในรูปแบบ 2NF จะต้อง 1. อยู่ในรูปแบบของ 1NF และ 2. ไม่มี Partial dependency Partial dependency เกิดขึ้นในกรณีที่มีข้อมูลในบาง Attribute ขึ้นอยู่กับ Dependency บางส่วนของ Primary Key จาก table ที่ได้จาก 1NF เราหาได้ว่า Cust_No และ Product_ID รวมกัน ทำหน้าที่เป็น Primary Key ขั้นตอนต่อไปคือ หาว่า มี Attribute ใดบ้างที่มีความเป็น Partial dependency นั้นคือ ขึ้นอยู่กับ Cust_No เพียงอย่างเดียวหรือขึ้นอยู่กับ
Cust_No Cust_Name,City,Zone_Sale Second Normal Form (2NF) Product_ID เพียงอย่างเดียว และ Attribute ใด ที่ขึ้นอยู่กับ Cust_No และ Product_ID อย่างแท้จริง ผลลัพธ์ที่ได้จากการทำ 2NF ในรูปของ Function Dependency ดังนี้ Cust_No ,Product_ID Order_Qut
Second Normal Form (2NF) เขียนให้อยู่ในรูปแบบของ Table ได้ดังนี้ Customer(Cust_No, Cust_Name,City,Zone_Sale) Order (Cust_No ,Product_ID,Order_Qut)
Third Normal Form (3NF) Table ที่อยู่ในรูปแบบ 3NF จะต้อง 1. อยู่ในรูปแบบของ 2NF และ 2. ไม่มี Transitive dependency Transitive dependency เกิดขึ้นในกรณีที่มี Attribute บางตัวขึ้นอยู่กับ Dependency Attribute ที่ไม่ใช่ Key (non-key attribute) จาก ตารางที่ได้จาก 2NF
Cust_No Cust_Name,Zone_Sale Cust_No ,Product_ID Order_Qut Third Normal Form (3NF) ผลลัพธ์ที่ได้จากการทำ 3NF ในรูปของ Function Dependency ดังนี้ Zone_SaleCity
Third Normal Form (3NF) เขียนให้อยู่ในรูปแบบของ Table ได้ดังนี้ Customer(Cust_No, Cust_Name,Zone_Sale) CustZone (Zone_Sale ,City) Order (Cust_No ,Product_ID,Order_Qut)
Boyce-Codd Normal Form (BCNF) สำหรับ Relation ที่จะมีโครงสร้างแบบ BCNF จะต้องมีคุณสมบัติดังนี้ 1. อยู่ในรูปแบบของ 3NF 2. Attribute ที่เป็น Determinant จะต้องเป็น Relation Key เช่น Relation “Customer” มีตัวอย่างข้อมูลดังนี้
Boyce-Codd Normal Form (BCNF) Customer D1 : Cust_ID Tax_ID,Cust_Name,Address D2 : Tax_ID Cust_ID,Cust_Name,Address D3 : Cust_ID Tax_ID
Boyce-Codd Normal Form (BCNF) เมื่อพิจารณาใน D1 และ D2 จะเห็นว่า Attribute “Cust_ID” และ “Tax_ID” ต่างสามารถทำหน้าที่เป็น Determinant เพื่ออ้างอิง Attribute “Cust_Name” และ “Address” ได้เช่นเดียวกัน ในขณะเดียวกัน เมื่อพิจารณาใน D3 จะเห็นว่า ความสัมพันธ์ของ 2 Attribute นี้เป็นความสัมพันธ์ 2 ทาง กล่าวคือ ต่างฝ่ายสามารถทำหน้าที่แทนหน้าที่ของอีกฝ่ายหนึ่งได้ ดังนั้นในกรณีแบบนี้ จึงสามารถกำหนดให้ Attribute ใดเป็น Attribute หนึ่งได้ใน 2 Attribute นี้ ทำหน้าที่เป็น Relation Key ได้ ซึ่งในตัวอย่าง Attribute “Cust_ID” ถูกกำหนดให้เป็น Relation Key อยู่แล้ว
Boyce-Codd Normal Form (BCNF) แต่ใน Relation “CustOrder” ที่มีข้อมูลดังต่อไปนี้
Cust_ID,Product_ID Order_Qty,Tax_ID Tax_ID,Product_ID Order_Qty,Cust_ID Cust_ID Tax_ID Boyce-Codd Normal Form (BCNF) จาก Relation ที่กำหนด สามารถเขียน FD ได้ดังนี้ เมื่อพิจารณาตามคุณสมบัติข้อที่ 2 ของ BCNF จะพบว่า Relation นี้ มีโครงสร้างที่ไม่เป็น BCNF เนื่องจาก Attribute Product_ID ไม่ได้ทำหน้าที่เป็น Relation Key ของ Relation จึงต้องแยก Relation นี้ออกเป็น 2 Relation โดยกระทำได้ 2 วิธี ดังนี้
Cust_ID Tax_ID Cust_ID Cust_Name, Address Boyce-Codd Normal Form (BCNF) วิธีที่ 1 Customer1 Cust_Order1 Customer1(Cust_ID, Tax_ID) Cust_Order1(Cust_ID, Cust_Name,Address)
Cust_ID Tax_ID Tax_ID Cust_Name, Address Boyce-Codd Normal Form (BCNF) วิธีที่ 2 Customer2 Cust_Order2 Customer1(Cust_ID, Tax_ID) Cust_Order1(Tax_ID, Cust_Name,Address)
Fourth Normal Form (4NF) • สำหรับ Relation ที่มีโครงสร้างแบบ 4NF จะต้องมีคุณสมบัติ • ดังนี้ • ต้องมีโครงสร้างเป็นไปตามคุณสมบัติของ BCNF • ต้องไม่ปรากฏความสัมพันธ์ระหว่าง Attribute ในแบบ • Muli-Value Dependency
Fourth Normal Form (4NF) Employee_Skill
Fourth Normal Form (4NF) Computer_Skill Language_Skill
Fourth Normal Form (4NF) Computer_Skill Language_Skill
Fifth Normal Form (5NF) • สำหรับ Relation ที่มีโครงสร้างแบบ 5NF จะต้องมีคุณสมบัติ • ดังนี้ • ต้องมีโครงสร้างเป็นไปตามคุณสมบัติของ 4NF • ต้องมีคุณสมบัติ Join Dependency • Join Dependency เป็นคุณสมบัติของการนำ Relation ย่อยที่เกิดจากการแตก Relation เดิม เช่น เมื่อนำ Relation “Computer_Skills” และ “Language_Skills” มาทำการ Join โดยใช้ค่าของ Attribute “Employee” แล้วยังคงได้ผลเช่นเดียวกับ Relation “Employee_Skill” ที่ 2 Relation นั้นแตกมา
Fifth Normal Form (5NF) Computer_Skill Language_Skill
Fifth Normal Form (5NF) Employee_Skill