Search

Sunday, December 14, 2008

Relational Database Normalization 6/7

ขั้นตอนการ Normalization
    5.1 เปลี่ยนตารางที่ยังไม่เคย Normalization เป็น First Normal Form หรือ 1NF
    วิธีพิจารณา คือ แยกข้อมูลเป็นระเบียน โดยไม่มีการจัดกลุ่ม
    ตารางที่ไม่ผ่านการ normalization
    orderid
    305
    orderdate
    31/01/47
    productid
    432
    455
    467
    quan
    20
    2
    1
    ตารางที่ผ่านการ normalization ในระดับ 1NF
    orderid orderdate productid quan
    305 31/01/47 432 20
    305 31/01/47 455 2
    305 31/01/47 467 1


    5.2 เปลี่ยนจาก 1NF เป็น 2NF(Second Normal Form) คือการเปลี่ยนตารางที่มีปัญหา 4 ประการ
    วิธีพิจารณาเปลี่ยน 1NF เป็น 2NF คือ ไม่มี non key ตัวใด ไม่สัมพันธ์กับ primary key (ให้พิจารณาเฉพาะ non key และ primary key)
    สิ่งที่ได้จากตาราง 1 ตาราง จะแตกออกมาเป็นหลายตาราง
    5.2.1 แก้ไขข้อมูล ต้องแก้หลายระเบียน
    5.2.2 มีข้อมูลเดียวกันในหลายระเบียน อาจขัดแย้งกันได้
    5.2.3 การเพิ่มข้อมูลทำได้ยาก
    5.2.4 การลบข้อมูลทำได้ยาก
    ท่านลองพิจารณา Schema ของตารางนี้ว่าจะแยกได้กี่ตาราง
    จาก orderid,custid,custname,date,proid,proname,price,quantity,categoryid,categoryname
    เป็น orders (orderid,custid,custname,date,proid,proname,price,quantity)
    เป็น categories (categoryid,categoryname)
    เหตุที่แยก categories ออกมา เพราะ categoryid ไม่สัมพันธ์กับ orderid แต่สัมพันธ์กับ proid โดยตรง จึงต้องแยกออกมา

    5.3 เปลี่ยนจาก 2NF เป็น 3NF(Third Normal Form) คือแก้ปัญหายังไม่หมด อาจยังมีข้อมูลที่มีปัญหาอีก จึงต้องทำ 3NF
    วิธีพิจารณาเปลี่ยน 2NF เป็น 3NF คือ ไม่มี non key ตัวใด ขึ้นอยู่กับ non key ตัวอื่นใน entity เดียวกัน (ให้พิจารณาเฉพาะ non key และ non key)
    จาก orders (orderid,custid,custname,date,proid,proname,price,quantity)
    เป็น orders (orderid,custid,date)
    เป็น customers (custid,custname)
    เป็น order details (orderid,proid,price,quantity)
    เป็น products (proid,proname)

No comments: