Subject: AW: [JavaTech] Relacios DB - Primary Key kerdese

From: Szitas Krisztian <[email-masked]>
Date: Fri, 5 Oct 2001 11:02:55 +0200

>Az "idotallosag" es a "korrektseg" ebben az esetben totalis
>felreertes a mesterseges kulccsal kapcsolatban. Az elsodleges 
>kulcs, avagy azonosito az entitas sajat jellemzoje. A mesterseges 
>azonosito egy krealt valami, ami peldaul ket rendszer kozott mar 
>akarmi is lehet, de jellemzoen ket azonos adat kozvetlen
>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
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?

>Elofordulhat, hogy valamilyen korulmeny miatt az entitas nem
>azonosithato, nincs rendes elsodleges kulcsa. Ekkor ez a
>bizonyos "korulmeny" nagyon-nagyon figyelemremelto, mert valami
>sumaksag lapul a rendszerben. Lehetoleg addig kell kutatni,
>amig az ember megtalalja az entitas valodi elsodleges kulcsat.
>Mivel az elsodleges kulcs az entitas jellemzoje, megvaltoztatasa
>szinten gyanus esemeny.
>Az esetleg alkalmazott mesterseges kulcs az esetek tulnyomo reszeben
>valamilyen technologiai sajatossag kovetkezmenye, es alternate
>key a valodi elsodleges kulcs mellett.

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?

---

From: Török Tibor <[email-masked]>
Date: Fri, 05 Oct 2001 20:52:39 +0200

Hello,

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

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

> 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?

> 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.
 
> 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