ทุกครั้งที่ฉันต้องการออกแบบฐานข้อมูลใหม่ฉันใช้เวลาค่อนข้างจะคิดเกี่ยวกับวิธีที่ฉันควรตั้งค่าสคีมาฐานข้อมูลเพื่อเก็บบันทึกการตรวจสอบของการเปลี่ยนแปลง
มีบางคำถามที่ถูกถามถึงที่นี่เกี่ยวกับเรื่องนี้ แต่ฉันไม่เห็นด้วยว่ามีวิธีการที่ดีที่สุดสำหรับทุกสถานการณ์:
- การออกแบบฐานข้อมูลสำหรับการแก้ไข
- การออกแบบที่ดีที่สุดสำหรับตารางฐานข้อมูลการตรวจสอบบันทึกการเปลี่ยนแปลง
- แนวคิดเกี่ยวกับการออกแบบฐานข้อมูลเพื่อรวบรวมหลักฐานการตรวจสอบ
ฉันยังสะดุดกับบทความที่น่าสนใจนี้เกี่ยวกับการดูแลบันทึกการเปลี่ยนแปลงของฐานข้อมูลที่พยายามแสดงรายการข้อดีข้อเสียของแต่ละวิธี มันเขียนได้ดีมากและมีข้อมูลที่น่าสนใจ แต่มันทำให้การตัดสินใจของฉันยากขึ้น
คำถามของฉันคือ:มีการอ้างอิงที่ฉันสามารถใช้ได้หรืออาจเป็นหนังสือหรือบางอย่างเช่นแผนผังการตัดสินใจที่ฉันสามารถอ้างถึงตัดสินใจว่าฉันควรจะไปทางไหนโดยพิจารณาจากตัวแปรอินพุตบางตัวเช่น:
- ครบกําหนดของสคีมาฐานข้อมูล
- วิธีสอบถามข้อมูลจะถูกสอบถาม
- ความน่าจะเป็นที่จะต้องสร้างเร็กคอร์ดใหม่
- มีความสำคัญมากกว่า: เขียนหรืออ่านประสิทธิภาพ
- ลักษณะของค่าที่บันทึกไว้ (สตริง, ตัวเลข, blobs)
- มีพื้นที่เก็บของว่าง
แนวทางที่ฉันรู้คือ:
1. เพิ่มคอลัมน์สำหรับวันที่สร้างและแก้ไขและผู้ใช้
ตัวอย่างตาราง:
- รหัส
- value_1
- value_2
- VALUE_3
- วันที่สร้าง
- MODIFIED_DATE
- สร้างโดย
- modified_by
ข้อเสียที่สำคัญ: เราสูญเสียประวัติของการแก้ไข ไม่สามารถย้อนกลับหลังคอมมิชชัน
2. ใส่เฉพาะตาราง
- รหัส
- value_1
- value_2
- VALUE_3
- จาก
- ถึง
- ลบแล้ว (บูลีน)
- ผู้ใช้งาน
ข้อเสียที่สำคัญ: จะทำให้คีย์ต่างประเทศทันสมัยอย่างไร? ต้องการพื้นที่ขนาดใหญ่
3. สร้างตารางประวัติแยกสำหรับแต่ละตาราง
ตัวอย่างตารางประวัติ:
- รหัส
- value_1
- value_2
- VALUE_3
- VALUE_4
- ผู้ใช้งาน
- ลบแล้ว (บูลีน)
- การประทับเวลา
ข้อเสียที่สำคัญ: ต้องทำซ้ำตารางที่ตรวจสอบทั้งหมด หากสคีมีการเปลี่ยนแปลงมันจะต้องโยกย้ายบันทึกทั้งหมดด้วย
4. สร้างตารางประวัติรวมสำหรับตารางทั้งหมด
ตัวอย่างตารางประวัติ:
- table_name
- สนาม
- ผู้ใช้งาน
- new_value
- ลบแล้ว (บูลีน)
- การประทับเวลา
ข้อเสียที่สำคัญ: ฉันจะสามารถสร้างบันทึก (ย้อนกลับ) ถ้าจำเป็นได้อย่างง่ายดาย? คอลัมน์ new_value จำเป็นต้องเป็นสตริงขนาดใหญ่เพื่อให้สามารถรองรับคอลัมน์ประเภทต่าง ๆ ได้ทั้งหมด