Zdravim,
mozna je muj prispevek offtopic, ale rad bych upozornil na jednu dulezitou vec, a sice ze dedicnost neni jedinym zpusobem typovani. Zde bych velice zvazoval, zda nemit jednu tabulku Vozidlo, vedle ni ciselnik TypVozidla a na nej se z Vozidla odkazovat FKckem. Analogicky i v Javovem objektovem navrhu - kompozice, ne dedicnost. Resit vsechno dedicnosti je mor, jak v cistych objektech, tim spise pak v objektech mapovanych pres ORM. [opravdu offtopic: Mor je to velice rozsireny, zrejme diky pojeti ucebnic OOP, ktere kazdemu zacatecnikovi vsugeruji, ze dedicnost je "to maso"]. Podle mych zkusenosti to s dedicnosti v ORM nakonec dopada tak, ze jako smysluplne entity se jevi ty, ktere jsou koncove listy stromu dedicnosti, jejich predci jsou "abstraktni" - v tom smyslu, ze napr. nema cenu je zakladat samostatne. Priklad: kdyz mate od Vozidlo oddedene OsobniAuto, NakladniAuto, Traktor, proc budete zakladat primo instanci Vozidla? Abyste tam schoval vse, co se neni ani osobak, ani nakladak a ani traktor? To si zakladate na pekny chlivek... V tomto smyslu je, rekl bych, entita Vozidlo abstraktni, pak je otazka, k cemu potrebujete mit jeji tabulku v db atd... Typovani pomoci odkazu na vyctovy typ je mnohem praktictejsi.

Roman


----- Original Message ----- From: "Ondřej Kvasnovský" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, December 14, 2006 12:29 PM
Subject: Re: ORM vs OBD


Makub wrote:
Ondřej Kvasnovský wrote:
> Ahoj,
> ja v tom teda problem nevidim... myslim ty vozidla. prece si vytvoris > napr.: hlavni objekt Vozidlo a od neho budes dedit vsechny ostatni vozidla (traktor,
vlak, osobni automobil... ).

Na strane objektoveho jazyka Java samozrejme problem s objekty neni :-))

> Jak to namapujes do relacni databaze je uz plne na tobe.

No ale tady je prave ten problem, ze to spravne namapovat nejde,
protoze mezi objekty a relacemi zeje filozoficka propast :-)

> Samozdrejme to muzes narvat do jedne tabulky, ale tim ti vznikne hodne > volnych
mist a hodne velkaaa tabulka. Proste peklo... Ani se tento zpusob nikde
nedoporucuje....

To jsem psal.

> Nebo to muzes namapovat do tolika tabulek kolik je potomku tridy > vozidlo, to
je jeste lepsi reseni. Akorat se tam bude mit duplicitni sloupce....

Cimz ztratim moznost delat SQL dotazy na vsechna vozidla, nejdriv se musim
podle typu vozidla vybrat tabulku, a pak teprve udelat dotaz.

Krome toho co kdyz mi casem pribude dalsi typ vozidla ?
To bych pak musel pridelat dalsi tabulku, a pritom je to
jenom potomek Vozidla. Skutecna objektova databaze mi
by to mela usnadnit.

Jo jo, mas pravdu. Neni to dobry zpusob, ale slo by to :) ikdyz nechtel bych byt u toho az nekdo bude chtit delat update a pridavat dalsi tabulku :)


Slysel jsem, ze PostgreSQL ma objektove rozsireni,
ktere umi tabulky dedit, takze pak  muzu snadno delat
dotazy na vsechna vozidla i na konkretni typy.
Ale neni to standard, a pri pridani dalsiho
potomka porad musim pridat dalsi tabulku.

V PostgreSQL jsem narazil na jednu zvlastnost. Kdyz jsem poprve delal s Hibernate, tak jsem ji pripojoval na PostgreSQL. Mel jsem tam chyby, ktere vzplynuly z objektoveho mysleni. PostgreSQL to ale pochopil a nestezoval si. Kdezto kdyz jsem to spustil na MySql tak to nejelo, sice se to v poradku namapovalo, ale to bylo vsechno. :) Coz me trochu zmatlo, myslel jsem ze kdyz uz to jede na jedne databazi tak to musi jet na vsech databazich co hibernate podporuje... ale ono ne. ;) Pak jsem zjistil ze PostgreSQL je tak trochu objektove orientovane a bylo to jasne.


> A nebo udelas jednu hlavni tabulku Vozidlo, v ktere budou reference mezi
jejimy potomky. Ja osobne bych to udelal timto zpusobem.

Tohle jsem nepochopil. Jak reference mezi potomky ?

Mozna jsem to napsal ne uplne spravne, myslel jsem reference mezi rodicem a potomkem. Kdezto v rodicovske tabulce by byli vsechny atributy (sloupce), ktere by potomci dedili. Pak by byly tabulky potomku a v nich by byla uz jim specificka data (atributy, sloupce.. ).
Myslim ze je to doporuceny postup jak namapovat databazi do relacni db.



Pak je samozrejme ctvrte reseni, ze budu mit jednu tabulku VOZIDLA
a druhou tabulku VLASTNOSTI_VOZIDEL, ktera bude mit sloupce
(VOZIDLO_ID int, VLASTNOST varchar, HODNOTA varchar)
kde VOZIDLO_ID je foreign key do tabulky vozidel,
do sloupce VLASTNOST budu strkat nazvy vlastnosti a
do HODNOTA jejich hodnoty, cimz budu simulovat promenny pocet sloupcu.
Ale je to dost neefektivni.

Tak to se mi moc nelibi... ale taky moznost :)


Cache pry dela interne neco takoveho, ale efektivne.

Asi to Cache zkusim... Bylo by dobre, kdyby nekdo dal nejaky osvedseny a 100% nabuseny link na tutorialek :)

> Takze bych to jako hlavni problem mezi OBD a ORM nevidel... proste tam > musi
byt neco asi jineho. Nebo Cache, coz by mela prej byt ODB, je "jen" pseudo
objektova databaze. Ma v tom nekdo jasno? Jesti jo tak to rad "uslysim". :)

Jasno v tom nemam, ale ten priklad s vozidly mam z jedne knizky
o databazich, kde vysvetlovali rozdil mezi relacnimi,
relacne-objektovymi a objektovymi databazemi.

A jestli to fakt dela... tak je to mazec. Zase by bylo o starost min. Ikdyz stejne, ani principialne, mi neni jasne jak vi ktere atributy chci ulozit. Stejne bych to nejak musel na mapovat, ne? Prece nebudu ukladat cele objekty... i s tim co nechci aby bylo persistentni... Snad ze by se to serializovalo...a urcovalo by se u atributu jestli jsou transient nebo ne...




Makub

Ondra.

Odpovedet emailem