ฉันต้องชี้แจงก่อนว่าคอลัมน์สถานะไม่ได้มีไว้เพื่อสะท้อนสถานะของรายการในโลกแห่งความเป็นจริงที่แสดงโดยระเบียน (แถว) ในตาราง ค่อนข้างมีวัตถุประสงค์เพื่อแสดงสถานะของบันทึกเอง
สามารถทำได้ง่ายเหมือนใช้งาน / ไม่ใช้งานหรือซับซ้อนเช่นอนุมัติ / ลบ / ล็อก / รอดำเนินการ / ปฏิเสธ ฯลฯ สถานะสามารถเก็บไว้ในคอลัมน์จำนวนเต็มบูลีน / สั้นหรือคอลัมน์อักขระเดี่ยวโดยมีการแมปเช่นtrue
/ 1
= ใช้งานหรือA
= อนุมัติแล้ว
แนวคิดพื้นฐานคือการมีการสนับสนุนการกู้คืนรีไซเคิล / เหมือนถังขยะในแอปพลิเคชัน (และจำลองในฐานข้อมูล) หากมีส่วนหน้า GUI หรือส่วนต่อประสานอื่นที่สามารถให้ผู้ใช้บันทึก "ลบ" มันไม่ได้ลบบันทึกในตาราง แต่เพียงเปลี่ยนสถานะของบันทึกเป็นไม่ใช้งานหรือถูกลบ เมื่ออินเทอร์เฟซดึงระเบียนมันจะได้รับระเบียนที่ตรงกับเงื่อนไขที่สถานะนั้นใช้งานอยู่หรืออนุมัติแล้วเท่านั้น
หากผู้ใช้ทำผิดพลาดและจำเป็นต้องกู้คืน "ลบ" (ในมุมมองของผู้ใช้) DBA สามารถแก้ไขบันทึกกลับเป็น Active หรือ Approved ได้อย่างง่ายดายซึ่งจะดีกว่าการค้นหาสำเนาสำรองและหวังว่าจะค้นหาระเบียนต้นฉบับ ที่นั่น หรืออินเทอร์เฟซของตัวเองสามารถอนุญาตให้ผู้ใช้ดูบันทึกที่ถูกลบในมุมมองที่แยกต่างหากและเรียกคืนพวกเขาตามความจำเป็นหรือแม้กระทั่งลบพวกเขาอย่างถาวร (ลบบันทึกจริง)
คำถามของฉัน:
- นี่เป็นแนวปฏิบัติที่ดีหรือเป็นแนวปฏิบัติที่เลวร้ายหรือไม่?
- ส่งผลกระทบต่อการทำให้ข้อมูลกลับสู่ปกติหรือไม่
- ข้อผิดพลาดที่อาจเกิดขึ้นคืออะไร?
- มีวิธีอื่นในการบรรลุเป้าหมายเดียวกันหรือไม่? (เห็นโน๊ต)
- คุณจะให้ฐานข้อมูลบังคับใช้ข้อ จำกัด ที่ไม่ซ้ำกันในข้อมูลสำหรับสถานะที่แน่นอนเท่านั้นได้อย่างไร (แต่อนุญาตให้มีการทำซ้ำจำนวนเท่าใดก็ได้สำหรับสถานะอื่น ๆ )
- เพราะเหตุใดฐานข้อมูลจึงไม่มีคุณลักษณะเหมือน "ถังรีไซเคิล" หรือการติดตามตาราง / การกู้คืนโดยกำเนิดดังนั้นเราจึงสามารถให้ส่วนต่อประสานลบระเบียนจริงโดยไม่ต้องกังวล
หมายเหตุ:ฉันอ่านเกี่ยวกับการรักษาตารางประวัติแยกต่างหาก แต่มันดูแย่กว่าในแง่ของการจัดเก็บและต้องสร้างทริกเกอร์และทำให้ทริกเกอร์ทันสมัยอยู่เสมอด้วยสคีมาของตารางที่ถูกติดตาม