วันจันทร์ที่ 18 สิงหาคม พ.ศ. 2557

ออกแบบฐานข้อมูลในเบื้องต้น


การออกแบบฐานข้อมูล  เป็นสิ่งที่ต้องทำเป็นลำดับแรกก่อนสร้างฐานข้อมูล  ซึ่งไม่ต่างจากการทำงานทุกอย่างที่ต้องมีการวางแผนล่วงหน้า  การออกแบบฐานข้อมูลถือว่าเป็นงานที่ท้าทายพอสมควร  ไม่ง่ายแต่ก็ไม้อยากจนเกินไปนักเพียงแต่ผู้ออกแบบจะต้องเข้าใจวัตถุประสงค์ของฐานข้อมูลให้ถ่องแท้  พิจารณาตามหลักของการออกแบบฐานข้อมูลทราบถึงวิธี  Normalization  และฝึกฝนให้ชำนาญเท่านั้นเอง
ขั้นตอนการออกแบบข้อมูล
การออกแบบฐานข้อมูล  เป็นวิธีการออกแบบเพื่อให้ได้ฐานข้อมูลที่ถูกต้อง  ใช้งานง่าย  ยิดหยุ่นสามารถแก้ไขหรือปรับปรุงข้อมูลได้ง่าย  ซึ่งวิธีคิดหรือวิธีออกแบบฐานข้อมูลอาจแตกต่างกันออกไปบ้าง  แต่โดยพื้นฐานการออกแบบฐานข้อมูลทั่วๆ  ไปสามารถแบ่งออกเป็น  6  ขั้นตอนดังนี้ 
Step  1:กำหนดวัตถุประสงค์ในการออกแบบข้อมูล 
Step  2:กำหนดตารางที่ใช้เก็บข้อมูล
Step  3:กำหนดว่าในแต่ละตารางต้องมีฟิลด์อะไรบ้าง 
Step  4:กำหนดคีย์หลัก 
Step  5:ทำ  Normalization
 Step  6:กำหนดความสัมพันธ์ระหว่างตาราง 
ตัวอย่างฐานข้อมูลสำหรับร้านขายสินค้า
ในที่นี้ขอยกตัวอย่างการสร้างฐานข้อมูลสำหรับขายสินค้า  ขั้นตอนแรกให้มองภาพรวมของข้อมูลที่เราสนใจทั้งหมดให้ออกว่าประกอบไปด้วยอะไรบ้าง  และมีกระบวนการทำงานอะไรที่เกี่ยวข้องบ้าง  เช่น  ฐานข้อมูลสำหรับร้านค้า  ก็ต้องมีการซื้อสินค้า  ซึ่งจะประกอบด้วยข้อมูลเกี่ยวกับคนซื้อ  ข้อมูลเกี่ยวกับสินค้า  มีกระบวนการซื้อการคิดเงิน  ทอนเงิน  เป็นต้น  เมื่อเราทราบภาพรวมจนเข้าใจดีแล้ว  ก็ให้เมออกแบบฐานข้อมูล  จากตัวอย่างให้พิจารณาว่าเมื่อมีลูกค้ามาซื้อสินค้า  ผู้ขายต้องสามารถเลือกรายการสินค้าจากเครื่องคอมพิวเตอร์  มีการแสดงรายละเอียดของสินค้า  มีการคำนวณยอดเงินอัตโนมัติ  คำนวณเงินทอน  มีการตัดสต็อกสินค้า  พิมพ์ใบเสร็จรับเงิน  และสามารถสรุปยอดขายในแต่ละวัน  หรือในแต่ละสัปดาห์ได้                                                                                                                                                
ตารางที่ใช้เก็บข้อมูล
เมื่อเราทราบภาพรวมของระบบฐานข้อมูลเรียบร้อย  ต่อไปให้พิจารณาว่าเราจะเก็บข้อมูลอะไรบ้าง  ซึ่งก็คือ  การสร้างตารางเพื่อรองรับข้อมูลทั้งหมด

ลูกค้า
ตารางลูกค้า

การขาย
ตารางซื้อสินค้า
ตารางรายละเอียดการซื้อ

สินค้า
ตารางสินค้า
ตารางรายชื่อผู้จัดจำหน่าย

ในการออกแบบตาราง  จะพิจารณาจากความเกี่ยวข้องในระบบฐานข้อมูล  สำหรับตัวอย่างนี้คือ  การขายสินค้าในร้านซึ่งเริ่มจากลูกค้า  หยิบสินค้า  คิดเงิน  นั่นหมายความว่าเราต้องมีตารางเก็บข้อมูลลูกค้า  เก็บข้อมูลสินค้า  เก็บข้อมูลเกี่ยวกับการซื้อสินค้าแต่ละครั้ง  นอกจากนั้นแล้วในร้านขายสินค้าที่มีระบบสมาชิก  เราจะต้องเลือกว่าเป็นลูกค้าทั่วไปหรือเป็นสมาชิก
จากข้อมูลดังกล่าวเราน่าจะสร้างตารางได้  5  ตารางคือ  ตารางลูกค้า  ตารางสินค้า  ตารางรายชื่อผู้จัดจำหน่าย  ตารางซื้อสินค้า  และตารางรายละเอียดการซื้อ  
กำหนดฟิลด์ในตาราง
 เมื่อได้ตารางมา  5  ตารางแล้ว  ให้พิจารณาว่าแต่ละตารางควรมีข้อมูลใดเก็บไว้บ้างดังนี้
ตารางลูกค้า  เก็บข้อมูลเกี่ยวกับลูกค้าทั้งหมด  เช่น  ชื่อ  นามสกุล  เบอร์โทรศัพท์  สมาชิก  ฯลฯ  โดยหากเป็นสมาชิกได้รับส่วนลดพิเศษ  เป็นต้น  ซึ่งตัวอย่างในที่นี้  หากเป็นสมาชิกของทางร้านก็จะได้ส่วนลด  10%  แต่ถ้าไม่เป็นสมาชิกก็จะไม่ลด
รหัสลูกค้า
ชื่อ
นามสกุล
ที่อยู่
เบอร์โทรศัพท์
อีเมล
สถานะสมาชิก
ส่วนลดสมาชิก









ตารางสินค้า  เก็บข้อมูลเกี่ยวกับสินค้า  เช่น  รหัสสินค้า  ชื่อสินค้า  ราคา  จำนวนสินค้าคงคลัง  (สต็อกสินค้า)  ฯลฯ  รวมถึงส่วนลดของสินค้าแต่ละตัว  โดยส่วนใหญ่แล้วสินค้าแต่ละรุ่นจะมีส่วนลดไม่เท่ากัน  เช่น  โทรศัพท์มือถือเก่าที่ล้าสมัย  มักจะต้องจูงใจด้วยการให้ส่วนลดที่มากกว่าสินค้าใหม่  เป็นต้น
รหัสสินค้า
ชื่อสินค้า
ราคา
ส่วนลด
สต็อกสินค้า
รายชื่อผู้จัดจำหน่าย







ตารางซื้อสินค้า  เก็บข้อมูลเกี่ยวกับการซื้อของแต่ละครั้ง  เช่น  เลขที่ใบเสร็จในการซื้อสินค้าแต่ละครั้ง  ใครคือผู้ซื้อสินค้า  และซื้อสินค้าเมื่อใด
รหัสการซื้อ
รหัสลูกค้า
วันที่ซื้อสินค้า




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






ตารางรายชื่อผู้จัดจำหน่าย  เก็บข้อมูลของผู้จัดจำหน่ายว่าสินค้านี้เรารับมาจากใคร  มีที่อยู่  เบอร์โทรติดต่อ  และในกรณีที่ติดต่อผ่านบริษัทอาจต้องเพิ่มบุคคลที่เราติดต่อด้วย  หรือข้อมูลอื่นๆ  ลงไปตามความเหมาะสม
รหัสผู้จัดจำหน่าย
ชื่อผู้จัดจำหน่าย
ที่อยู่
เบอร์โทรศัพท์
บุคคลที่ติดต่อ






สำหรับรายละเอียดในการสร้างตารางแต่ละตาราง  จะกล่าวโดยละเอียดอีกครั้งในบทต่อไป

การกำหนดคีย์หลัก  (Primary  Key)
ในแต่ละตารางจะต้องมีฟิลด์เก็บข้อมูลที่ไม่ซ้ำกันเลย  ตัวอย่างเช่น  ตารางลูกค้ามี  5  ฟิลด์เมื่อพิจารณาฟิลด์แรกคือ  รหัสลูกค้าไม่ซ้ำกันแน่นอน  ส่วนฟิลด์ที่สองคือ  ชื่อลูกค้าอาจซ้ำกันได้เพราะชื่อลูกค้าอาจเหมือนกัน  สำหรับฟิลด์นามสกุลลูกค้า  ก็สามารถซ้ำกันได้เพราะลูกค้าอาจเป็นพี่น้องกันที่อยู่ซ้ำกันได้เพราะลูกค้าอยู่บ้านเดียวกัน  ส่วนเบอร์โทรศัพท์ก็ซ้ำกันได้เช่นกัน
รหัสลูกค้า
ชื่อ
นามสกุล
ที่อยู่
เบอร์โทรศัพท์
อีเมล์
สถานะสมาชิก
ส่วนลดสมาชิก








จากตารางข้างต้นฟิลด์ที่ใช้เป็นฟิลด์หลักคือ  ฟิลด์  รหัสลูกค้า  เพราะเป็นฟิลด์ที่เก็บข้อมูลแบบไม่ซ้ำกันนั่นเอง  เราเรียกฟิลด์ที่ใช้เป็นฟิลด์หลักนี้ว่า  Primary  Key  (คีย์หลัก)  ซึ่งตารางทุกๆ  ตารางจะต้องมีคีย์หลักเพื่อใช้สำหรับอ้างอิงข้อมูลในส่วนอื่นๆ  ถ้าไม่มีคีย์หลัก  Access  ก็ไม่สามารถอ้างอิงข้อมูลในตารางได้
การทำ  Normalization  นอร์มอลไลเซชัน  (Normalization)  เป็นกระบวนการพิจารณาปรับเปลี่ยนตาราง  เพื่อให้มีความถูกต้อง  และลดความซ้ำซ้อนกันของข้อมูล  หลีกเลี่ยงปัญหาที่อาจเกิดขึ้นมาในภายหลัง  ในการออกแบบฐานข้อมูลการ  Normalization  ถูกแบ่งออกเป็น  5  ระดับ  โดยเริ่มจาก  1NF , 2NF , 3NF , 4NF , และ  5NFโดยในแต่ละละดับจะมีข้อกำหนดในการเปลี่ยนตาราง  เพื่อให้ได้ตารางที่ความถูกต้องมากที่สุด  การ  Normalization  ระดับที่  1  (1NF  อ่านว่า  First  Normal  Form)  มีข้อกำหนดว่า  ทุกๆเซลล์ในตารางจะต้องเก็บค่าเพียงค่าเดียวเท่านั้น  เพื่อให้เข้าใจพื้นฐานการ  Normalization  ผู้เขียนขอยกตัวอย่างการ  1NF  โดยเริ่มจากตารางการสั่งซื้อที่ออกแบบมาดังนี้
รหัสการซื้อ
รหัสลูกค้า
วันที่ซื้อสินค้า
รหัสสินค้า
ราคาขาย
จำนวนสินค้า
001
สมชาย  001
12  ..  54
B001
135  บาท
ชิ้น



T001
135  บาท
1  ชิ้น
002
มานี  002
14  ..  54
M001
535  บาท
1  ชิ้น
003
มานะ  003
15  ..  54
B001
135  บาท
1  ชิ้น
จากตัวอย่างตารางการสั่งซื้อ  จะมีข้อมูลในฟิลด์  รหัสสินค้า  และ  วันที่ซื้อสินค้า  ที่เก็บข้อมูลมากกว่าหนึ่งเซลล์  ซึ่งไม่เป็นไปตามกฎเกณฑ์ของ  Normalization  ระดับที่  (NF)  ดังนั้น  เราจึงต้องปรับตารางเสียใหม่ดังนี้
รหัสใบสั่งซื้อ
รหัสลูกค้า
วันที่ซื้อสินค้า
รหัสสินค้า
ราคาขาย
จำนวนสินค้า
001
สมชาย  001
12  .. 54
B001
135  บาท
ชิ้น
001
สมชาย  001
12  ..  54
T001
135  บาท
ชิ้น
002
มานี  002
14  ..  54
M001
535  บาท
ชิ้น
003
มานะ  003
15  ..  54
B001
135  บาท
ชิ้น
การ   Normalization  ระดับที่  (2NF)  มีข้อกำหนดว่าจะต้องผ่าน  1NF  มาแล้ว  และฟิลด์อื่นๆ  ที่ไม่ใช่คีย์หลัก  (Primary  Key)  จะต้องขึ้นกับคีย์หลักเพียงอย่างเดียวเท่านั้น  และในกรณีที่มีตารางคีย์ร่วม  (Composition  Key)  ฟิลด์อื่นๆ  ก็ต้องขึ้นอยู่กับคีย์ร่วมเหล่านั้นอย่างแท้จริงไม่ใช่บางส่วนของคีย์  ดังนั้น  จากตัวอย่างตารางการสั่งซื้อที่ผ่านมา  เมื่อได้ทำ  Normalization  ระดับที่  (2NF)  เรียบร้อย  ตารางการสั่งซื้อก็จะถูกแบ่งออกเป็น  2  ตาราง  ได้แก่  ตารางการสั่งซื้อ  และตารางรายละเอียดการสั่งซื้อดังนี้
ตารางการสั่งซื้อ
รหัสการซื้อ
รหัสลูกค้า
วันที่ซื้อสินค้า
001
สมชาย001
12  ..  54
002
มานี002
14  ..  54
003
มานะ003
15  ..  54
ตารางรายละเอียดการสั่งซื้อ
รหัสการซื้อ
รหัสสินค้า
ราคาขาย
จำนวนสินค้า
001
B001
135  บาท
ชิ้น
001
T001
135  บาท
ชิ้น
002
M001
535  บาท
ชิ้น
003
B001
135  บาท
1  ชิ้น
NOTE  คีย์ร่วม  หรือ  Composition  Key  คือ  การนำฟิลด์ตั้งแต่  2  ฟิลด์มาทำเป็นคีย์  ให้ลองดูตารางรายละเอียดการสั่งซื้อ  ก็จะพบว่าไม่สามารถเลือกฟิลด์ใดๆ  มาทำเป็นคีย์ได้เลย  เพราะทุกๆ  ฟิลด์จะมีข้อมูลซ้ำ  แต่เมื่อจับฟิลด์  รหัสใบสั่งซื้อ  กับฟิลด์  รหัสสินค้า  มาทำเป็นคีย์ร่วม  ข้อมูลก็จะไม่ซ้ำเลยนำมาใช้เป็นคีย์ได้ทันที
การ  Normalization  ระดับที่  3  (3NF)  มีข้อกำหนดว่าจะต้องผ่าน  2NF  มาแล้วและฟิลด์อื่นๆ  ที่ไม่ใช่คีย์หลัก  (Primary  Key)  จะไม่ขึ้นต่อกันเอง  ในที่นี้ข้อยกตัวอย่างตารางสินค้า  ซึ่งมีการเก็บรหัสสินค้า  ชื่อสินค้า  ราคา  รหัสประเภทสินค้า  และชื่อประเภทสินค้า  ตารางสินค้า
รหัสสินค้า
ชื่อสินค้า
ราคาตามป้าย
รหัสประเภทสินค้า
ประเภทสินค้า
B001
ซีดีพี่เบิร์ด
140  บาท
FC001
ซีดี
T001
ซีดีพี่แท่ง
140  บาท
FC001
ซีดี
M001
ดีวีดีทายาหรือยัง
600  บาท
FC002
ดีวีดี
จากตารางข้างต้นจะเห็นได้ว่า  ฟิลด์ประเภทสินค้าขึ้นอยู่กับฟิลด์  รหัสประเภทสินค้า  ซึ่งไม่ใช่คีย์หลัก  ดังนั้น  เราจึงต้องแยกตารางออกมาเป็น  ตารางคือ  ตารางสินค้าและตารางประเภทสินค้าก็จะได้ผลลัพธ์ดังนี้
ตารางสินค้า
รหัสสินค้า
ชื่อสินค้า
ราคาตามป้าย
รหัสประเภทสินค้า
B001
ซีดีพี่เบิร์ด
140  บาท
FC001
T001
ซีดีพี่แท่ง
140  บาท
FC001
M001
ดีวีดีทายาหรือยัง
600  บาท
FC002
ตารางประเภทสินค้า
รหัสประเภทสินค้า
ชื่อประเภทสินค้า
FC001
ซีดี
FC002
ดีวีดี

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

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