Database Normalization
วัตถุประสงค์
- Normalization
- Function dependency (FD)
- ประเภทของ Function dependency
- 1NF - First Normal Form
- 2NF - Second Normal Form
- 3NF - Third Normal Form
- BCNF - Boyce-codd Normal Form
- 4NF - Fourth Normal Form
- 5NF - Fifth Normal Form
ความผิดพลาดที่เกิดขึ้นเมื่อไม่มีการ normalization
Insert Anomaly
จากตัวอย่างเราไม่สามารถทำการ เพิ่ม sale office ได้
Update Anomaly
ไม่สามารถ update หมายเลขโทรศัพท์เนื่องจาก sale office มีอยู่หลายที่
Deletion Anomaly
ไม่สามารถลบได้
1. Normalization
Normalization คือวิธีการใช้ในการตรวจสอบและแก้ปัญหาทางด้านความซ้ำช้อนของข้อมูล และความผิดพลาดจากการเพิ่มหรือลบข้อมูล โดยการดำเนินการให้ข้อมูลในแต่ละ Relation อยู่ในหน่วยที่เล็กที่สุด ในความสัมพันธ์
- Relation schema
ในความสำพันธ์หนึ่งๆ จะอธิบายโครงสร้างของ relation ได้จากชื่อของ relation และ attribute ต่าง ของ relation
R ( A1, A2, … An)
เช่น::
Student ( Scode, Name, Surname, Bithday, Faculty)
Course ( Ccode, SubjName, Credit, Instructor, Textbook)
Scode | Name | Surname | Birthday | Faculty |
---|---|---|---|---|
20101214 | John | Harris | 14/5/1979 | Engineering |
56210121 | Paul | Martin | 2/11/1982 | Management |
4295412 | Lee | Kevin | 1/3/1983 | Science |
20101239 | Jim | Jackson | 21/7/1981 | Letter |
2. Function dependency
Functional dependency (FD) คือความสัมพันธ์ระหว่าง attribute ใน Relation โดยมีลักษณะความสัมพันธ์คือ ข้อมูลของ attribute หนึ่ง (หรือกลุ่มหนึ่ง) ขึ้นอยู่กับค่าของ attribute หนึ่ง (หรือกลุ่มหนึ่ง) อย่างเป็นฟังก์ชัน
attribute X และ Y อยู่ใน relation R ดังนั้น X -> Y
อ่านว่า Y ขึ้นตรงต่อ X อย่างเป็นฟังก์ชัน หรือ X กำหนดค่า Y
- X คือ ตัวกำหนด หรือ Determinant attribute
- Y คือ Dependent attribute
นิยาม::
X -> Y ก็ต่อเมื่อ ทุกค่าของ X ใน R สัมพันธ์กับค่าของ Y เพียงค่าเดียว นั่นคือ หากรู้ว่าค่า X เป็นอะไร ก็จะระบุค่า Y ได้
เช่น::
SCode -> SName, Faculty, Birthday
Birthday -> Age
{ อำเภอ, จังหวัด } -> รหัสไปรษณีย์
รหัสไปรษณีย์ -> { อำเภอ, จังหวัด }
3 ชนิดของ Function dependency
Trivial fucntion dependency
นิยาม::
A->B เป็น trivial function dependency ถ้า B เป็น subset ของ A
เช่น::
{Student_id,Student_name} > Student_id เป็น trivial function dependency เนื่องจาก Student_id เป็น subset ใน เซต {Student_id,Student_name} {emp_id, emp_name} -> emp_name ( emp_name เป็น subset ใน {emp_id,emp_name})
Non-trival function dependency
นิยาม
A->B จะต้องเป็น function dependency ที่ B ไม่อยู่ใน subset ของ A
เช่น
emp_id -> emp_name ( emp_name ไม่ใช้ subset ใน {emp_id}) emp_id -> emp_address ( emp_address ไม่ใช้ subset ใน {emp_id})
Multivalued dependency
นิยาม
เกิดขึ้นเมือค่าของ function(x) มี dependency value มากกว่า ค่าเดียวในตาราง
เช่น
โรงงานจักรยาน ผลิตจักรยานสี black,white ในแต่ละ model bike_model ->> manuf_year bike_model ->> color
| bike_model | manuf_year | color | | --- | --- | --- | | M1001 | 2007 | Black | | M1001 | 2007 | Red | | M2012 | 2008 | Black | | M2012 | 2008 | Red | | M2222 | 2009 | Black | | M2222 | 2009 | Red |
4. 1NF - First Normal Form
ลักษณะของ 1NF ค่าในตารางจะต้องมีลักษณะ เป็น atomic มีค่าเดียวในแต่ละ attribute
- Each row in a table must be uniquely identifiable.
- Each column must only contain one piece of information
- No repeating columns - no two columns should contain the same data.
Course | Content |
---|---|
Programming | Java, C++ |
Web | HTML, PHP, ASP |
จัดตารางใหม่
Course | Content |
---|---|
Programming | Java |
Programming | c++ |
Web | HTML |
Web | PHP |
Web | ASP |
จากตารางที่อยู่ด้านล่าง ในแต่ละ colume สามารถข้อมูลได้หลายชนิด
Address |
---|
120 Hanover Sq. London, WA1 1DP . UK |
23 Tsawassen Blvd. Tsawassen, T2F 8M4 . Canada |
54, rue Royale . Nantes, 44000 . France |
Obere Str. 57 Berlin, 12209 Germany |
Via Monte Bianco 34 Torino, 10100 Italy |
แยกได้เป็น
address | city | postal code | country |
---|---|---|---|
120 Hanover Sq. | London | WA1 1DP | UK |
23 Tsawassen Blvd. | Tsawassen | T2F 8M4 | Canada |
54, rue Royale | Nantes | 44000 | France |
Obere Str. 57 | Berlin | 12209 | Germany |
Via Monte Bianco 34 | Torino | 10100 | Italy |
5. 2NF - Second Normal Form
- Prime attribute จำแนกค่าของ attribute ว่าค่าใดเป็น Candidate-key ถือเป็น attribute หลัก (Prime attribute)
- Non-prime attribute เป็นค่า attribute ที่ไม่ใช่ ค่า prime attribute
แยกตารางตามความสัมพันธ์ ของ prime attribute ออกมาได้ดังนี้
6. 3NF - Third Normal Form
- 3NF จะต้องอยู่ในรูปของ 2NF ก่อน การพิจารณาใน 3NF จะพิจารณาส่วนของ non-prime attribute มีความสำพันธ์ แบบ transitive dependency
- Std_id -> City, city -> zip ดังนั้น Std_id สามารถระบุ Zip ได้โดยผ่าน attribute City
ทำให้สามารถแยกย่อยตารางได้ จาก transitive dependency
สรุป ขั้นตอน
7. BCNF - Boyce-codd Normal Form
เป็นส่วนขยายของ 3NF โดยมีนิยามว่า::
สำหรับ non-trival fuctional dependency ใดๆ x -> y แล้ว x จะต้องมีคุณสมบัติของ Super key
Stu_ID → Stu_Name, Zip
Zip → City
ตัวอย่าง 1
ตัวอย่าง 2
UNF
ORDERFORM [Order#, OrderDate, Cust#, CustName Product#, ProductDesc, QtyOrdered]
1NF
(จัดกลุ่ม เพิ่ม primariy key)
ORDERFORM [Order#, OrderDate, Cust#, CustName]
PRODUCTORDER [Order#, Product#, ProductDesc, QtyOrdered]
2NF
PRODUCT [Product#, ProductDesc]
PRODUCTORDER [Order#,Product#, Qty Ordered]
ORDERFORM [Order#, OrderDate, Cust#, CustName]
3NF
PRODUCT [Product#, ProductDesc]
PRODUCTORDER [Order#,Product#, Qty Ordered]
ORDERFORM [Order#, OrderDate, Cust#(FK)]
CUSTOMER [Cust#, CustName]