Second Normal Form (2 NF)
กฎของการเป็น 2NF
- ต้องเป็น 1NF ก่อน
- ทุก attribute ที่ไม่ใช่ key (non-prime attriubute) จะต้องขึ้นกับ primary key (functional dependency)
- ห้ามมี attribute ที่เป็นส่วนหนึ่งของบาง key ที่เป็น primary key เท่านั้น (partial dependency)
Functional Dependency เป็นการแสดงถึงการเชื่อมกันของ attribute
Partial Dependency หาก relation มีคีย์หลักเป็น composite key (คีย์หลักที่ประกอบด้วยแอตทริบิวต์มากกว่าหนึ่ง) และมีบาง attribute ของคีย์หลักที่สามารถกำหนดค่าของแอตทริบิวต์อื่นได้ -> เกิด partial dependency หรือบางแอตทริบิวต์ขึ้นอยู่กับบางส่วนของคีย์ -> รีเลชันไม่มีคุณสมบัติ 2NF
ตัวอย่าง
------------------|
| ------------------
| | | |
Emp_Proj(Emp_No, Proj_no, Emp_name, Proj_name, No_hour)
เนื่องจาก primary key ของ relation EMP_PROJ คือแอตทริบิวต์ Emp_id และ Proj_no (เป็น composite key)
ดังนั้น ทุกแอตทริบิวต์จะต้องขึ้นอยู่กับคีย์หลักทั้งสองแอตทริบิวต์
แต่จะเห็นได้ว่า Proj_no สามารถกำหนดค่าของ Proj_name ได้ (Proj_no → Proj_name) และ Emp_id ก็สามารถกำหนดค่า Emp_name ได้เช่นกัน (ซึ่ง FD ทั้งสอง เป็น partial dependency)
การแก้ไข
ต้องทำการแยกตารางออกเป็น
Employee(Emp_no, Emp_name)
Project(Proj_no, Proj_name)
และมี
Employee_Project(Emp_no, Proj_no, no_hour)