วิธีที่ดีที่สุดในการออกแบบฐานข้อมูลและตารางเพื่อเก็บบันทึกการเปลี่ยนแปลง?


16

ฉันต้องตั้งค่าคุณลักษณะประวัติในโครงการเพื่อติดตามการเปลี่ยนแปลงก่อนหน้านี้

สมมติว่าฉันมีสองตารางตอนนี้:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

ตัวอย่าง:ฉันมีแถวในบันทึกย่อและผู้ใช้ต้องการเปลี่ยนข้อความ ฉันต้องการติดตามสถานะก่อนการเปลี่ยนแปลงและหลังการเปลี่ยนแปลง

อะไรจะเป็นวิธีที่ดีที่สุดในการตั้งค่าคอลัมน์ในแต่ละตารางเหล่านี้ซึ่งจะบอกว่ารายการนั้นเป็นรายการ "เก่า" 0 ถ้าใช้งานอยู่หรือ 1 ถ้าถูกลบ / มองไม่เห็น

ฉันยังต้องการสร้างAUDIT TRAILตารางhistory ( ) ซึ่งเก็บidสถานะก่อนหน้าidของสถานะใหม่ซึ่งตารางนี้ id เหล่านั้นเกี่ยวข้องกับอะไร


1
คุณสามารถใช้ทริกเกอร์ฐานข้อมูลเพื่อสร้างตารางการตรวจสอบ
Kin Shah

คำตอบ:


5

กรุณาดู

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

เป็นการอ่านที่ดีในแนวทางการสร้าง Audit Trail ในการออกแบบฐานข้อมูลของคุณ หลักฐานการตรวจสอบเป็นสิ่งจำเป็นในการใช้งานฐานข้อมูล คุณควรจะเห็นการกระทำของผู้ใช้ฐานข้อมูลภายในระบบเสมอ

เราสามารถติดตามแถวที่มีการเปลี่ยนแปลงเมื่อในระบบ PTA ของเรา (จุดในเวลา) โดยการเพิ่มคอลัมน์ PTA (จุดในเวลา) มาตรฐานบางส่วนไปยังตารางทั้งหมดที่น่าสนใจของ PTA

ฉันขอแนะนำดังต่อไปนี้:

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.

วิธีที่ดีที่สุดในการใช้ 'โซลูชันหมายเลข 2: ตารางการติดตามข้อมูลเฉพาะ' สำหรับแอปพลิเคชัน OLTP คืออะไร
AA.SC

บริษัท ที่ฉันทำงานด้วยใช้ schemas หลายรายการปัจจุบันหนึ่งสำหรับเส้นทางการตรวจสอบโดยเฉพาะ ตารางตรวจสอบนั้นค่อนข้างเรียบง่ายเมื่อใช้โซลูชัน # 2 (ซึ่งเป็นสิ่งที่เราใช้ในที่ทำงาน) แยกงานที่แตกต่างออกไป (การปรับปรุงตารางสินค้าคงคลังข้อมูลลูกค้าที่ปรับปรุงหรือถูกลบเครดิตที่มอบให้ลูกค้า ฯลฯ ฯลฯ ) และสร้างตารางการตรวจสอบตามการกระทำทั่วไปที่ผู้ใช้มีความสามารถ นั่นจะตอบคำถามของคุณเกี่ยวกับการใช้โซลูชัน 2 กับฐานข้อมูลของคุณหรือไม่ถ้าไม่โปรดอธิบาย ขอบคุณ!
Hector

ที่จริงแล้วเราตรวจสอบข้อมูลด้วยวิธีแรกโดยใช้ตารางการตรวจสอบ แต่ข้อมูลการตรวจสอบมีขนาดใหญ่มากและตอนนี้เราต้องการแปลงวิธีการของเราโดยเพียงแค่จับข้อมูลกับคอลัมน์ที่เปลี่ยนแปลง คำถามของฉันคือฉันจะบรรลุแนวทางนี้ได้อย่างไร วิธีที่ดีที่สุดในการติดตามว่าคอลัมน์ใดของตารางที่มีการเปลี่ยนแปลง .. หากตารางมีมากกว่า 20 คอลัมน์หนึ่งในนั้นคือ DataType Text
AA.SC

10

เมื่อออกแบบขีดความสามารถในการกำหนดเวอร์ชันในข้อมูลของคุณมีข้อกำหนดขั้นต่ำ (ฉันคิดว่า) น้อยมาก:

  • ข้อมูลแต่ละรุ่นควรอยู่ในตัวเองและเป็นอิสระจากรุ่นอื่น ๆ ซึ่งหมายความว่าไม่มีการตั้งค่าสถานะหรือตัวบ่งชี้อื่นที่แสดงว่าเป็นรุ่นปัจจุบันและที่เป็น "ประวัติ" นอกจากนี้ยังหมายถึงการอัปเดตเอนทิตีหมายถึงการแทรกเวอร์ชันใหม่เท่านั้น - ไม่จำเป็นต้องทำการอัพเดตเวอร์ชันก่อนหน้า
  • หลีกเลี่ยงสิ่งที่ฉันเรียก Row Spanning Dependency นั่นคือที่หนึ่งเขตข้อมูล (End_Date) ของแถวจะต้องอยู่ในซิงค์กับเขตข้อมูลอื่น (Start_Date) ของแถวที่แตกต่างกัน สิ่งนี้ทำให้การทำงานกับข้อมูลนั้นยากขึ้นและเป็นแหล่งความผิดปกติที่ยอดเยี่ยม
  • เวอร์ชันปัจจุบันและเวอร์ชันที่ผ่านมาทั้งหมดควรอยู่ในตารางเดียวกัน สิ่งนี้ทำให้เป็นไปได้ที่จะใช้แบบสอบถามเดียวกันเพื่อดูข้อมูลที่ผ่านมา "ณ " วันที่เฉพาะและเพื่อดูข้อมูลปัจจุบัน
  • คีย์ต่างประเทศสำหรับข้อมูลที่ได้รับการปรับรุ่นควรทำงานเหมือนกับข้อมูลปกติ (ไม่ผ่านการทดสอบ)
  • การออกแบบควรเรียบง่ายหรือเข้าใจในระดับสากลว่าช่วงการเรียนรู้สำหรับนักพัฒนาใหม่จะลดลง

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


1
คะแนนที่ดีมาก! อย่างไรก็ตามฉันไม่เข้าใจในเรื่องนี้This means no flag or other indicator showing which is the current version and which are "history."หากไม่มีการตั้งค่าสถานะหรือตัวบ่งชี้เราจะแยกความแตกต่างของเวอร์ชันปัจจุบันจากเวอร์ชันประวัติได้อย่างไร โดยเฉพาะอย่างยิ่งตามจุดที่สามของคุณซึ่งคุณแนะนำว่าควรอยู่ในตารางเดียวกัน
GMsoF

งานนำเสนอแสดงตัวอย่างการออกแบบรวมถึงแบบสอบถามเพื่ออ่านข้อมูลปัจจุบันและ / หรือข้อมูลในอดีตจากตาราง หากดูน่าสนใจพอที่จะมองลึกลงไปเอกสารจะมีรายละเอียดมากขึ้น
TommCatt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.