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