Saya cukup yakin banyak aplikasi, aplikasi kritis, bank dan sebagainya melakukan ini setiap hari.
Gagasan di balik semua itu adalah:
- semua baris harus memiliki riwayat
- semua tautan harus tetap koheren
- seharusnya mudah untuk membuat permintaan untuk mendapatkan kolom "saat ini"
- klien yang telah membeli barang-barang usang masih harus melihat apa yang telah mereka beli meskipun produk ini bukan bagian dari katalog lagi
dan seterusnya.
Inilah yang ingin saya lakukan, dan saya akan menjelaskan masalah yang saya hadapi.
Semua tabel saya akan memiliki kolom-kolom itu:
id
id_origin
date of creation
start date of validity
start end of validity
Dan inilah ide untuk operasi CRUD:
- buat = masukkan baris baru dengan
id_origin
=id
,date of creation
= sekarang,start date of validity
= sekarang,end date of validity
= null (= berarti ini adalah rekaman aktif saat ini) - pembaruan =
- baca = baca semua catatan dengan
end date of validity
== null - perbarui catatan "saat ini"
end date of validity
= null denganend date of validity
= sekarang - buat yang baru dengan nilai-nilai baru, dan
end date of validity
= null (= berarti ini adalah rekaman aktif saat ini)
- baca = baca semua catatan dengan
- delete = perbarui catatan "saat ini"
end date of validity
= null denganend date of validity
= sekarang
Jadi, inilah masalah saya: dengan banyak asosiasi. Mari kita ambil contoh dengan nilai:
- Tabel A (id = 1, id_origin = 1, mulai = sekarang, akhir = nol)
- Tabel A_B (mulai = sekarang, akhir = nol, id_A = 1, id_B = 48)
- Tabel B (id = 48, id_origin = 48, mulai = sekarang, akhir = nol)
Sekarang saya ingin memperbarui tabel A, record id = 1
- Saya menandai catatan id = 1 dengan ujung = sekarang
Saya memasukkan nilai baru ke dalam tabel A dan ... sialan saya telah kehilangan relasi saya A_B kecuali jika saya menduplikasi relasinya juga ... ini akan berakhir pada tabel:
Tabel A (id = 1, id_origin = 1, mulai = sekarang, akhir = sekarang + 8juta)
- Tabel A (id = 2, id_origin = 1, mulai = sekarang + 8 juta, akhir = nol)
- Tabel A_B (mulai = sekarang, akhir = nol, id_A = 1, id_B = 48)
- Tabel A_B (mulai = sekarang, akhir = nol, id_A = 2, id_B = 48)
- Tabel B (id = 48, id_origin = 48, mulai = sekarang, akhir = nol)
Dan ... yah saya punya masalah lain: hubungan A_B: haruskah saya tandai (id_A = 1, id_B = 48) sebagai usang atau tidak (A - id = 1 sudah usang, tetapi bukan B - 48)?
Bagaimana cara menghadapinya?
Saya harus merancang ini dalam skala besar: produk, mitra, dan sebagainya.
Apa pengalaman Anda dalam hal ini? Bagaimana yang akan Anda lakukan (bagaimana Anda melakukannya)?
- Edit
Saya telah menemukan artikel yang sangat menarik ini , tetapi tidak berurusan dengan "usang usang" (= apa yang sebenarnya saya tanyakan)