วันจันทร์ที่ 27 มกราคม พ.ศ. 2557

การจัดระเบียบฐานข้อมูล (Normalization)




ทำไมถึงต้องจัดระเบียบฐานข้อมูล
                ระบบฐานข้อมูลแบบใช้ความสัมพันธ์กันนั้น ข้อมูลจะถูกจัดแยกเข้าสู่ตารางย่อยๆหลายๆตาราง การจัดระเบียบฐานข้อมูลอย่างถูกวิธีจะช่วยให้การใช้งานฐานข้อมูลมีประสิทธิภาพยิ่งขึ้น เช่น ในแง่ของการเก็บข้อมูล จะช่วยลดความซ้ำซ้อนในการที่จะต้องจัดเก็บข้อมูลอย่างเดียวกัน  ในแง่ของการแก้ไขจะช่วยให้สามารถแก้ไขข้อมูลได้อย่างถูกต้องและเป็นระบบมากขึ้น

ขั้นตอนการจัดระเบียบฐานข้อมูล
                การจัดระเบียบฐานข้อมูลหรือที่เรียกว่าการทำนอร์มอลไลเซชั่นนั้น จะเป็นการปรับตารางให้เข้าสู่รูปแบบมาตรฐานที่เรียกว่า นอร์มอลไลเซชั่นฟอร์ม (Normalization Form ย่อด้วย NF) ซึ่งจะมีลำดับขั้นต่างๆ ตั้งแต่ 1NF, 2NF จนกระทั่งถึง 5NF แต่ทว่าในการใช้โดยปกติ จะทำจนถึงระดับ 3NF ก็เพียงพอ ในที่นี้ก็จะขอกล่าวถึงระดับ 3NF เท่านั้น นอร์มอลไลเซซั่นฟอร์มในลำดับที่สูงกว่า จะต้องมีคุณสมบัติของลำดับที่ต่ำกว่าอยู่ในตัวด้วย ดังนั้น ถ้าทำจนถึงขั้น 3NF ก็หมายความว่าจะมีคุณสมบัติของ1NFกับ2NF อยู่ด้วย

การทำให้ตารางเข้าสู่ 1NF
                ในระดับ 1NF จะมีกฎอยู่ว่า ห้ามไม่ให้มีช่องข้อมูลที่เก็บค่ามากกว่าหนึ่งค่าอยู่ จากตัวอย่างในรูปที่1 ก็จะได้ว่าให้แตกข้อมูลในตารางทางซ้ายออกเป็นเรคคอร์ดย่อยๆตามตารางทางด้านขวา



การทำ ให้ตารางเข้าสู่ 2NF
                ตารางที่มีคุณสมบัติในขั้น2NF จะมีลักษณะกล่าวคือ เป็นตารางที่มีไพรมารี่ย์คีย์ (ข้อมูลที่เป็นตัวแทนข้อมูลทั้งหมด) ซึ่งเมื่อเลือกค่าไพรมารี่ย์คีย์แล้วจะต้องสามารถบอกข้อมูลที่เหลือทั้งหมดได้ ถ้าตารางใดมีไพรมารี่ย์คีย์เพียงตัวเดียวก็ถือว่าอยู่ในระดับ 2NFอยู่แล้ว แต่ถ้ามีไพรมารี่ย์คีย์ มากกว่าหนึ่ง ก็ให้พิจารณาว่า ไพรมารี่ย์คีย์แต่ละตัว สามารถชี้บ่งไปยังฟิลด์อื่นๆได้หรือไม่ ถ้าได้ ให้แยกไพรมารี่ย์คีย์พร้อมทั้งฟิลด์เหล่านั้นออกมา
                ในรูปที่ 2 จะเห็นได้ว่า จากตารางรายละเอียดการขายมีหมายเลขใบกำกับสินค้า (InvNo) กับรหัสสินค้า (ProId) เป็นไพรมารี่ย์คีย์ ถ้าระบุหมายเลขใบกำกับสินค้า กับรหัสสินค้าแล้วละก็จะสามารถบ่งบอกถึงข้อมูลที่เหลือทั้งหมดได้ แต่เมื่อพิจารณาต่อไปว่า ไพรมารี่ย์คีย์แต่ละตัวบ่งชี้อะไรได้บ้าง ก็จะพบว่าหมายเลขใบกำกับสินค้า สามารถบ่งชี้ถึงวันที่ และ ลูกค้าได้ เราจึงดึงข้อมูลทั้งหมดออกมาเป็นตารางใหม่ ส่วนรหัสสินค้าก็สามารถชี้บ่งข้อมูลทั้งหมดของสินค้าได้ ก็จึงดึงออกมาได้อีกตารางเช่นกัน 

การทำ ให้ตารางเข้าสู่ 3NF
                ตารางที่มีคุณสมบัติในขั้น 3NF จะมีลักษณะกล่าวคือ ต้องไม่มีฟิลด์อื่น นอกจากไพรมารี่ย์คีย์ที่สามารถชี้บ่งไปยังฟิลด์อื่นได้ ถ้ามี ให้ดึงออกมาเป็นตารางใหม่
                จากรูปที่2แล้ว ในตารางใบกำกับสินค้า จะเห็นได้ว่ารหัสลูกค้า (CustId) สามารถชี้บ่งไปยังฟิลด์อื่นๆได้ ดังนั้น การจะทำให้อยู่ในขั้น 3NF ก็ต้องแยกข้อมูลลูกค้าทั้งหมดออกมาเป็นตารางใหม่ซึ่งก็จะได้เป็นตารางในรูปที่3




จะเห็นได้ว่าข้อมูลลดความ ซ้ำซ้อนลงได้มาก จากตัวอย่างในรูปที่ 2 บน ที่มีข้อมูลทั้งหมด84 ช่อง จะเหลือเพียง64ช่องเท่านั้น (นับจากตารางสินค้าและตารางการขาย ในรูปที่ 2 และตารางใบกำกับสินค้าและตารางลูกค้าในรูปที่ 3) แต่ในขณะเดียวกัน ก็จะมีจำนวนตารางเพิ่มขึ้นด้วยจาก1ตารางเป็น4ตาราง โครงสร้างก็มีความซับซ้อน มากขึ้น ทำให้การใช้งานอาจจะสับสนได้ นอกจากนั้นการที่มีตารางย่อยๆหลายตารางอาจทำให้การเข้าถึงข้อมูลช้าลงด้วย ดังนั้น การจะทำถึงขั้นใด หรือ ทำให้สมบูรณ์เพียงไรนั้นก็ขึ้นอยู่กับลักษณะข้อมูลที่จะใช้


การออกแบบฐานข้อมูลและ ER-ไดอะแกรม



               
                เมื่อเริ่มใช้ฐานข้อมูล การออกแบบโครงสร้างของฐานข้อมูล จะเป็นสิ่งที่สำคัญมาก การออกแบบ จะใช้แผนภูมิความสัมพันธ์ระหว่างข้อมูลที่เรียกว่า ER-ไดอะแกรม (Entity Relationship Diagram) ดังตัวอย่างในรูปที่1เข้ามาช่วยในการออกแบบ แผนภูมินี้จะช่วยเรียบเรียงความคิด และช่วยทำให้มองความสัมพันธ์ระหว่างข้อมูลต่างๆได้ชัดเจนยิ่งขึ้น


ลักษณะของ ER-ไดอะแกรม
                ER-ไดอะแกรมประกอบด้วยสามส่วนใหญ่ๆคือ
เอนทิตี (Entity)
                เป็นตัวแทนของสิ่งที่สนใจ หรือจะพูดอีกอย่างว่า ตัวแทนของชุดข้อมูลหนึ่ง ยกตัวอย่างเช่น เอนทิตีสินค้า เอนทิตีลูกค้า เอนทิตีใบสั่งซื้อ เป็นต้น แทนด้วยสี่เหลี่ยม
พรอพเพอร์ตี้(Property)
                เป็นคุณสมบัติของเอนทิตี ซึ่งก็คือ ข้อมูลจริงของสิ่งที่เราสนใจ เช่น เอนทิตีสินค้า ก็จะมีพรอพเพอร์ตี้ เช่น รหัสสินค้า ราคาต่อหน่วย เป็นต้น แทนด้วยวงกลม
ความสัมพันธ์ (Relationship)
                เป็นการเชื่อมโยงระหว่างเอนทิตีกับเอนทิตี เช่น ความสัมพันธ์ระหว่างสินค้ากับใบสั่งซื้อ เป็นต้น แทนด้วยสามเหลี่ยม ความสัมพันธ์มีด้วยกันสามชนิดคือ ความสัมพันธ์ชนิดหนึ่งต่อหนึ่ง (1-1) ความสัมพันธ์ชนิดหนึ่งต่อกลุ่ม (1-M) ความสัมพันธ์ชนิดกลุ่มต่อกลุ่ม (M-N)
                จากรูปที่1จะอ่านได้ว่า มีข้อมูลหลักอยู่ 3 อย่าง (3 เอนทิตี ,3 ตาราง) ได้แก่ ข้อมูลสินค้า(Product) ข้อมูลการสั่งซื้อ(Order)  ข้อมูลลูกค้า(Customer) ซึ่งแต่ละตารางจะมีรายละเอียดย่อยๆ อาทิเช่น ตารางข้อมูลสินค้า ก็จะมีข้อมูลของรหัสสินค้า(ProductID)  ชื่อสินค้า(ProductName) ราคาต่อหน่วย(UnitPrice) ปริมาณคงคลัง (UnitInStock)อยู่เป็นต้น
                ส่วนจากความสัมพันธ์ก็จะอ่านได้ว่า ในการสั่งซื้อแต่ละครั้งจะประกอบด้วยสินค้ากี่ประเภทก็ได้ หรือสินค้าแต่ละประเภทจะถูกสั่งจากหลายการสั่งซื้อก็ได้ (ความสัมพันธ์ชนิดกลุ่มต่อกลุ่ม) กับ แต่ละการสั่งซื้อจะต้องมีผู้สั่งสินค้าเพียงคนเดียว แต่ทว่าลูกค้าแต่ละคนสามารถมีการสั่งซื้อหลายครั้งก็ได้ (ความ สัมพันธ์ชนิดหนึ่งต่อกลุ่ม)

เราจะเขียน ER-ไดอะแกรมได้อย่างไร
                การได้มาซึ่งER-ไดอะแกรมในรูปที่1 นั้น จะมีขั้นตอนดังต่อไปนี้
1. ศึกษารายละเอียดและลักษณะหน้าที่งานของระบบ
                ศึกษาและรวบรวมรายละเอียดเกี่ยวกับลักษณะหน้าที่งานของระบบ ข้อมูลที่เกี่ยวข้อง ขั้นตอนในการทำงาน ตลอดจนข้อกำหนดต่างๆ ซึ่งอาจทำได้ด้วยการสัมภาษณ์หรือศึกษาจากแบบฟอร์มต่าง ๆ ที่มีการใช้งานอยู่ในระบบงานนั้น
2. กำหนดเอนทิตีที่ควรมีในระบบฐานข้อมูล
                นำรายละเอียดในข้อ1 มาทำการกำหนดเอนทิตีที่จำเป็นต้องมีอยู่ในระบบฐานข้อมูล พร้อมทั้งกำหนดพรอพเพอร์ตี้ของแต่ละเอนทิตีด้วย
3. กำหนดความสัมพันธ์ระหว่างเอนทิตี
                กำหนดประเภทของความสัมพันธ์ระหว่างเอนทิตี โดยพิจารณาจากข้อมูลที่ได้ทำการศึกษามา
4.ปรับปรุงเอนทิตี พรอพเพอร์ตี้ และความสัมพันธ์ ให้เหมาะสม
                ทำการวิเคราะห์ER-ไดอะแกรมที่ได้มาว่า สื่อถึงระบบข้อมูลที่ต้องการจริงหรือไม่ แล้วทำการปรับแต่งให้เหมาะสม โดยอาจมีการเพิ่มหรือลดเอนทิตีหรือพรอพเพอร์ตี้ ปรับปรุงหรือเปลี่ยนแปลงลักษณะความสัมพันธ์เป็นต้น
คำไข ระบบฐานข้อมูล การออกแบบ ER-ไดอะแกรม เคล็ดลับ-วิธีการ บริหารเทคโนโลยี่/สารสนเทศ