วันจันทร์ที่ 3 ธันวาคม พ.ศ. 2555

การออกแบบฐานข้อมูล


หลักการออกแบบฐานข้อมูล

การออกแบบฐานข้อมูล

หลักการออกแบบฐานข้อมูล
การออกแบบฐานข้อมูลเป็นขั้นตอนที่สำคัญมาก  ถ้าทำอย่างรอบคอบและถูกต้องจะทำให้ระบบฐานข้อมูลของงานนั้นมีความครบถ้วน  ไม่ซ้ำซ้อน  และมีความถูกต้อง  มีผู้กล่าวว่าการออกแบบฐานข้อมูลเป็นทั้งศาสตร์และศิลป์  เพราะผู้ออกแบบฐานข้อมูลจะต้องอาศัยเทคนิคในการออกแบบประกอบกับประสบการณ์  ช่วยในการออกแบบฐานข้อมูล  ในบทนี้เราจะเริ่มเรียนรู้เทคนิคในการออกแบบต่าง ๆ  โดยเริ่มจากการศึกษาแนวคิดเกี่ยวกับการออกแบบฐานข้อมูล  ได้แก่  แนวคิดเรื่องพจนานุกรมข้อมูล  การขึ้นต่อกับแบบฟังก์ชั่น (Functional  Dependencies)  ซึ่งเป็นการสังเกตความสัมพันธ์ระหว่างค่าของแอตทริบิวต์ในแต่ละตารางการขึ้นต่อกันชนิดสำคัญและไม่สำคัญ  สมบัติของเซตของการขึ้นต่อกัน  กฎการอนุมาน  เซตของการขึ้นต่อกันแบบลดรูปไม่ได้  แผนภาพการขึ้นต่อกัน  (FD  Diagram)  และการแยกตารางย่อยออกไปโดยไม่สูญเสียคุณสมบัติที่มีอยู่เดิม  (Nonloss  Decomposition)


กระบวนการออกแบบ

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



ตัวอย่าง
    1. แผนภาพการขึ้นต่อกัน
แผนการขึ้นต่อกัน  หรือ  Functional  Dependency  Diagram  เป็นวิธีแสดงให้เห็นภาพการขึ้นต่อกันให้เห็นได้ง่าย  ชัดเจนและสะดวก  โดยใช้กรอบสี่เหลี่ยมผืนผ้าแทนแอตทริบิวต์แต่ละตัว  และใช้ลูกศรชี้ออกจากคีย์  (Candidate Keys  หรือ  Primary  Keys)  ซึ่งจะทำให้สะดวกในการออกแบบให้ตารางอยู่ในรูปปกติโดยการตัดลูกศรที่ทำให้เกิดปัญหาหรือสร้างความยุ่งยากออกไป
ตัวอย่าง  จากตาราง  SCP  ซึ่งมีการขึ้นต่อกัน  คือ
                {SNO,  PNO}  g  QTY
                SNO  g  CITY
เราสามรถแสดงด้วยแผนภาพการขึ้นต่อกันเป็นดังนี้
(C.J.  Date,  2000)






                            
                หรือแสดงด้วยแผนภาพการขึ้นต่อกันอย่างง่าย  (ดัดแปลงจาก  Kendall  and  Kendall, 1999  และ  สุวัตร  ปัทมวรคุณ,  2544)  เป็นดังนี้





               
ตัวอย่าง  จากตาราง  P  ซึ่งมีการขึ้นต่อกัน  คือ
                                PNO  g  PNAME
                                PNO  g  COLOR
                                PNO  g  WEIGHT
                                PNO  g  CITY
                เราสามารถแสดงด้วยแผนภาพขึ้นต่อกันเป็นดังนี้






               
หรือแสดงด้วยแผนภาพการขึ้นต่อกันอย่างง่ายเป็นดังนี้






    1. สมบัติปิดของเซตของการขึ้นต่อกัน
สมบัติของเซตของการขึ้นต่อกัน  (Closure of a Set of  Dependencies)  คือ  เซตของการขึ้นต่อกันทั้งหมดที่ถูกบ่งชี้โดยเซต  S  ของการขึ้นต่อกัน  ซึ่งสมบัตินี้จะแทนด้วย  S+  (The set of all FDs  that  are implied by a given set S of  FDs  is called the closure of S,  written S+ )  กล่าวคือ  หากการขึ้นต่อกันข้อใดก็ตามเป็นผลมาจากการบ่งชี้หรือการระบุของการขึ้นต่อกันในเซต  S  แล้ว  เราถือว่าการขึ้นต่อกันทุกข้อดังกล่าวอยู่ในเซต  S+  ซึ่งก็คือ  สมบัติปิดของเซตของการขึ้นต่อกันนั่งเอง  ดังภาพ









ในภาพข้างบนแสดงให้เห็นว่า  เซต  S  มีการขึ้นต่อกันอยู่  2  นิพจน์คือ  FD1  และ  FD2  โดยที่  FD1  บ่งชี้ว่ามีการขึ้นต่อกันอย่าง  FD11  และ  FD2  บ่งชี้ว่ามีการขึ้นต่อกันอย่าง  FD21  และ  FD22  ดังนั้น  FD11,  FD21  และ  FD22  จะจัดอยู่ในเซต  S+  ซึ่งเป็นสมบัติของเซต  S                ตัวอย่างจากตารางที่ผ่านมา  เช่น  การขึ้นต่อกันที่กำหนดว่า
                {SNO,  PNO}  g  {CITY,  QTY}
                จะบ่งชี้ว่าทำให้มี  การขึ้นต่อกันอีกสองนิพจน์ซึ่งเป็นสมบัติปิดของมัน  ได้แก่
                {SNO,  PNO}  g  CITY
                {SNO,  PNO}  g  QTY

    1. กฎการอนุมาน
กฎการอนุมาน  (Inference  Rules)  เป็นกฎที่เกี่ยวเนื่องจากเรื่องสมบัติปิดของเซตการขึ้นต่อกันกฎนี้เรียกว่า  กฎของอาร์เรย์สตรอง  (Armstrong’s  Axioms)  ตามชื่อของ  W.  W'.  Armstrong  ผู้คิดขึ้นมาเมื่อปี  ค.ศ.  1974  ซึ่งเป็นกฎที่บ่งชี้การได้มาของสมบัติของเซตการขึ้นต่อกัน  (Derive  Closure  S+)  กฎดังกล่าวมีสาระหลักอยู่  3  ข้อแรก  ส่วนข้ออื่น ๆ  ประยุกต์ต่อจาก  3  ข้อแรก  ดังต่อไปนี้
  1. กฎการสะท้อน  (Reflexivity)  กล่าวว่า  ถ้า  B  เป็นสับเซตของ  A  แล้ว  A  g  B
  2. กฎเสริม  (Augmentation)  กล่าวว่า  ถ้า  A  g  B  แล้ว  AC  g  BC
  3. กฎถ่ายทอด  (Transitivity)  กล่าวว่า  ถ้า  A  g  B  และ  B  g  C  แล้ว  A  g  C  ซึ่งกล่าวอีกอย่างหนึ่งได้ว่า  A  g  C  ผ่านทาง  B
  4. กฎกำหนดตนเอง  (Self-determination)  กล่าวว่า  A  g  A
  5. กฎการแยกส่วน  (Decomposition)  กล่าวว่า  ถ้า  A  g  BC  แล้ว  A  g  B 
และ  A  g  C
  1.   กฎการรวม  (Union)  กล่าวว่า  ถ้า  A  g  B  และ   A  g  C  แล้ว  A  g  BC 
  2. กฎการประกอบ  (Composition)  กล่าวว่า  ถ้า  A  g  B  และ  C  g  D 
แล้ว  AC  g  BD
  1. ทฤษฎีบทเอกภาพทั่วไป  (General  Unification  Theorem)  ซึ่งพิสูจน์โดย  ดาร์เวน  (Darwen,  1992)  กล่าวว่า  ถ้า  A  g  B  และ  C  g  D  แล้ว  A U  (C - B)  g  BD
ตัวอย่าง  ให้  R  (A, B, C, D, E, F)  และมีการขึ้นต่อกัน  ดังนี้
                A  g  BC
                B  g  E
                CD  g  EF
จากแสดงว่า  การขึ้นต่อกัน  FD – AD  g  F  เป็นสมาชิกของสมบัติของเซตนี้
วิธีทำ
                1.  A  g  BC                       (กำหนดให้)
                2.  A  g  C                          (กฎการแยกส่วน)
                3.  AD  g  CD                   (กฎเสริม)
                4.  CD  g  EF                     (กำหนดให้)
                5.  AD  g  F                       (กฎการแยกส่วน)
    1. เซตของการขึ้นต่อกันซึ่งได้ลดรูปไม่ได้
เซตของการขึ้นต่อกันซึ่งลดรูปไม่ได้  (Inreducible  sets  of  dependencies)  คือ  เซตของการขึ้นต่อกันที่มีการตัดหรือลด  การขึ้นต่อกันที่ไม่จำเป็นหรือไม่สำคัญออกไป  กล่าวคือ  ถ้าให้  S1  และ  S2  เป็นเซตของการขึ้นต่อกัน  2  เซต
•  ถ้าการขึ้นต่อกันทุกนิพจน์ที่ถูกระบุโดย  S1  ได้มาจากการระบุโดย  S2  อีกทอดหนึ่ง  เช่น  ถ้า  S1+  เป็นสับเซตของ  S2+  แล้ว  เรากล่าวว่า  S2  เป็นตัวครอบคลุม  (Cover)  สำหรับ  S1  หรือเรียกสั้น ๆ  ว่า  S2 คลุม S1
•  ถ้า   S2  เป็นตัวครอบคลุมสำหรับ  S1  และ  S1  ก็เป็นตัวครอบคลุมสำหรับ  S2  ด้วยแล้วเราเรียกว่า  S1  และ  S2  เท่าเทียมกัน  (S1 and S2  are  equivalent.)  เช่น  S1+=S2+  เซตการขึ้นต่อกัน  S  จะเป็นเซตที่ลดรูปไม่ได้ก็ต่อเมื่อมีสมบัติ  3  ประการ  ดังนี้
1. ด้านขวาของการขึ้นต่อกันทุกตัวในเซต  S  เป็นแบบแอตทริบิวต์เดียว  คือ  เป็น  เซตเดี่ยว  (Singleton Set)
2. ด้านซ้ายมือของการขึ้นต่อกัน  ถ้าเป็นเซตของคีย์หลักหลายตัวจริงจะต้องไม่สามารถตัดเอาตัวใดตัวหนึ่งออกไปได้เพราะ  จะทำให้ไม่สมบูรณ์  (Left-irreducible)  เช่น
{SNO,  PNO,  X}  g  QTY
3. การขึ้นต่อกันใด ๆ  ในเซต  S  จะตัดหรือลดเอาตัวใดตัวหนึ่งออกไป  โดยความหมายไม่เปลี่ยนไม่ได้  กล่าวอีกนัยหนึ่ง  หากเซตใดเป็นเซตที่ลดรูปไม่ได้แล้วย่อมหมายความว่าจะตัดเอาการขึ้นต่อกันนิพจน์ใดนิพจน์หนึ่งออกไม่ได้  มิฉะนั้นความหมายจะขาดหายไม่ครบถ้วน
ตัวอย่าง 1  ถ้าตาราง P  มีการขึ้นต่อกันดังนี้  คือ
                PNO  g  PNAME
                PNO  g  COLOR
                PNO  g  WEIGHT
                PNO  g  CITY
วิธีคิด  เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปไม่ได้อีกแล้ว  เพราะทางด้านขวาเป็นแอตทริบิวต์เดี่ยวในแต่ละบรรทัด  ส่วนทางด้านซ้ายก็เป็นเช่นเดียวกันไม่สามารถตัดทอนได้อีก  นอกจากนั้นการขึ้นต่อกันแต่ละนิพจน์ดังกล่าวก็ไม่สามารถตัดขึ้นบรรทัดใดได้  เพราะจะทำให้ความหมายเปลี่ยนสมบัติปิด
ตัวอย่างที่ 2  ถ้าตาราง  P  มีการขึ้นต่อกันดังนี้  คือ
                PNO  g  {PNAME,  COLOR}
                PNO  g  WEIGHT
                PNO  g  CITY
วิธีคิด  เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก  เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรก  มีนิพจน์ด้านขวาไม่เป็น  Singleton Set
ตัวอย่างที่  3  ถ้าตาราง  P  มีการขึ้นต่อกันดังนี้
                {PNO,  PNAME}  g  COLOR
                PNO  g  PNAME
                PNO  g  WEIGHT
                PNO  g  CITY
วิธีคิด  เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก  เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรกมีนิพจน์ด้านซ้ายไม่เป็น  Singleton Set  และเราสามารถตัด  PNAME  ออกไปจากนิพจน์ด้านซ้ายนั้นได้โดยสมบัติปิดไม่เปลี่ยนแปลงไป
ตัวอย่างที่  4  ถ้าตาราง  P  มีการขึ้นต่อกันดังนี้  คือ
                PNO  g  PNO
                PNO  g  PNAME
                PNO  g  COLOR
                PNO  g  WEIGHT
                PNO  g  CITY
วิธีคิด  เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก  เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรกนั้นเราสามารถตัดทิ้งออกได้ทั้งบรรทัด  โดยสมบัติปิดไม่เปลี่ยนแปลงไป
การพยายามสร้างเซตของการขึ้นต่อกันซึ่งลดรูปไม่ได้ขึ้นมานั้นก็เพื่อจะได้นำไปสร้างข้อกำหนดหรือข้อบังคับ  (Constraint)  ที่มีจำนวนน้อยที่สุดเพื่อประหยัดเวลา  แรงงานโปรแกรมเมอร์  และพลังงานการทำงานของเครื่องคอมพิวเตอร์
    1. การแยกตารางโดยไม่สูญเสียความหมาย
การแยกตารางโดยไม่สูญเสียความหมายเดิม  (Nonloss  Decomposition)  คือ  การแยกตารางเดิมตารางหนึ่งออกไปเป็นหลายตารางโดยไม่สูญเสียคุณสมบัติที่มีอยู่ในตารางเดิม  เป็นวิธีการสำคัญอย่างหนึ่งในการทำให้ฐานข้อมูลอยู่ในรูปแบบปรกติหรือบรรทัดฐาน  (Normal  Form)  ซึ่งจะได้เรียนรู้รายละเอียดในหน่วยเรียนถัดไป  ก่อนอื่นควรทำความเข้าใจกับการแยกตารางเสียก่อน
                การแยกตาราง  (Decomposition)  เป็นการทำ  Projection  อย่างหนึ่ง  กล่าวคือ  เป็นการดึงคอลัมน์ของข้อมูลเฉพาะบางคอลัมน์ออกมาจากตารางที่มีอยู่เดิม  แล้วนำไปสร้างเป็นตารางใหม่ขึ้นมาหลายตารางตาความต้องการ  ตัวอย่างเช่น  ถ้าเดิมมีการออกแบบโดยกำหนดให้มีตาราง  SCP  พร้อมข้อมูล  ดังนี้
SNO
CITY
PNO
QTY
S1
London
P1
300
S1
London
P2
200
S1
London
P3
400
S1
London
P4
200
S1
London
P5
100
S1
London
P6
100
S2
Paris
P1
300
S2
Paris
P2
400
S3
Paris
P2
200
S4
London
P2
200
S4
London
P4
300
S4
London
P5
400

                SCP






         

      จะพบว่ามีการขึ้นต่อกันเฉพาะที่สำคัญดังต่อไปนี้
                                {SNO,  PNO}  g  QTY
                                SNO  g  CITY
                (ในที่นี้  เราตัด  {SNO,  PNO}  g  CITY  ทิ้งไปเพราะเป็นการขึ้นต่อกันที่ซ้ำซ้อนกับ  SNO  g  CITY  ทีมีอยู่แล้ว  ตามหลักการของ  การขึ้นต่อกันแบบด้านซ้ายลดรูปไม่ได้  หรือ  Left-irreducible FDs)
จะเห็นได้ว่าตารางนี้มีการเก็บข้อมูลแต่ละทูเพิล  (Tuple)  เป็นค่าเดียว  (Atomic)  อยู่แล้ว  กล่าวอีกนัยหนึ่งคือ  อยู่ในรูปแบบปรกติระดับที่ 1 (Pirst Normal Form)  แล้ว  แต่ยังมีความไม่เรียบร้อยอยู่บางอย่าง  คือ  ยังเป็นการกำหนดการแบ่งตารางที่ไม่ดีนักเพราะเก็บข้อมูลหลายเรื่องไว้ในตารางเดียวกัน  ซึ่งจะทำให้เกิดปัญหาการเก็บข้อมูลซ้ำซ้อน  (Redundancy)  และปัญหาความผิดปกติในการปรับปรุงข้อมูล  (Update Anomaly)  เมื่อทราบข้อบกพร่องดังนี้จึงจะต้องแก้ปัญหาโดยการแยกตาราง  SCP  นี้ย่อยออกเป็นสองตารางซึ่งมีทางเลือก  ดังนี้
                ทางเลือกที่ 1 จาก SCP (SNO,  CITY,  PNO,  QTY)  แยกเป็น
                                SC (SNO,  CITY) และ 
                                SP (SNO,  PNO, QTY)
               
ทางเลือกที่ 2 จาก SCP (SNO,  CITY,  PNO,  QTY)  แยกเป็น
                SPC (SNO,  PNO,  CITY)  และ
                SQ (SNO, QTY)
การจะเลือกทางใดนั้นต้องพิจารณาว่าหลังจากที่ทำการแยกตารางออกไปแล้ว  เราสามารถทำย้อนกลับ  คือ  เอาตารางใหม่ทั้งสองตารางมารวมกัน (JOIN)  เพื่อให้ได้ข้อมูลอย่างตารางเดิมได้หรือไม่   ถ้าไม่สามารถทำได้แสดงว่าเกิดการสูญเสียลักษณะการขึ้นต่อกันบางอย่างไป กาออกแบบฐานข้อมูลที่ดี   จึงต้องทำให้ตารางที่แยกออกมาใหม่นั้นสามารถรักษาคุณสมบัติการขึ้นต่อกันที่มีอยู่เดิมเอาไว้ให้ได้
กรณีเลือกทางที่ 1  จะได้ตารางพร้อมข้อมูล  ดังนี้

SNO
CITY
S1
London
S2
Paris
S3
Paris
S4
London

                                SC


SNO
PNO
QTY
S1
P1
300
S1
P2
200
S1
P3
400
S1
P4
200
S1
P5
100
S1
P6
100
S2
P1
300
S2
P2
400
S3
P2
200
S4
P2
200
S4
P4
300
S4
P5
400

SP     






จะพบว่าตาราง  SC  มีการขึ้นต่อกันที่สำคัญ  คือ
                SNO  g  CITY
และพบว่าตาราง  SP  มีการขึ้นต่อกันที่สำคัญ  คือ
                {SNO,  PNO}  g  QTY
กรณีเลือกทางที่ 2 จะได้ตารางสองตารางพร้อมข้อมูล  ดังนี้

SNO
PNO
CITY
S1
P1
London
S1
P2
London
S1
P3
London
S1
P4
London
S1
P5
London
S1
P6
London
S2
P1
Paris
S2
P2
Paris
S3
P2
Paris
S4
P2
London
S4
P4
London
S4
P5
London

SPC





SNO
QTY
S1
300
S1
200
S1
400
S1
200
S1
100
S1
100
S2
300
S2
400
S3
200
S4
200
S4
300
S4
400

SQ








จะพบว่าตาราง  SPC  มีการขึ้นต่อกันที่สำคัญ  คือ
                SNO  g  CITY
                {SNO,  PNO}  g  CITY
และพบว่าตาราง  SQ  มีการขึ้นต่อกันที่สำคัญ  คือ
                {SNO,  QTY}  g  QTY
สรุป  จะพบว่าทางเลือกที่ 1  ดีกว่าทางเลือกที่ 2  เพราะ
1.  สามารถรักษาสมบัติการขึ้นต่อกันซึ่งมีอยู่แต่เดิมเอาไว้ได้ทั้งหมด  คือทั้ง
{SNO,  PNO}  g  QTY  และ
{SNO}  g  CITY
2.  ไม่มีนิพจน์การขึ้นต่อกันที่เกินเข้ามาอย่างทางเลือกที่ 2  ซึ่งเป็นการทำให้ความหมายดังเดิมของฐานข้อมูลผิดเพี้ยนไป
3.ทางเลือกที่ 2  ทำให้ขาดคุณสมบัติการขึ้นต่อกันไปประการหนึ่ง  คือ
{SNO,  PNO}  g  QTY



อ้างอิง
http://itd.htc.ac.th/st_it50/it5012/P_1/DB/B5.htm
http://office.microsoft.com/th-th/access-help/HA001224247.aspx
http://kitikorn.site90.net/43201/design.htm
http://irrigation.rid.go.th/rid15/ppn/Knowledge/Database/database4.htm

ไม่มีความคิดเห็น:

แสดงความคิดเห็น