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

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




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


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




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 นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สอนเขียน PHP แสดงการจองห้องประชุมแบบไฮไลท์ตามช่วงเวลา (แบบเชื่อมต่อฐานข้อมูล MySQL)

ตัวอย่าง ผลลัพธ์ที่ได้จากการจองในฐานข้อมูล ตาราง tb_room สร้างตารางรายชื่อห้องประชุม สำหรับ id นั้นเป็น Primarykey จะกำหนดให้สร้างอัตโนมัติ ทุกครั้งที่เราเพิ่มชื่อห้องประชุมใหม่ -- -- Database: `tobedev_example` -- -- -------------------------------------------------------- -- -- Table structure for table `tb_room` -- CREATE TABLE IF NOT EXISTS `tb_room` (   `id` int(11) NOT NULL,   `name` varchar(30) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- -- Dumping data for table `tb_room` -- INSERT INTO `tb_room` (`id`, `name`) VALUES (1, 'ห้องประชุม 1'), (2, 'ห้องประชุม 2'), (3, 'ห้องประชุม 3'), (4, 'ห้องประชุม 4'), (5, 'ห้องประชุม 5'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tb_room` -- ALTER TABLE `tb_room`   ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tb_room` -- ALTER TABLE `tb_room`   MODIFY `i...

การนำไอคอน มาแสดงบน Fullcalendar

เนื่องจากมีน้องคนหนึ่งให้ช่วยดูโค้ดเกี่ยวกับ Fullcalendar ให้หน่อย แล้วพอดีช่วงนี้ผมก็กำลังสนใจปฏิทิน Fullcalendar อยู่พอดี จึงลองหาสาเหตุที่ไม่สามารถแสดงข้อมูลจาก MySQL และไม่สามารถแทรก icon เข้าไปใน Fullcalendar ได้ จากที่สังเกตุได้ครั้งแรกคือ Error ที่ Console ของ Firefox เกี่ยวกับฟังก์ชั่นที่เขียนผิด และก็มีการ echo ค้างไว้ในส่วนของไฟล์ getCalendar.php ก็เลยจัดการทดสอบแล้วลบ echo ออกให้เหลือแค่ echo json_encode($event_array); ที่ได้ใช้งานจริงเท่านั้น ขั้นตอนการตรวจสอบความถูกต้องของโค้ด PHP 1) ต้องแน่ใจว่าคำสั่งที่เขียนไว้ สามารถดึงข้อมูลมาแสดงผลได้ด้วยการ echo $sql; 2) นำคำสั่งที่ได้ไปรันในโปรแกรมจัดการฐานข้อมูล ในที่นี้คือ phpMyAdmin 3) เมื่อตรวจสอบดูผลลัพธ์ที่ได้ หากถูกต้องมีข้อมูลก็แสดงว่าการ Query ทำงานได้ 4) มาดูการทำงานของ JavaScript ในส่วนของ jQuery มีการแจ้งเตือนที่ฟังก์ชั่น .on() ซึ่งจะใช้กับ jQuery เวอร์ชั่นใหม่เท่านั้น นั่นหมายถึงเวอร์ชั่น jQuery ที่มากับ Fullcalendar เป็นเวอร์ชั่นเก่า ก็ให้เปลี่ยนไปใช้ .live() แทน ก็จะทำงานได้ปกติ 5) ม...