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

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




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


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




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 แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต