Autor Zpráva
JanMatoušek
Profil
Ahoj,

Chci se spíše zeptat, co si myslíte o mém řešení, jestli je rozumné.

Jde o to, že v DB máme určité stavy objednávek. (některé stavy objednávek se mění automaticky a některé přes selectbox)
Například první stav objednáno, je vytvořen automaticky. Tento stav má id = 1. Takže do objednávka potřebuji uložit stav id 1.
Ale přemýšlel jsem nad tím, co kdyby se někdo hrabal v db a jako id 1 dal třeba "zrušeno".
Proto mě napadlo to řešit tak, že budu mít v tabulce orders_status i sloupec key, typu string a podle toho budu hledat stav.

Ve scriptu bych pak měl např:
const ORDER_STATUS_ORDERED = 'ordered';

zde bych si získal id statusu ordered nebo vyhodil vyjímku, že je něco špatně

a uložil objednávku

Dle mého názoru je to více intuitivní a dotaz navíc v tomto případě není až takové zatížení.

Co si o tom myslíte? Nebo je nějaké lepší řešení?
jenikkozak
Profil
Ale přemýšlel jsem nad tím, co kdyby se někdo hrabal v db a jako id 1 dal třeba "zrušeno".
Tomu nerozumím. Jak konkrétně by to udělal?
aDAm
Profil
jako nějaký hacker? Tak buď pojedeš stavy dynamicky z jiné tabulky přes IDčka a nebo si udělej pevnou množinu ze které budeš vybírat ne?
JanMatoušek
Profil
jenikkozak:
Tak např.:

No třeba by se dohodlo, že se změní stavy objednávek a někdo by to udělal tak, že by vše smazal a nasypal by tam ty data znovu, ale zpřeházeně.

No, ale to by mu to vlastně nedovolilo, protože je tam FK:-)

No ale teď mě napadlo lepší vysvětlení. Dejme tomu, že by se prostě rozhodlo, že jeden status se prostě předělá a bude mít úplně jiný význam.
Pokud by zůstalo stejné id, tak by s tím script stále pracoval a chyba by se neukázala. Ale v tomto případě je pravděpodobné, že by se přepsal i key vystihující status. Tím pádem by potom script začal házet vyjímku, že původní key mu chybí a že s ním počítal a byl oby jasné, že je script potřeba poupravit.
jenikkozak
Profil
Podobná recyklace je z principu špatná a bude mít stejný efekt, pokud použiješ identifikátory nebo slovní popis.
aDAm
Profil
a proč by se to mělo takto blbě dělat? Pokud se status nepoužívá tak se odstraní, nebo nějak disabluje a přidá se nový ne?
JanMatoušek
Profil
jenikkozak:
ok, takže nevymýšlet složitosti a prostě si do těch konstant rovnou dát id podle db jo? :-)
jenikkozak
Profil
V MySQL můžeš využít typ enum, který je nositelem informace o významu hodnoty. Není to ale řešení nastíněného problému, který považuji za nestandardní.
JanMatoušek
Profil
ano enum znám a osobně bych viděl ty stavy radši v configu, ale strukturu db mám víceméně zadanou a mohu jí pouze poupravovat a on tam není pouze stav, ale i poznámky a další informace, takže by to ten config také hezky nevyřešil

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: