Screen Shot 2557-04-29 at 6.20.45 PM

แปลและสรุปเรื่อง Reporting Database ของ Martin Fowler 
โดยการสรุปและแปลมาจากความเข้าใจของตัวเอง
ดังนั้นอาจจะตรงหรือไม่ตรง
หรืออาจจะมาจากความคิดเห็นส่วนตัว
แต่คิดว่าน่ามีประโยชน์ในการนำไปใช้งาน
และมั่นใจว่า ต้องใช้งานกันอย่างแน่นอน

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

ประเด็นหลักคือ เรื่องของรายงาน
แน่นอนว่าแต่ละระบบมีความต้องการที่แตกต่างกันไป
ทั้งโครงสร้างข้อมูล ข้อมูลที่จัดเก็บ ตลอดจนหน้าตาของรายงาน

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

ในฐานข้อมูลรายงานนั้น
จะออกแบบมาเพื่อการออกรายงานโดยเฉพาะ
อาจจะใช้ที่เก็บข้อมูลอื่นๆ ที่ไม่ใช่ฐานข้อมูลก็ได้นะ
ซึ่งมันควรจะมีข้อดีต่างๆ ดังนี้

1. โครงสร้างของฐานข้อมูลรายงาน ต้องมีการออกแบบเฉพาะ
ตามรูปแบบของรายงาน ซึ่งมันต้องง่ายต่อการเขียนหรือบันทึกข้อมูล

2. ฐานข้อมูลรายงานไม่ต้องการการ normalization
เนื่องจากเป็นฐานข้อมูลที่ใช้สำหรับการอ่านเป็นหลัก
ดังนั้นจึงยอมให้เกิดความซ้ำซ้อนของข้อมูลได้เสมอ
เนื่องจากมันทำให้การอ่านข้อมูลได้ง่ายและไม่ซับซ้อน

3. ในการแยกฐานข้อมูลรายงานออกมาแบบนี้
ทำให้สามารถแก้ไขโครงสร้างฐานข้อมูลของระบบงาน
โดยไม่ต้องทำการแก้ไขฐานข้อมูลรายงาน

4. ในการดึงข้อมูลจากฐานข้อมูลรายงาน
จะไม่กระทบต่อประสิทธิภาพการทำงานของงานจริง

5. สามารถเก็บข้อมูลที่ผ่านการสรุปมาแล้วได้เลย
โดยไม่จำเป้นต้องเก็บต้นฉบับไว้
ซึ่งทำให้ง่ายต่อการเพิ่มข้อมูล และสร้างรายงานต่างๆ

6. สามารถมีฐานข้อมูลรายงานมากกว่า 1 ฐานข้อมูล ซึ่งแยกกันได้
ตามรายงานที่ต้องการ

ถ้าคุณทำฐานข้อมูลรายงานแล้ว
ยังไม่มีข้อดีทั้ง 6 ข้อ คุณต้องกลับไปมองสิ่งที่ทำไว้ได้แล้วนะ !!!

โดยปกติแล้วข้อมูลทั้งฐานข้อมูลรายงานและระบบ
ควรจะต้องเท่ากันอยู่เสมอ
แต่ก็ขึ้นอยู่กับความต้องการของแต่ละระบบ
รวมทั้งข้อจำกัดในเรื่องต่างๆ

ตัวอย่างเช่นข้อมูลในฐานข้อมูลรายงาน
อาจจะมีข้อมูลช้ากว่าระบบปัจจุบันอยู่ 1 วัน
หรือเป็นข้อมูลของเมื่อวาน
ซึ่งจะมีตัวจัดการไว้ดึงข้อมูลจากฐานข้อมุลระบบ
มายังฐานข้อมูลรายงานในทุกๆ คืน หรือในช่วงที่มีจำนนวนคนใช้งานน้อยๆ
ข้อเสียก็คือ ข้อมูลมันไม่ล่าสุด แต่ข้อดีคือสามารถสร้างระบบได้ง่าย
ระบบการทำงานไม่ซับซ้อนอะไร

แต่ถ้าบางระบบต้องการข้อมูลแบบ realtime 
จะต้องใช้แนวคิดของ messaging มาใช้
เพื่อใช้สำหรับส่งข้อมูลจากทุกๆ การกระทำในระบบ
มายังฐานข้อมูลรายงานตลอดเวลา
ซึ่งทำให้การพัฒนาระบบมีความซับซ้อนมากยิ่งขึ้น

และฐานข้อมูลรายงาน นี้จะเหมาะสมกับระบบ
ที่มีกระบวนการทำงานที่มีการประมวลผลหรือทำงานที่ซับซ้อน
ซึ่งคิดว่าทุกๆ ระบบก็ซับซ้อนด้วยกันทั้งนั้น
ดังนั้นจึงหนีไม่พ้นเรื่องนี้สินะ !!!

สุดท้ายแล้ว
ดังนั้นลองมองกลับไประบบที่กำลังพัฒนา
ว่าต้องการฐานข้อมูลรายงานแยกออกมาหรือไม่ ?
หรือในปัจจุบันอาจจะมีแล้ว แต่คุณออกแบบให้ครบจักวาล !!
หรือคุณออกแบบตามรูปแบบรายงานที่ต้องการ
หรือถ้ามีแล้ว ระบบฐานข้อมูลรายงานมันไปกระทบต่อระบบงานจริงไหม ?
ถ้าใช่ แสดงว่า คุณน่าจะมาผิดทางแล้วล่ะ …

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

เรื่องพื้นฐานที่ไม่ควรมองข้าม หรือ บอกว่าระบบมันเหมือนเดิมนะ …