ข้ามไปที่เนื้อหาหลัก

การจัดการปัญหาการแสดงข้อมูลย้อนหลัง แล้วไม่ตรงกับเอกสารที่พิมพ์เก็บไว้




การจัดการปัญหาการแสดงข้อมูลย้อนหลัง แล้วไม่ตรงกับเอกสารที่พิมพ์เก็บไว้


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




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 หรือตารางเก็บข้อมูลของตารางนั้นๆได้เลย

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

การดึงข้อมูล MySQL มาแสดงในปฏิทิน Fullcalendar ด้วย PHP

หลักการทำงาน เรียกข้อมูลจากตาราง tb_event ด้วยฟังก์ชั่นของ MySQLi ข้อมูลจากฐานข้อมูลจะถูกวนลูปเก็บไว้ใน $data และจะถูกส่งไปที่ Fullcalendar ด้วยการแปลงข้อมูลจาก PHP ให้อยู่ในรูปแบบ JSON อาร์เรย์ด้วยฟังก์ชั่น json_encode() PHP Code <?php //Database $data = array(); $link = mysqli_connect("127.0.0.1", "tobedev", "1234", "tobedev_example"); mysqli_set_charset($link, 'utf8'); if (!$link) {     echo "Error: Unable to connect to MySQL." . PHP_EOL;     echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;     echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;     exit; } $query = "SELECT * FROM tb_event"; if ($result = $link->query($query)) {     /* fetch object array */     while ($obj = $result->fetch_object()) {        $data[] = array(                 ...