การจัดการปัญหาการแสดงข้อมูลย้อนหลัง แล้วไม่ตรงกับเอกสารที่พิมพ์เก็บไว้
สำหรับปัญหาที่พบคือ การเก็บชื่อหัวเรื่องของข้อมูลหลักต่างๆ ไว้ในฐานข้อมูลแต่ละตารางนั้น จะทำให้ฐานข้อมูลมีขนาดใหญ่ แต่การออกแบบฐานข้อมูลโดยเก็บเฉพาะไอดีหรือรหัสของหัวข้อนั้นๆเอาไว้ในตารางสำหรับใช้อ้างอิงนั้น ส่งผลให้เมื่อมีเกิดการแก้ไขชื่อหัวข้อต่างๆ เวลาที่เราเรียกดูข้อมูลย้อนหลัง จะเกิดการการแสดงชื่อที่เปลี่ยนแปลงไปด้วย
id
|
title
|
create_date
|
last_update
|
1
|
การจัดการความรู้
|
2013-01-14
|
NULL
|
2
|
การส่งเสริมคุณภาพผลิตภัณฑ์
|
2013-07-25
|
NULL
|
3
|
การพัฒนาทักษะทางวิชาการ
|
2013-12-09
|
NULL
|
tb_category : ตารางข้อมูลหลัก เก็บข้อมูลหมวดหมู่กิจกรรม
ตัวอย่างการอ้างอิงข้อมูลจากตารางหมวดหมู่ไปใช้ในแบบฟอร์มบันทึกข้อมูลกิจกรรมต่างๆ โดยการบันทึกข้อมูลของกิจกรรมนี้เกิดขึ้นวันที่ 2013-01-20 เป็นการสร้างกิจกรรมล่วงหน้า
ตัวอย่างข้อมูลที่บันทึกลงในตารางรายการกิจกรรม ซึ่งจะอ้างอิงรหัสหมวดหมู่แทนการบันทึกชื่อเต็ม
id
|
title
|
cate_id
|
start_date
|
stop_date
|
….
|
22
|
จัดโครงการอบรมให้ความรู้เกี่ยวกับการจัดหลักสูตร
|
1
|
2013-01-24
|
2013-01-27
| |
tb_event : ตารางรายการกิจกรรมที่จัด
หลังจากนั้นผ่านไปอีกปี วันที่ 2014-05-06 มีการแก้ไขชื่อของหมวดหมู่ให้สอดคล้องกับการดำเนินงาน โดยเปลี่ยนจากชื่อ “การจัดการความรู้” เป็น “การจัดการและพัฒนาการสอน” สังเกตที่ฟิลด์ last_update จะมีวันที่ทำการเปลี่ยนแปลงข้อมูลใหม่
id
|
title
|
create_date
|
last_update
|
1
|
การจัดการและพัฒนาการสอน
|
2013-01-14
|
2014-05-06
|
2
|
การส่งเสริมคุณภาพผลิตภัณฑ์
|
2013-07-25
|
NULL
|
3
|
การพัฒนาทักษะทางวิชาการ
|
2013-12-09
|
NULL
|
tb_category : ตารางข้อมูลกิจกรรมหลัก
ดังนั้นทุกรายการที่มีการอ้างอิงรหัสของกิจกรรมนี้ไปใช้ จะทำให้เวลาเรียกดูเอกสารย้อนหลัง จะได้ชื่อหมวดหมู่ที่ไม่ตรงกับข้อมูลเดิมที่เคยบันทึกเอาไว้
กล่าวคือเรียกข้อมูลย้อนหลังวันที่ 2013-01-20 ข้อมูลหมวดหมู่ที่แสดงกลายเป็นชื่อ “การจัดการและพัฒนาการสอน” แต่ในเอกสารที่เคยพิมพ์ไปแล้วนั้นเป็น “การจัดการความรู้” ดังนั้นจะทำให้เกิดความสับสนขึ้นได้ และไม่สามารถค้นหารายการตามชื่อหมวดหมู่ในเอกสารที่เป็นชื่อเดิม
สำหรับวิธีแก้ไขปัญหาดังกล่าว ผู้เขียนใช้วิธีเก็บทั้งรหัสหมวดหมู่ และหัวเรื่อง โดยที่แยกหัวเรื่องที่เป็นข้อความไว้ในตารางแยกต่างหากโดยตั้งชื่อตารางให้สัมพันธ์กันเช่น tb_event_data เพื่อเก็บข้อมูลหลัก และไม่ให้ตาราง tb_event มีขนาดใหญ่เกินไป
เมื่อต้องการนำข้อมูลมาแสดงก็ทำการ JOIN ข้อมูลของทั้งสองตารางเข้าด้วยกัน เพื่อนำข้อมูลที่บันทึกไว้มาแสดง แม้ว่ารหัสหมวดหมู่เดียวกันในปัจจุบันจะเปลี่ยนชื่อใหม่เพื่อให้สอดคล้องกับการดำเนินงานไปแล้ว แต่ข้อมูลย้อนหลังก็ยังสามารถแสดงได้ถูกต้องตามที่เคยพิมพ์เก็บไว้เช่นเดิม
ตัวอย่างการบันทึกตารางเก็บชื่อเรื่องของข้อมูลหลัก เพื่ออ้างอิงกับตารางรายการ
id
|
event_id
|
cate_title
|
….
|
….
|
1
|
22
|
การจัดการความรู้
| ||
tb_event_data : ตารางรายการกิจกรรมที่จัด
จากข้อมูลในตาราง tb_event_data เราจะนำข้อมูลจากฟิลด์ cate_title ไปแสดงในแบบ แทนการดึงข้อมูลจากตารางหมวดหมู่โดยตรง เพราะข้อมูลหลักอาจจะเกิดการเปลี่ยนแปลงไปแล้ว
ข้อเสีย การเก็บข้อมูลด้วยวิธีนี้จะมีข้อเสียคือ ทำให้ฐานข้อมูลมีขนาดใหญ่ขึ้น แต่ก็ถือว่าคุ้มเมื่อระบบของเราสามารถเรียกรายงานย้อนหลังได้อย่างถูกต้อง
ข้อดี ลดการ JOIN ข้อมูลกับตารางข้อมูลหลักอื่นๆในการเรียกข้อมูลมาแสดง เพราะการเก็บแต่รหัสอ้างอิงนั้น การจะนำชื่อเรื่องเต็มๆมาแสดงในแบบฟอร์มได้นั้น จะต้อง JOIN หรือคิวรี่เรียกข้อมูลหลายครั้งตามจำนวนตารางข้อมูลหลักที่อ้างอิงมาทั้งหมด
การค้นหาข้อมูลก็ไม่ต้อง JOIN กับตารางข้อมูลหลักทุกตาราง เพราะสามารถค้นหาคำในตาราง tb_event_data หรือตารางเก็บข้อมูลของตารางนั้นๆได้เลย
ความคิดเห็น
แสดงความคิดเห็น