ฉันค่อนข้างมั่นใจว่ามีแอปพลิเคชั่นมากมายแอปพลิเคชันที่สำคัญธนาคารและอื่น ๆ ทำสิ่งนี้เป็นประจำทุกวัน
แนวคิดเบื้องหลังทั้งหมดคือ:
- แถวทั้งหมดต้องมีประวัติ
- ลิงก์ทั้งหมดจะต้องเชื่อมโยงกัน
- มันควรจะง่ายต่อการร้องขอเพื่อรับคอลัมน์ "ปัจจุบัน"
- ลูกค้าที่ซื้อสิ่งที่ล้าสมัยควรยังคงเห็นสิ่งที่พวกเขาซื้อแม้ว่าผลิตภัณฑ์นี้ไม่ได้เป็นส่วนหนึ่งของแคตตาล็อกอีกต่อไป
และอื่น ๆ
นี่คือสิ่งที่ฉันต้องการจะทำและฉันจะอธิบายปัญหาที่ฉันเผชิญ
ตารางทั้งหมดของฉันจะมีคอลัมน์เหล่านี้:
id
id_origin
date of creation
start date of validity
start end of validity
และนี่คือแนวคิดสำหรับการดำเนินการ CRUD:
- สร้าง = แทรกแถวใหม่ด้วย
id_origin
=id
,date of creation
= ตอนนี้start date of validity
= ตอนนี้end date of validity
= null (= หมายความว่าเป็นระเบียนที่ใช้งานในปัจจุบัน) - ปรับปรุง =
- read = อ่านบันทึกทั้งหมดที่มี
end date of validity
== null - อัปเดตระเบียน "ปัจจุบัน"
end date of validity
= null ด้วยend date of validity
= ทันที - สร้างรายการใหม่ด้วยค่าใหม่และ
end date of validity
= null (= หมายถึงเป็นระเบียนที่ใช้งานอยู่ในปัจจุบัน)
- read = อ่านบันทึกทั้งหมดที่มี
- ลบ = อัปเดตระเบียน "ปัจจุบัน"
end date of validity
= null ด้วยend date of validity
= ตอนนี้
ดังนั้นนี่คือปัญหาของฉัน: กับการเชื่อมโยงหลายต่อหลายคน ลองมาตัวอย่างด้วยค่า:
- ตาราง A (id = 1, id_origin = 1, start = now, end = null)
- ตาราง A_B (เริ่ม = ตอนนี้สิ้นสุด = null, id_A = 1, id_B = 48)
- ตาราง B (id = 48, id_origin = 48, start = now, end = null)
ตอนนี้ฉันต้องการอัปเดตตาราง A, บันทึก id = 1
- ฉันทำเครื่องหมายบันทึก id = 1 ด้วยสิ้นสุด = ตอนนี้
ฉันใส่ค่าใหม่ลงในตาราง A และ ... เจ้ากรรมฉันสูญเสียความสัมพันธ์ของฉันไปแล้ว A_B ยกเว้นว่าฉันทำซ้ำความสัมพันธ์เช่นกัน ... สิ่งนี้จะจบลงที่ตาราง:
ตาราง A (id = 1, id_origin = 1, start = now, end = now + 8mn)
- ตาราง A (id = 2, id_origin = 1, start = now + 8mn, end = null)
- ตาราง A_B (เริ่ม = ตอนนี้สิ้นสุด = null, id_A = 1, id_B = 48)
- ตาราง A_B (เริ่ม = ตอนนี้สิ้นสุด = null, id_A = 2, id_B = 48)
- ตาราง B (id = 48, id_origin = 48, start = now, end = null)
และ ... ฉันมีปัญหาอื่น: ความสัมพันธ์ A_B: ฉันจะทำเครื่องหมาย (id_A = 1, id_B = 48) ว่าล้าสมัยหรือไม่ (A - id = 1 ล้าสมัย แต่ไม่ใช่ B - 48)
วิธีจัดการกับสิ่งนี้?
ฉันต้องออกแบบสิ่งเหล่านี้ในขนาดใหญ่: ผลิตภัณฑ์พันธมิตรและอื่น ๆ
ประสบการณ์ของคุณเกี่ยวกับเรื่องนี้คืออะไร? คุณจะทำอย่างไร (คุณทำอย่างไร)
- แก้ไข
ฉันได้พบบทความที่น่าสนใจนี้แต่ไม่ได้จัดการอย่างถูกต้องกับ "cascasding obsolescence" (= สิ่งที่ฉันถามจริง ๆ )