Re: dotaz - Java - DB objekty

2015-04-17 Tema obsahu Ondra Medek
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

2015-04-17 Tema obsahu Miroslav Paulfranc
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

2015-04-17 Tema obsahu Miroslav Paulfranc
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