[ vlaiv @ 11.02.2011. 10:25 ] @
Radi se o sledecem : Radim neki model baze gde zelim imati u samoj bazi implementiran change log u vidu tabele. Change log je neophodan za sinhronizaciju date baze sa drugim bazam. Ne mogu da upotrebim klasican replication zato sto se radi o kombinaciji razlicitih servera baze (pgsql, mssql ce i slicno), osim toga ne replicira se kompletna baza nego samo podskup u zavisnosti od tipa klijenta koji vrsi sinhronizaciju (neki mogu da menjaju podatke, neki samo treba da vide izmene, i to na odredjenom nivou - neko moze da dodaje podatke i preuzima samo kompletno obradjene podatke, neko vrsi obradu, a neko ima mogucnost revizije obrade ...) Obzirom da su tabele dizajnirane da imaju UUID (GUID) kao Primarni kljuc razmisljao sam da u tabelu change_log stavim kao foreign kljuc jedno polje tipa UUID i jos jedno int polje koje govori o tipu promene koja je evidentirana. primer: tabele change_log, documents, clients cli_id - primarni kljuc, clients - tip UUID doc_id - primarni kljuc, documents - tip UUID change_log: chl_id - primarni kljuc chl_reference - foreign key - vrednost primarni kljuc u tabeli clients ili tabeli documents chl_type 1 - client change, 2 - document change (ovo je banalan primer sa dve tabele, u realnosti bi bilo za n tabela) Pored ovih polja change_log bi imao i dodatna polja: tip promene, insert, update, delete, kao i polje koje ce da ima kodirano precizne promene (na kojim poljima unutar tabele je recimo uradjen update), kao i sistemske informacije (vreme, user i sl) Kako da odradim referencijalni integritet u ovom slucaju. Modelujem u Power Designer-u, da li postoji nacin da se to modeluje? Znam da bi se to moglo izvesti sa triggerima, ali da li postoji neko drugo resenje? Da li neka baza podrzava tako nesto? znaci on insert - provera da li postoji u documents ili clients on update (mada necu koristiti UUID ostaje sa rekordom zauvek, ali me interesuje) - promena u change_log odgovarajuce UUID vrednosti on delete - kombinacija cascade ili restrict Ima li neko ideju? |