Re: dotaz - Java - DB objekty
Ahoj, jestli to dobře chápu, pak Type je nějaký číselník public class Type { long id; // umely klic String code; // prirozeny klic } Tedy jde o to, jestli kód větvit podle umělého klíče nebo přirozeného. V praxi jsme se setkal s oběma přístupy: - větvení podle umělého klíče id - nemusí se načítat záznam Type, stačí mít Record.type_id. Je ale potřeba zajistit stejný umělý klíč na všech prostředích (vývoj, test, produkce). Což může být někdy trochu problém. - větvení podle přirozeného klíče je více robusní, není zde problém se synchronizací prostředí. Ale musí se načítat (join, select navíc) i z tabulky typu. Případně se načítání dá vyhnout použitím cache (Hibernate 2nd level cache). Já bych spíše použil přístup přes přirozený klíč s využitím Hibernate 2nd level cache. Většinou dávám do aplikace nějaké tlačítko pro administrátora pro mazání Hibernate 2nd level cache pro administrátora pro případ, kdy se DB tabulky mění mimo aplikaci. Ondra Medek 2015-04-17 12:41 GMT+02:00 Miroslav Paulfranc paul...@seznam.cz: Zdravím všechny přítomné Měl bych spíše obecnější dotaz, který nesouvisí pouze s Javou, nicméně předpokládám, že i při psaní kódu v Javě podobnou věc velmi často řešíte. Dejme tomu, že máte databázové objekty, u kterých chcete nějaké číselné identifikátory (autoincr., identity..,) a máte např.nějaký objekt typu Record a ten je nějakého typu, např. Type, takže databáze s 2 tabulkami Record a Type (přičemž každý záznam typu Record má referenci na Type). Pak chcete záznamy typu Record v aplikaci nějak zpracovávat podle toho, jakého jsou Typu. Máte např. nějaký přepínač (switch(...)), který něco dělá s Recordem podle jeho Typu. Používáte v přepínači klíč Typu, nebo si vytváříte nějaké speciální pole (něco jako TYPE_CODE), podle kterého pak záznamy v aplikaci zpracováváte? Tj. v přepínači nebo nějakém if-u bude if(type.getId()==něco) , nebo radši použijete nějaký k tomu určený atribut? Napadají mě důvody pro použití i nepoužití prvního i druhého způsobu; máte prosím někdo nějaký tip, proč preferovat přístup s klíčem nebo nějaký jiný přístup, ideálně odkaz na nějaké články, které by se tímto zabývali, případně jak to řeší nějaké populární aplikace? Předem děkuji za tipy. S pozdravem M.Paulfranc
Re: dotaz - Java - DB objekty
Předně děkuji za reakci. Také používám klíč, ale nejsem si jistý, zda by nebyl lepší nějaký kód. Pokud se klíč změní např. na složený klíč, promítne se změna do celé aplikace (to je asi to nejmenší), klíč je nějaké náhodně vygenerované číslo (na které pak vážu logiku aplikace), které se musí udržovat na všech instancích stejné (jak jste také zmínil) a které nic neříká o vlastním zpracování, pokud by se použil kód, může se několik typů zpracovávat stejným způsobem - dle kódu, zpracování se může měnit - např. se prohodí způsob zpracování u dvou typů apod., dále může kód být např. nějakou kombinací zpracování u čísla - co bit, to nějaký způsob apod. Takže váhám. Ale děkuji za reakci Používám Hibernate a k dotahování typu (resp. ekvivalentu) stejně dochází, takže join navíc už tam je. -- Původní zpráva -- Od: Ondra Medek xmed...@gmail.com Komu: Programovací jazyk JAVA konference@java.cz Datum: 17. 4. 2015 14:39:17 Předmět: Re: dotaz - Java - DB objekty Ahoj, jestli to dobře chápu, pak Type je nějaký číselník public class Type { long id; // umely klic String code; // prirozeny klic } Tedy jde o to, jestli kód větvit podle umělého klíče nebo přirozeného. V praxi jsme se setkal s oběma přístupy: - větvení podle umělého klíče id - nemusí se načítat záznam Type, stačí mít Record.type_id. Je ale potřeba zajistit stejný umělý klíč na všech prostředích (vývoj, test, produkce). Což může být někdy trochu problém. - větvení podle přirozeného klíče je více robusní, není zde problém se synchronizací prostředí. Ale musí se načítat (join, select navíc) i z tabulky typu. Případně se načítání dá vyhnout použitím cache (Hibernate 2nd level cache). Já bych spíše použil přístup přes přirozený klíč s využitím Hibernate 2nd level cache. Většinou dávám do aplikace nějaké tlačítko pro administrátora pro mazání Hibernate 2nd level cache pro administrátora pro případ, kdy se DB tabulky mění mimo aplikaci. Ondra Medek 2015-04-17 12:41 GMT+02:00 Miroslav Paulfranc paul...@seznam.cz (mailto:paul...@seznam.cz): Zdravím všechny přítomné Měl bych spíše obecnější dotaz, který nesouvisí pouze s Javou, nicméně předpokládám, že i při psaní kódu v Javě podobnou věc velmi často řešíte. Dejme tomu, že máte databázové objekty, u kterých chcete nějaké číselné identifikátory (autoincr., identity..,) a máte např.nějaký objekt typu Record a ten je nějakého typu, např. Type, takže databáze s 2 tabulkami Record a Type (přičemž každý záznam typu Record má referenci na Type). Pak chcete záznamy typu Record v aplikaci nějak zpracovávat podle toho, jakého jsou Typu. Máte např. nějaký přepínač (switch(...)), který něco dělá s Recordem podle jeho Typu. Používáte v přepínači klíč Typu, nebo si vytváříte nějaké speciální pole (něco jako TYPE_CODE), podle kterého pak záznamy v aplikaci zpracováváte? Tj. v přepínači nebo nějakém if-u bude if(type.getId()==něco) , nebo radši použijete nějaký k tomu určený atribut? Napadají mě důvody pro použití i nepoužití prvního i druhého způsobu; máte prosím někdo nějaký tip, proč preferovat přístup s klíčem nebo nějaký jiný přístup, ideálně odkaz na nějaké články, které by se tímto zabývali, případně jak to řeší nějaké populární aplikace? Předem děkuji za tipy. S pozdravem M.Paulfranc
dotaz - Java - DB objekty
Zdravím všechny přítomné Měl bych spíše obecnější dotaz, který nesouvisí pouze s Javou, nicméně předpokládám, že i při psaní kódu v Javě podobnou věc velmi často řešíte. Dejme tomu, že máte databázové objekty, u kterých chcete nějaké číselné identifikátory (autoincr., identity..,) a máte např.nějaký objekt typu Record a ten je nějakého typu, např. Type, takže databáze s 2 tabulkami Record a Type (přičemž každý záznam typu Record má referenci na Type). Pak chcete záznamy typu Record v aplikaci nějak zpracovávat podle toho, jakého jsou Typu. Máte např. nějaký přepínač (switch(...)), který něco dělá s Recordem podle jeho Typu. Používáte v přepínači klíč Typu, nebo si vytváříte nějaké speciální pole (něco jako TYPE_CODE), podle kterého pak záznamy v aplikaci zpracováváte? Tj. v přepínači nebo nějakém if-u bude if(type.getId()==něco) , nebo radši použijete nějaký k tomu určený atribut? Napadají mě důvody pro použití i nepoužití prvního i druhého způsobu; máte prosím někdo nějaký tip, proč preferovat přístup s klíčem nebo nějaký jiný přístup, ideálně odkaz na nějaké články, které by se tímto zabývali, případně jak to řeší nějaké populární aplikace? Předem děkuji za tipy. S pozdravem M.Paulfranc