การออกแบบฐานข้อมูล (Database Design)
ฐานข้อมูลเป็นเรื่องสำคัญสำหรับระบบงานสารสนเทศที่ใช้คอมพิวเตอร์ประมวลผลในปัจจุบัน ในการออกแบบระบบสารสนเทศปัจจุบันก็มีการพัฒนาเทคโนโลยีกันอย่างมากมาย โดยจะมีระบบการออกแบบที่เป็นที่นิยมใช้กันมากในปัจจุบันเรียกว่า Relational Model
ฐานข้อมูลแบบสัมพันธ์(Relational Database) หนึ่งฐานข้อมูล สามารถบรรจุได้หลายตาราง จึงทำให้เกิดคำถามว่า ควรจะมีตารางเป็นจำนวนเท่าใด และมีฟิลด์อะไรบ้างที่อยู่ในแต่ละตาราง คำตอบที่จะได้เป็นพื้นฐานในการออกแบบฐานข้อมูล การออกแบบที่ดีจะทำให้ฐานข้อมูลง่ายต่อการใช้งาน และมีความยืดหยุ่น เช่นเดียวกับหลายๆ สิ่งในชีวิต ในการออกแบบฐานข้อมูลเป็นทั้งศาสตร์และศิลป์ หมายความว่า คุณสามารถออกแบบฐานข้อมูลได้ทั้งแบบอย่างไม่มีแบบแผน โดยใช้ประสบการณ์ หรือจะใช้การออกแบบอย่างมีแบบแผนก็แล้วแต่ แต่การขบคิดอย่างไม่มีแบบแผน(Informal) มักจะเป็นวิธีการอันดับแรกที่ใช้กัน
การออกแบบอย่างไม่เป็นแบบแผน (Informal Design Database)
รายละเอียดตามขั้นตอนต่อไปนี้ จะพูดถึงแต่ละขั้นตอน ซึ่งวิธีการนี้จะใช้ในการออกแบบฐานข้อมูลให้ใช้งานได้ และนักออกแบบฐานข้อมูลมักใช้ในการเริ่มการออกแบบในงานจริง แต่สำหรับการออกแบบอย่างมีหลักการนั้นจะใช้ไว้ตรวจสอบการออกแบบอย่างไม่มีแบบแผนมากกว่าที่จะใช้ในการเริ่มต้นการออกแบบ
1. กำหนดกลุ่มข้อมูลที่จะจัดเก็บหลักในโปรแกรมประยุกต์ขึ้นมา
ในทุกโปรแกรมประยุกต์จะเกี่ยวข้องกับ จำนวน Entities ที่เป็นหัวเรื่องที่เกี่ยวข้องกัน, คุณสมบัติและความสัมพันธ์ของ Entity เป็นพื้นฐานไปสู่โปรแกรมประยุกต์ เช่น
• งานระบบบันทึกเวลาในห้องเรียน มี อาจารย์, นักเรียน, ห้องเรียน, หลักสูตร, และ ภาคการเรียน
• งานระบบตั๋วเครื่องบิน มี ลูกค้า, กลุ่มสมาชิก, ไฟลท์, เครื่องบิน, ที่นั่ง, สนามบิน, ประตูทางเข้า
• กลุ่มกีฬา มี ผู้เล่น, ทีม, สถานที่แข่ง, ตารางการแข่งขัน, สถิติการแข่งขัน, ผู้ฝึกนักกีฬา, กรรมการผู้ตัดสิน
• ระบบการสั่งซื้อ มี ลูกค้า, ใบสั่งซื้อ, รายการการสั่งซื้อ, บิลของจำนวนการส่ง, จำนวนการส่งของแต่ละรายการ, ใบส่งของลูกค้า, รายการของใบส่งของลูกค้า, รายการในสต็อก, คลังสินค้า, ผู้จัดส่ง, ใบจัดซื้อ, รายการในใบจัดซื้อ, ใบรับสินค้า, รายการของใบรับสินค้า, ใบผู้จัดซื้อ, รายการของผู้จัดซื้อ
2. การสร้างตารางสำหรับแต่ละกลุ่มข้อมูลที่จะจัดเก็บ
ขั้นต่อไปเริ่มต้นสร้างตารางสำหรับ Entities หลัก ในโปรแกรมประยุกต์ของคุณ สามารถทำในกระดาษ ,ในแฟ้มอิเล็คทรอนิคใดก็ได้ หรือใน DBMS ได้แก่ Access หรือ SQL Server ในจุดนี้ก็ไม่สำคัญนัก แต่ควรกำหนดให้ในตารางแต่ละตารางมีชื่อสั้นๆ ง่ายต่อการจำและการเรียก ตัวอย่าง เช่น ถ้าสร้างตารางกำหนดและบรรยาย ตารางข้อมูลสินค้า ที่ไว้ขาย อาจจะให้ชื่อว่า Products
3. เลือกคีย์ที่ใช้เป็นคีย์หลัก
สำหรับแต่ละตารางของที่ได้ถูกสร้างขึ้นมา ให้กำหนดฟิลด์ฟิลด์หนึ่ง หรือมากกว่า ในการบ่งบอกเป็นเอกลักษณ์ของแต่ละ Record ในตาราง เรียกฟิลด์ดังกล่าวของตารางนั้น ว่า คีย์หลัก หรือ Primary key โดยกำหนดว่าฟิลด์ที่เป็น Primary key นั้นไม่สามารถว่างได้ และข้อมูลที่อยู่ในฟิลด์ที่เป็น Primary key ของทุก ๆ Record จะต้องไม่ซ้ำกัน หากมีการร้องขอข้อมูลโดยระบุค่าของ Primary key ไปจะต้องได้ข้อมูลที่มี Primary Key นั้นเพียง 1 Record เท่านั้นจะเกิน 1 Record ไม่ได้.
4. การเพิ่มหัวข้อของข้อมูลให้กับตารางหลักแต่ละตาราง
มาเริ่มต้นขั้นตอนนี้กัน ด้วยแนวคิดเกี่ยวกับข้อมูลของโปรแกรมประยุกต์ที่ต้องการรู้ข้อมูลใน entity หลักแต่ละตัว ที่ได้กำหนดไว้(หมายถึงในแต่ละตาราง) ตาราง customers อาจจะมีฟิลด์ customer number, name, street address, city, state, country, postal code, e-mail address, phone number, fax number เป็นต้น
5. การสร้างตารางเพิ่มเติมสำหรับ attribute ที่ซ้ำ ๆ กัน
ขณะที่เพิ่ม attributes ของ entity อาจจะพบว่า ในแต่ละ primary key อาจมี attribute ได้มากกกว่าหนึ่ง ตัวอย่างเช่น อาจจะพบว่า ห้องเรียนหนึ่งห้องอาจจะมีผู้สอนได้หลายคน ในระบบงานโฆษณา 1 งาน มีเอเจนซี่ได้หลายคน
การแก้ปัญหาอย่างหนึ่ง แม้จะไม่สมบูรณ์นัก คือการกำหนดฟิลด์ในตาราง members ขึ้นมาใหม่ ได้แก่ committee1, committee2, committee3 อย่างไรก็ตาม การแก้ปัญหาดังกล่าว มีปัญหาเกิดขึ้นได้ 3 ประการ
1. ฟิลด์ committee ที่สร้างขึ้นนั้นอาจว่างได้ ในบาง record ของตาราง members ฟิลด์ที่ว่าง ชี้ให้เห็นว่า จัดการบางสิ่งได้ไม่ถูกต้อง
2. การที่มีฟิลด์ committee หลายฟิลด์ใน record เดียวกันนั้นทำให้ยากต่อการ select, project และ join ด้วยฟิลด์ committee คุณควรจะใช้ฟิลด์ไหน ในฟิลด์ committee 3 ฟิลด์นี้ และจะถูกเก็บในลักษณะใด
3. ถ้า member บาง record มีกรรมการ 4 คนจะทำอย่างไร กับ committee ที่4 ล่ะ (ฐานข้อมูลจะไม่เหมาะแล้วเพราะกำหนดตอนแรกไว้ 3 ฟิลด์)
การแก้ปัญหาที่ดีกว่า คือ การสร้างตาราง committee membership ซึ่งบรรจุด้วย record หนึ่ง สำหรับแต่ละสมาชิก อีกฟิลด์หนึ่งสำหรับแต่ละ committee ดังนั้นตารางที่ได้อาจจะมี primary key ได้ 2 ฟิลด์ คือ committee และ memberid การออกแบบเช่นนี้เป็นการยืดหยุ่น เพราะว่าสนับสนุนแนวคิดที่ว่า สมาชิก 1 คน มีกรรมการได้ตั้งแต่ 0 คนจนถึง หลายคน และ กรรมการ 0 คนถึงหลายคนมีสมาชิกได้หลายคน หากมีข้อมูลที่เกี่ยวข้องกับสมาชิกกับกรรมการโดยเฉพาะ เช่นวันที่เข้าร่วม ก็จะสามารถจัดการข้อมูลได้ง่าย
6. ต้องแน่ใจว่าแต่ละฟิลด์นั้นได้กำหนดคีย์หลักเหมาะสมแล้ว
การออกแบบในขั้นตอนนี้ ควรจะทบทวนแต่ละฟิลด์ในแต่ละตาราง และตรวจสอบฟิลด์ที่เป็น Primary key ของตารางนั้นเหมาะที่จะเป็น primary key หรือไม่
7. พิจารณาความสัมพันธ์ระหว่างตาราง
ในขั้นตอนสุดท้ายนี้ ทบทวนตารางทั้งหมดในฐานข้อมูลที่คุณสร้าง ระบบความสัมพันธ์ระหว่างตารางซึ่งคุณคิดไว้แล้วว่าจะมันมีความสัมพันธ์กันอย่างไร หัวใจสำคัญ สำหรับขั้นตอนนี้คือ ตรวจสอบฟิลด์ของตารางที่คุณจะใช้ในการเชื่อมกัน ว่าจะเป็นฟิลด์ใดซึ่งโดยปกติแล้วคุณสามารถใช้ คีย์นั้นในการเชื่อมกันได้เลย
การออกแบบข้อมูลอย่างเป็นแบบแผน
สำหรับขั้นตอนของการออกแบบฐานข้อมูลแบบเป็นทางการให้กับฐานข้อมูลเชิงสัมพันธ์ซึ่งกระบวนการจัดการกับฟิลด์ให้กับตารางนั้นจะเรียกว่า นอร์มัลไลเซชั่น (Normalization) โดยจะมีขั้นตอนด้วยกัน 5 ขั้นดังต่อไปนี้
ระดับที่ 1 (First Normal Form)
หนึ่งฟิลด์ในหนึ่งเรคคอร์ดสามารถบรรจุค่าได้ 1 ค่าเท่านั้น สิ่งนี้จะป้องกันกลุ่มข้อมูลซ้ำในหนึ่งเรคคอร์ด
ระดับที่ 2 (Second Normal Form)
ทุกๆ attribute ที่ไม่ใช่คีย์ ต้องขึ้นกับฟิลด์ทั้งหมดในคีย์หลัก ซึ่งยังระบุให้สองตารางหรือมากกว่าไม่สามารถใช้คีย์หลักที่เหมือนกันได้ ซึ่งหากเป็นเช่นนั้นคุณควรรวมเข้ามาเป็นตารางเดียวกัน
ระดับที่ 3 (Third Normal Form)
ฟิลด์ที่ไม่ใช่คีย์จะต้องไม่ขึ้นกับฟิลด์ที่ไม่ใช่คีย์อื่นในตารางเดียวกัน
ระดับที่ 4 (Forth Normal Form)
ห้ามไม่ให้มีความสัมพันธ์แบบหนึ่งต่อกลุ่ม (One-to-Many) ที่ไม่ขึ้นต่อกันระหว่างฟิลด์คีย์หลักและฟิลด์ที่ไม่ใช่คีย์
ระดับที่ 5 (Fifth Normal Form)
รูปแบบนี้ค่อนข้างยุ่งยากและมักจะถูกละเลย โดยจำเป็นต้องมีการแบ่งตารางออกเป็นชิ้นส่วนขนาดเล็กเพื่อขจัดความซ้ำซ้อนทั้งหมด
การนอร์มัลไลเซชั่น (Normalization) เป็นเสมือนหลักการตรวจสอบมากกว่าวิธีปฏิบัติ เมื่อคุณทำการนอร์มัลไลซ์แล้วตารางตั้งต้นก็อาจจะถูกแตกออกมาเป็นตารางย่อยจำนวนมากก็ได้ ซึ่งจะมีประโยชน์ดังนี้
• ไม่มีความซ้ำซ้อน
• ดูแลรักษาง่าย
• สามารถเขียนโค้ดควบคุมได้ง่าย
• ขนาดฐานข้อมูลเล็กลงเนื่องจากไม่ต้องเก็บข้อมูลซ้ำๆ กัน
ตัวอย่างเช่น
วิธีสมัครสมาชิก Sanook
เข้าไปที่ http://www.sanook.com และคลิกที่ปุ่ม [สมัครใช้งาน] กรอกข้อมูลส่วนตัวให้ครบ และระบุชื่ออีเมล์ที่ต้องการ
คลิกลิงค์ยืนยันการเป็นสมาชิก
อ้างอิง
www.sanook.com
____________________________________________________________________________________________________
แก้ไขตัวอย่าง การสั่งอาหารออนไลน์
แก้ไขตัวอย่าง การสั่งอาหารออนไลน์
ไม่มีความคิดเห็น:
แสดงความคิดเห็น