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


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.