- First Normal Form : 1NF (เฟิร์ส นอร์มัลฟอร์ม)
- คุณสมบัติ: ทุก Attribute (แอททริบิว) เก็บค่าเพียงค่าเดียว Single-Value (ซิงเกิลแวลู) หรือมีความเป็น Atomic (อะตอมมิค)
การทำ 1NF: มี 3 วิธี
เช่น ตาราง Department (ดีพาร์ทเม้นต์) ที่ยังไม่ได้นอร์มัลไลเซชั่น จะเห็นว่า Attribute (แอททริบิว) “Location” ยังไม่เป็น Atomic (อะตอมมิค)
==================================
|| DID || DNAME || DLOCATION ||
=================================
|| D01 || Store || Bangkok, Rayong, Yala ||
|| D02 || Warehouse || Bangkok, Changmai ||
=========================
1. Relation Composition (รีเรชั่น คอมโพซิส) คือ การนำแอททริบิวที่มีข้อมูลหลายค่ามาสร้างเป็นตารางใหม่
เช่น จากตาราง Department (ดีพาร์ทเม้นต์) แบ่งเป็น “ Department1” และ “ Department 2”
Department 1:
===================
|| DID || DNAME ||
===================
|| D01 || Store ||
|| D02 || Warehouse ||
===================
Department 2:
=====================
|| DID || DLOCATION ||
=====================
|| D01 || Bangkok ||
|| D01 || Rayong ||
|| D01 || Yala ||
|| D02 || Bangkok ||
|| D02 || Changmai ||
=====================
2. กำหนด Maximum (แม็กซิมัม) ให้แอททริบิวที่ยังไม่เป็น Atomic (อะตอมมิค)
เช่น กำหนดให้ “Location” ไม่เกิน 3 ที่ ก็จะได้ DLOCATION1, DLOCATION2 และ DLOCATION3
========================================================
|| DID || DNAME || DLOCATION1 || DLOCATION2 || DLOCATION3 ||
========================================================
|| D01 || Store || Bangkok || Rayong || Yala ||
|| D02 || Warehouse || Bangkok || Changmai || Null ||
=======================================================
3. เก็บข้อมูลที่ไม่เป็น Atomic (อะตอมมิค) แยกกัน และเพิ่มแอททริบิว “Location” เป็น Key (คีย์) ด้วย
เช่น
==============================
|| DID || DNAME || DLOCATION ||
==============================
|| D01 || Store || Bangkok ||
|| D01 || Store || Rayong ||
|| D01 || Store || Yala ||
|| D02 || Warehouse || Bangkok ||
|| D02 || Warehouse || Changmai ||
===============================
ข้อเสีย คือ ทำให้เกิดข้อมูลซำ้ซ้อนมากขึ้น
- คุณสมบัติ: แอททริบิวทุกตัวต้องขึ้นกับคีย์หลักทุกตัว ไม่ขึ้นกับคีย์ใดคีย์หนึ่งในตาราง ขั้นตอนนี้ต้องกำจัดแอททริบิวที่ไม่ขึ้นกับคีย์หลัก
เช่น ตารางพนักงานในแผนก “Employee” ที่มีแอททริบิว “EID” เป็นคีย์หลัก แต่แอททริบิว “DNAME” ก็สามารถขึ้นกับ “DID” ได้
=========================================
|| EID || ENAME || DID || DNAME ||
=========================================
|| E01 || AAA || D01 || Store ||
|| E02 || BBB || D01 || Warehouse ||
=========================================
ต้องทำการแยกให้เป็น 2 ตารางแทนโดยที่
ตารางที่ 1 มี “EID” ทำหน้าที่เป็นคีย์หลัก กับ “ENAME”
ตารางที่ 2 มี “DID” ทำหน้าที่เป็นคีย์หลัก และ “DNAME”
- คุณสมบัติ: ปรับมาจาก 2NF ขึ้นตอนก็จะคล้ายกับ 2NF ที่แอททริบิวทุกตัวต้องขึ้นกับคีย์หลักทุกตัว ไม่ขึ้นกับคีย์ใดคีย์หนึ่งในตาราง ต้องกำจัดแอททริบิวที่ไม่ขึ้นกับคีย์หลักเช่นกัน
- คุณสมบัติ: แอททริบิวในตารางขึ้นกับ Candidate Key (แคนดิเดตคีย์)
Candidate Key (แคนดิเดตคีย์) คือ คีย์ที่มีค่าไม่ซำ้กัน สามารถนำมาแทนคีย์หลักได้ เช่น รหัสประจำตัวประชาชน
เช่น ตาราง “Employee” ที่มีแอททริบิว “IDCARD” หรือเลขประจำตัวประชาชนที่ไม่ซ้ำกัน สามารถนำมาทำเป็นคีย์หลักได้
===================================
|| EID || ENAME || IDCARD ||
==================================
|| E01 || AAA || 1234567890123 ||
|| E02 || BBB || 0123456789123 ||
==================================
- คุณสมบัติ: จะต้องไม่มีการขึ้นต่อกันเชิงกลุ่มภายในรีเลชัน
- คุณสมบัติ: จะต้องไม่มีคุณสมบัติของการขึ้นต่อกันแบบเชื่อมโยง join (จอย)
ที่มาภาพ: commons.wikimedia.org/wiki/File:Relational_database_terms.svg