Egymáshoz kapcsolat entitások változásainak időbeli validitása
Adott Helyszín és Esemény entitásom, köztük egy-sok kapcsolat. A Helyszínt a nevén túl jellemzi a földrajzi címe is. Ha kiváncsi vagyok, hogy adott tavaly decemberi esemény hol volt, akkor az Eseményhez kapcsolt Helyszín objektum cím attribútumát kell kiolvasnom.
Történt, hogy adott helyszín elköltözik, címet vált. Frissítem az entitás vonatkozó attribútumát. Hogyan őrízhetem meg az adatok épségét időben úgy, hogy a tavaly decemberi eseményhez kötött helyszín akkori állapotát lássam? Verziózzak vagy új helyszín entitást hozzak létre, és kapcsoljam őket össze?
Milyen módszertan, minta szolgál erre?
■ Történt, hogy adott helyszín elköltözik, címet vált. Frissítem az entitás vonatkozó attribútumát. Hogyan őrízhetem meg az adatok épségét időben úgy, hogy a tavaly decemberi eseményhez kötött helyszín akkori állapotát lássam? Verziózzak vagy új helyszín entitást hozzak létre, és kapcsoljam őket össze?
Milyen módszertan, minta szolgál erre?
Verziókövetés
nid
néven, és egyvid
nevű verzió azonosítót. Ekkor tudod melyik entitásról van szó, valamint annak melyik verziójáról. Amikor pedig hivatkozás van egyik entitásról a másikra, akkor megadhatod, hogy egy konkrét változatra vonatkozzon-e, vagy annak a legfrissebb változatára. Már csak az a kérdés, hogyan lehet azt szépen és kulturáltan megoldani, hogy ha a kapcsolt elem frissül, akkor frissíteni kell-e az entitást, vagy pedig a régebbi elemre hivatkozzon.Tehát ha jól értem, minden
A kapcsolt entitás módosítása esetén számomra pont az a kívánatos, ha a meglévő forrás entitások továbbra is a régi változatra mutatnak – így validak időben.
Létrejön
nid
-vid
páros az entitáshoz. Ezek után, minden alkalommal amikor új verziót követelő változás történik, akkor generálunk egy új egyedivid
értéket, és ezzel egy új verziót az entitásból (legalábbis Drupalban).Ha az időbeni változásokat is
Épp egy nagyon hasonló
Két megoldást tudnék ajánlani:
1) Egy helyszínhez maradjon egy rekord a Helyszín táblában, az esemény táblába pedig kerüljön bele az esemény időpontjában éppen aktuális cím.
Előny: tiszta, áttekinthető marad az adatstruktúra, ha pl. statisztikát kell csinálni, akkor igencsak látod előnyét.
Hátrány: időlegesen redundánsan tárolsz adatokat a db-ben.
2) Ha a címet (vagy egyéb adatot) a helyszín táblában módosítanak, akkor módosítás helyett egy új rekord szülessen, a régi meg legyen archiválva. A régi esemény az archív sorhoz kapcsolódik továbbra is.
Előny: nem kell módosítani a db szerkezetet
Hátrány: karbantarthatóság, vagy pl olyan típusú lekérdezés, hogy adott helyszínen hány esemény volt adott időszakban. És szintén redundáns adattárolás
Én az 1)-es variációt ajánlom.
Szerintem az adatbázist kéne
Ha jól értem most ilyen a db:
event_id|event_info|location_id
location:
location_id|address
Ebből lehetne csinálni egy ilyet:
event_id|event_info|event_location_id
event_location:
event_location_id|from|to|location_id
location:
location_id|address
Vagy ha ez túl bonyolult megoldani, akkor lehetne csinálni egy új táblát, ami a helyszíneket tárolja időrendben.
event_id|event_info|location_id
location:
location_id|address
location_in_time:
event_id|location_id|migration_time
A helyszín módosításakor ide is menne egy insert, a régi dolgok meg ugyanúgy működnének módosítás nélkül.