ที่ผมออกแบบฐานข้อมูลแบบนี้ เพราะ
ปกติแล้ว ผมมักจะออกแบบฐานข้อมูล ดังนี้
หากทำระบบสินค้า และระบบข่าวสาร มีอยู่ 3 ตาราง คือ
- Table Category เก็บข้อมูลหมวดหมู่สินค้า คือ รหัส, ชื่อ
- Table Product เก็บข้อมูลสินค้า คือ รหัส, ชื่อ, ราคา, รหัสหมวดหมู่
- Table News เก็บข้อมูลข่าวสาร คือ รหัส, ชื่อ, รายละเอียด
---------------------------------
Table Category---------------------------------
ID|Name---------------------------------
Table Product---------------------------------
ID|Name|Price|CategoryID---------------------------------
Table News---------------------------------
ID|Name|Detailวันนึง อาจจะมีบางเว็บไซต์ที่ต้องการรายละเอียดสินค้ามากกว่าเดิม เช่น
ต้องการเก็บ ส่วนลด และ รายละเอียดสินค้า เพิ่ม
ผมก็ต้องมาแก้ตาราง Table Product โดยเพิ่มดังนี้
---------------------------------
Table Product---------------------------------
ID|Name|Price|Discount|Detail|CategoryIDและเมื่อไปเจอเว็บไซต์อื่นๆ อาจจะไม่ต้องการส่วนลด แต่ต้องการรายละเอียดอื่น
ผมก็ต้องกลับมาแก้ตาราง Table Product อีก
ผมจึงลองออกแบบฐานข้อมูลใหม่ ซึ่งต้องการให้ยืดหยุ่น เพื่อรองรับสถานการณ์แบบนี้
โดยที่ เก็บชื่อฟิลด์ ลงตารางด้วยเลย จึงเป็นดังนี้
- Table Category เก็บข้อมูลหมวดหมู่สินค้า คือ รหัส, ชื่อ
- Table Content เก็บข้อมูลของระบบงาน คือ รหัส, ประเภทระบบงาน
- Table Product เก็บรายละเอียดของสินค้า คือ รหัส, ฟิลด์, ค่า, รหัสระบบงาน
- Table News เก็บรายละเอียดของข่าวสาร คือ รหัส, ฟิลด์, ค่า, รหัสระบบงาน
---------------------------------
Table Category---------------------------------
ID|Name---------------------------------
Table Content---------------------------------
ID|Type---------------------------------
Table Product---------------------------------
ID|Field|Value|ContentID---------------------------------
Table News---------------------------------
ID|Field|Value|ContentIDหากระบบสินค้าต้องการเก็บข้อมูล
รหัส, ชื่อ, ราคา, รหัสหมวดหมู่ ก็จะเป็นดังนี้
---------------------------------
Table Category---------------------------------
ID|Name---------------------------------
1|เครื่องใช้ในสำนักงาน
---------------------------------
Table Content---------------------------------
ID|Type---------------------------------
1|product
2|news
3|news
4|product
---------------------------------
Table Product---------------------------------
ID|Field|Value|ContentID---------------------------------
1|Name|ดินสอ|1
2|Price|10|1
3|Category|1|1
4|Name|ปากกา|4
5|Price|5|4
6|Category|1|4
และวันนึงหากต้องการเก็บ ส่วนลด และ รายละเอียดสินค้า เพิ่ม
ผมก็ไม่จำเป็นต้องมาแก้โครงสร้างของฐานข้อมูล
ผมเพียงเพิ่มข้อมูลฟิลด์ที่ต้องการเพิ่มลงในตาราง Table Product เช่น
---------------------------------
Table Product---------------------------------
ID|Field|Value|ContentID---------------------------------
1|Name|ดินสอ|1
2|Price|10|1
3|Discount|2|1
4|Detail|ดินสอไม้สำหรับวาดรูป|1
5|Category|1|1
6|Name|ปากกา|4
7|Price|15|4
8|Discount|5|4
9|Detail|ปากกาสีแดง|4
10|Category|1|4
งงกันมั้ยครับ
และตอนนี้ก็มาติดปัญหาตามที่ผมตั้งกระทู้ถาม
ผมควรกลับไปใช้วิธีออกแบบฐานข้อมูลแบบเดิม
หรือมีคำแนะนำอื่นมั้ยครับ
ขอบคุณทุกคนมากครับ