Eminim ki birçok uygulama, kritik uygulama, banka vb. Bunu günlük olarak yapar.
Tüm bunların ardındaki fikir:
- tüm satırların bir geçmişi olmalıdır
- tüm bağlantılar tutarlı olmalıdır
- "mevcut" sütunları almak için istekte bulunmak kolay olmalıdır
- modası geçmiş şeyler satın alan müşteriler, bu ürün artık kataloğun bir parçası olmasa bile satın aldıklarını görmelidir.
ve bunun gibi.
İşte yapmak istediğim şey ve karşılaştığım sorunları açıklayacağım.
Tüm tablolarım şu sütunlara sahip olacak:
id
id_origin
date of creation
start date of validity
start end of validity
İşte CRUD operasyonları için fikirler:
- create =
id_origin
=id
,date of creation
= şimdi,start date of validity
= şimdi,end date of validity
= null (= geçerli etkin kayıt olduğu anlamına gelir) ile yeni satır ekle - güncelleme =
- read =
end date of validity
== null ile tüm kayıtları oku - "current" kaydını güncelle
end date of validity
= nullend date of validity
= ile - yeni değerlerle yeni bir tane oluşturun ve
end date of validity
= null (= geçerli etkin kayıt olduğu anlamına gelir)
- read =
- delete = "geçerli" kaydı güncelle
end date of validity
= nullend date of validity
= şimdi ile
İşte benim sorunum: çoktan çoğa dernekler ile. Değerleri olan bir örnek verelim:
- Tablo A (id = 1, id_origin = 1, başlangıç = şimdi, bitiş = null)
- Tablo A_B (başlangıç = şimdi, bitiş = null, id_A = 1, id_B = 48)
- Tablo B (id = 48, id_origin = 48, başlangıç = şimdi, bitiş = null)
Şimdi A tablosunu güncellemek istiyorum, kayıt id = 1
- İd = 1 değerini end = şimdi ile işaretliyorum
Benim ilişki A_B kaybettim damn ... masa A içine yeni bir değer eklemek ve sürece ben ilişkiyi çoğaltmak de ... Bu bir tabloya sona ereceğini:
Tablo A (id = 1, id_origin = 1, başlangıç = şimdi, bitiş = şimdi + 8mn)
- Tablo A (id = 2, id_origin = 1, başlangıç = şimdi + 8mn, bitiş = null)
- Tablo A_B (başlangıç = şimdi, bitiş = null, id_A = 1, id_B = 48)
- Tablo A_B (başlangıç = şimdi, bitiş = null, id_A = 2, id_B = 48)
- Tablo B (id = 48, id_origin = 48, başlangıç = şimdi, bitiş = null)
Ve ... başka bir sorunum daha var: A_B ilişkisi: (id_A = 1, id_B = 48) kullanılmıyor mu yoksa işaretlemem mi (A - id = 1 kullanılmıyor, ancak B - 48 değil)?
Bununla nasıl başa çıkılır?
Bunu büyük ölçekte tasarlamalıyım: ürünler, ortaklar vb.
Bu konudaki deneyiminiz nedir? Nasıl yapardın (nasıl yaptın)?
-- Düzenle
Bu çok ilginç bir makale buldum , ancak "caso eskimiş" (= gerçekten istediğim) ile düzgün bir şekilde ilgilenmiyor