Autor | Zpráva | ||
---|---|---|---|
martin b. Profil * |
#1 · Zasláno: 27. 3. 2010, 19:38:24
Ahoj,
mám jen takovou otázku. V rezervačním systému, který právě programuji je možné do objednávky zahrnout nějaké položky. Jenže ty položky může administrátor změnit a já chci, aby klient viděl to, jaké položky si tam přidal, položky mají i cenu. Takže zákazník si objedná: P1 - 1120 Kč P2 - 2230 Kč Pak administrátor změní ceny, třeba na P1 - 1020 Kč P2 - 2130 Kč A pokud bych k objednávce dával id té položky co změnil, zákazník by viděl už nové ceny a né ty, které si objednal. Takhle administrátor může změnit i název nebo cokoli jiného, co k položce patří (nemá jen název a cenu). Tak bych se rád zeptal, jak takovou situaci řešit? Momentálně to dělám tak, že mám jinou tabulku, kam vlastně kopíruji to, co si objednal, problém je ale ten, že potřebuji i to id na ten originál, ale ten zas admin může změnit.. Nějaký nápad? Děkuju |
||
Kajman_ Profil * |
#2 · Zasláno: 27. 3. 2010, 19:58:20
Změnu id můžete hlídat triggerem a v druhé tabulce s původními hodnotami aktualizovat.
|
||
martin b. Profil * |
#3 · Zasláno: 27. 3. 2010, 20:13:27
Kajman:
Děkuju za odpověď, ale teď tomu moc nerozumím. Proč bych měl hlídat změnu id? To id se nemění, mění se jen ty hodnoty pod tím id. |
||
Kajman_ Profil * |
#4 · Zasláno: 27. 3. 2010, 22:01:33
Administrátor mění i hodnoty v druhé záložní tabulce? Nebo může v aktuální měnit id, tak by se ze záložní špatně provazovalo na aktuální?
|
||
martin b. Profil * |
#5 · Zasláno: 27. 3. 2010, 22:42:46
Asi jsem to nesrozumitelně popsal. Tak snad lépe:
Dvě tabulky, nazvu je "originál" a "kopie". V té "originál" může administrátor měnit cokoli, kromě id. A já chci uživatelovi, který si zvolí nějaké položky umožnit vidět v budoucnu to, co si zvolil - tedy uvidí u položek cenu, za kterou je kupoval. Ale administrátor může u položek třeba změnit cenu položek. Takže pokud bych měl pouze tabulku "originál", zákazník by viděl vždy nové údaje, neviděl by ty původní, které měl při objednávce. Pokud budu mít i tabulku "kopie", potřebuju ale zase referenci na původní - originální položku. Jednoduše jsem to vyřešil tak, že jsem do tabulky "kopie" dal sloupec s id odkazující na originál... Někdo mi radil, ať mám jen jednu tabulku - "originál" a pokud admin něco změní, původní záznam zachovám a zneviditelním a vytvořím nový. Ale zdá se mi zbytečné mít v tabulce "originál" prakticky jen duplicitní data, pokud by třeba změnil jen překlep. A hlavně, pokud záznam obsahuje poměrně delší popis... Tak by mě zajímalo, jak se takový problém normálně řeší...? |
||
Kajman_ Profil * |
#6 · Zasláno: 27. 3. 2010, 23:29:35
Myslím, že jsou obě varianty ukládání možné. Osobně bych asi také ukládal do dvou tabulek - hlavně pokud se skoro vždy používá tabulka originál a tabulka kopie jen výjimečně. A kór když to máte už naprogramované takto, bych to do jedné tabulky necpal :-)
Nejřív jsem myslel, že Vás trápí, že administrátor může změnit id v tabulce originál a přeruší tak vazbu, proto jsem odkazoval na použití triggeru. |
||
imploder Profil |
#7 · Zasláno: 28. 3. 2010, 00:04:03 · Upravil/a: imploder
Taky by se to dalo řešit tak, že pokud má položku někdo objednanou, tak nejde změnit a při změně se místo toho vytvoří nová položka s jiným ID. Takže původní ID pořád odkazuje na tu starou, s původní cenou.
ON UPDATE RESTRICT, viz http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html EDIT: Původní položka by se musela nějak zneviditelnit. asi to není úplně nejlepší řešení, protože kdo odkaz na starou položku v katalogu by pak nefungoval. Co třeba to vyřešit úplně jednoduše, že v okamžiku, kdy si zákazník položku objedná, se všechny potřebné údaje nakopírují do objednávky a tam zůstanou napořád nezměněné? Prostě že by údaje, co zákazník uvidí, byly jen kopie a změna položky, ze které vznikly, je nijak neovlivní. To mi připadá nejjednodušší a nejlepší. No ale to už tady zaznělo, takže vlastně tohle píšu zbytečně. |
||
Časová prodleva: 14 let
|
0