AW: [JavaTech] Relacios DB - Primary Key kerdese

TörökTibor tibort at freestart.hu
2001. Okt. 5., P, 21:52:39 CEST


Hello,

hat, csak visszaterunk oda, ahol par napja felbehagytuk:-)))

Jaj, nagyon hosszu lesz... nem tudom rovidebben mondani. 

> >osszekapcsolasara mar nem alkalmas, hiszen kulonbozo mesterseges
> >azonositot adtal nekik.
> 
> Igen, ez az, eppen azert erdemes elvalasztani az entitas mint a valos
> elet egy modelezett alapegyseg elsodleges azonositojat a perzisztalo
> technologia szabta elsodleges azonositojatol. Az entitas azonositojat
> a rendszerek (entitasok) kozott hasznalhatjuk, a mesterseges azonositot
> viszont az entitason belul.
> Ami bennem kerdeskent felmerul, hogyan kell akkor optimalisan megvalositani
> az entitasok egymashoz rendeleset. Arra gondolok, hogy vannak Orszagaim,
> mondjuk a 3 betus ISO kodokkal azonositom, de adatbazis szintjen egy mas
> kulcsot
> valasztok, pl egy sequncbol generalt mesterseges kulcsot RDB eseteben,
> es az OID-t OODB eseteben. Vannak tovabba Regioim, ami nem mas, mint

Kicsit nehezen vagom ezuttal az idezeteket... talan itt.

Ez bizonyos fokig szemlelet kerdese. Nem "jo" vagy "rossz" szemlelet, 
hanem egyszeruen "a" vagy "b" szemlelet. En ebben a kerdesben
(is) vaskalapos vagyok, es gyakran csodalom, hogy nem talalkozom
sokkal tobb hasonlo vaskalapossal pont azon az OO teruleten (peldaul 
a listan), amelynek egyik alapvetese az, hogy a valos vilagot 
modellezzuk. 

Ez ugye igazabol nem egy tulzottan szakmai erv, plane nem implementacios
nezopontbol, sokkal inkabb ismet a tankonyv. De ez az oka, hogy a
minden olyan esetben, amikor lehetseges, ragaszkodom a termeszetes
azonositok elsobbsegehez. 

Van persze egy masik, immar implementacios oka is:-) Ha ezeket
az osszefuggeseket rendesen lekepezzuk, akkor maga az adatbazis kepes
biztositani az adatok konzisztenciajat, es akarmekkora baromsagot 
csinalok (akarmilyen kliens sw-n!), nem tudom tonkretenni az 
adataimat, valamint kibuknak egyes programbeli hianyossagok.

Mint fent irtad, esetleg a technologia szab meg olyan kovetelmenyt,
hogy mindenkeppen lesz egy masik elsodleges azonositod. A multkoriban
emlitettem fizikai korlatokat, korulmenyeket. Ez peldaul az a 
kategoria. Az egvilagon semmi mas funkcioja nincs, mint az, 
hogy az alkalmazott technologia megkoveteli. Nem a feladathoz
tartozik, hanem a megoldashoz! Ezert ez egy, hm, nevezzuk ugy, 
"zavaro korulmeny":-)

Ha teljes mertekben kikuszobolhetetlen (peldaul kovetelmeny az adott 
technologia hasznalata) egy megoldast latok: visszavezetem a tervbe,
egeszen a fogalmi szintig. Voros posztoval megjelolom:-) Ezutan barmi 
is tortenik, a rendszertervem resze lesz az object id. A logikai/fizikai
szinten alternate kulcskent szerepel, illetve o lesz a p.k.,
de a termeszetes elsodleges azonositot _feltetlenul megorzom_
alternate keykent. Ehhez  rendes tervezo eszkoz automatikusan
legyart majd egy unique indexet rdbms eseten, valami hasonlot
mas esetben is illik elkovetnie.

Ezzel a kaposztam is jollakott felig, es a kecske fele is 
megmaradt. A modell tartalmaz egy ismert sajatossagot, de
hordozhato az oid-t kovetelo es annak hianyat elviselo akarmilyen 
adatkezelok kozott, es ha az alul levo akarmilyen 
adatkezelo rendesen kezeli az alternate kulcsomat,
tul nagy problema nem lesz.

Az orszag-pelda pontosan ennek megfeleloen alakulhat, szerintem 
egyertelmu. A kulcsokat nem varialnam, ami a p.k., az a p.k., 
es pont. Ha kenytelen vagyok a mesterseges azonositot bevezetni,
akkor utana mar felesleges fanyalogni, vegighurcolom a rendszeren
veres kardkent.

Egy kerdes: nem tudom, konkretan mit takar az OID-d. Egy generalt
valamit (szamot), vagy egy Object-et? Ha szam, a fentiek ervenyesek. 
Ha Object, akkor ujabb kerdes: miert nem teszed bele a termeszetes 
kulcsot?

> egy kontener az Orszagokhoz (Pl Europa all Magyarorszagbol, meg Nemeto-bol.)
> Hogyan lehet ezt optimalisan lekezelni? Ha azt mondom, hogy nem engedem ki
> a kulvilag fele a mesterseges azonositomat, es a kliens ugy kezelheti a
> regiokat, hogy csak az entitas kulcsat, azaz a 3 betus roviditest hasznalva
> allitja ossze az Europa regiot HU es DE Orszag entitasokbol, akkor a Regio
> entitas perzisztalasakor minden egyes esetben vissza kell keresnem az
> Orszag kulcsahoz (HU) tartozo mesterseges kulcsot (12354353246346),
> es azt elmenteni. Ez elegge idoigenyes feladat. Ha kiengedem a kezembol
> az OID-t, akkor nincs semmi gond, megy minden mint a karikacsapas,
> semmi overhead nincsen, csak valahogy olyan ellenszenvesnek tunik nekem.
> Ti hogyan oldjatok meg ezt?

Nem idoigenyes, ha az alternate kulcskent szereplo orszagkododhoz 
elkeszult az index, bar ahhoz a kb. 200 kodhoz meg az sem nagyon kell. 
(A usernek ehhez nem kell latnia az oid-t, elegendo, ha az adatkezlo
letre tudja hozni a keresett kapcsolatot.) Persze ha nem orszagkodrol 
van szo, hanem par millio rekordbol kell visszakeresni a masik kulcs 
erteket, akkor mar lehet baj.

Masreszt, megcsinalhatod a kapcsolatokat az alternate keykent
szereplo orszagkodhoz is, sot ez kivanatos, hiszen ez a kapcsolat
a valosagban is letezik. Ebben az esetben parhuzamosan leteznek 
a (p.k./a.k.) kapcsolataid, ami valoban eleg kellemetlen, +melo a 
db-nek update/insert eseten, de a lekerezes valszleg meg mindig tobb, 
ott visszasporolsz a vesztesegbol. De az alaphelyzet eleve az, 
hogy a technologia koveteli meg az oid bevezeteset. Technologiai 
hianyossag, mondhatjuk.
 
> Igen igazad lehet, de mondok megint egy peldat arre, ertekpapirok elsodleges
> kulcsa.
> Melyik az elsodelges kulcs a SEDOL szam, amit nemetorszagban hasznalnak,
> a ValorenNr amit a svajciak hasznalnak, vagy az ISIN szam ami vegre egy
> szabvany lesz. Mindegyik elsodelegesen azonosit. En azt akarom,
> hogy a programomat mindenhol tudjak hasznalni. Mit tehetek ilyenkor?

Ez bizony harom alternate key:-) (felteve, hogy 1-1 viszonyban allnak 
egymassal.) Barmelyiket kinevezheted elsodleges kulcsnak. A kerdesbol 
szamomra nem derult ki, hogy mi akadalyozna a hasznalatot akarmilyen 
kulcsvalasztas eseten.

udv: TT



További információk a(z) JavaTech levelezőlistáról