Adatbázisok elmélete 3. előadás

Hasonló dokumentumok
Egyed-kapcsolat modell

Adatbázisok elmélete 4. előadás

Adatbázisok elmélete

Egyed-kapcsolat modell

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Adatbázisok elmélete 6. előadás

Adatbázisok elmélete 6. előadás

Adatbázisok elmélete 4. előadás

Adatbázisok elmélete 6. előadás

Adatbázisok elmélete 6. előadás

ügyfél. Adatbázisok elmélete 2. előadás. Korai modellek. Adatbáziskezelő rendszerek története. Első rendszerek

ADATBÁZISOK ELMÉLETE 2. ELŐADÁS 1/26 Adatbáziskezelő rendszerek története Ősei a file-kezelők; ezek nem teljesítik ugyan azokat az elvárásokat, amiket

7. Előadás tartalma A relációs adatmodell

Adatbázisok elmélete 12. előadás

Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

1. Az adatbázis fogalma, fontosabb összetevÿi, felhasználási módjai

6. Előadás tartalma Adatmodellezés 2

T Adatbázisok-adatmodellezés

modell, amiben csak bináris sok-egy kapcsolatok (link, memberowner,

5. Előadás tartalma Magas szintű adatbázismodellek Adatmodellezés

ADATMODELLEZÉS. Az egyed-kapcsolat modell

ADATBÁZIS-KEZELÉS. Relációs modell

Az adatbázis-alapú rendszerek tervezésének alapvető része az adatok modellezése. Ez legtöbbször két fázisban zajlik:

A relációs adatmodell

Objektumorientált adatbázisok

Csima Judit október 24.

ADATBÁZISOK ELMÉLETE 5. ELŐADÁS 3/22. Az F formula: ahol A, B attribútumok, c érték (konstans), θ {<, >, =,,, } Példa:

Adatbázisok. 4. gyakorlat. Adatmodellezés: E-K modellb l relációs adatbázisséma. Kötelez programok kiválasztása szeptember 24.

ADATBÁZISOK. 3. gyakorlat E-K modell

E/K diagram átalakítása relációs adatbázistervre

Adatbázis rendszerek Definíciók:

TAJ. foglalkozás. gyógyszer

ADATBÁZIS-KEZELÉS Demetrovics Katalin

Adatbázisok gyakorlat

Adatbázisok. 1. gyakorlat. Adatmodellezés október október 1. Adatbázisok 1 / 42

Adatbázisok gyakorlat

OOP. Alapelvek Elek Tibor

ADATBÁZISOK. 4. gyakorlat: Redundanciák, funkcionális függőségek

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Adatbázisrendszerek 8. előadás: Az Enhanced Entity-Relationship modell március 27.

Adatbázisok elmélete 11. előadás

ADATBÁZIS-KEZELÉS. 1. Alapfogalmak

8. Előadás tartalma. Funkcionális függőségek

Adatbázisok elmélete

Adatbázisok. 3. gyakorlat. Adatmodellezés: E-K modellb l relációs adatbázisséma. Kötelez programok kiválasztása szeptember 21.

6. Gyakorlat. Relációs adatbázis normalizálása

RELÁCIÓS ADATBÁZISSÉMÁK. Egyed-kapcsolat modellről átírás

Bevezetés: az SQL-be

Adatbázisok elmélete 10. előadás

Az egyed-kapcsolat modell (E/K)

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely. ABR ( Adatbázisrendszerek) 12. Előadás:

ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben

Több felhasználó párhuzamosan olvashatja, bővítheti, módosíthatja és törölheti az adatokat Az adatok konzisztenciájának és biztonságának biztosítása

Adatbázisok I Adatmodellek komponensei. Adatbázis modellek típusai. Adatbázisrendszer-specifikus tervezés

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbázis terv- Könyvtár

NORMALIZÁLÁS. Funkcionális függés Redundancia 1NF, 2NF, 3NF

Magas szintő adatbázismodellek

Adatmodellezés. 1. Fogalmi modell

Csima Judit szeptember 6.

ADATBÁZIS-KEZELÉS. Modellek

Adatmodellezés, alapfogalmak. Vassányi István

Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

ABR ( Adatbázisrendszerek) 1. Előadás : Műveletek a relációs medellben

Objektum orientált programozás Bevezetés

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Adatszerkezetek 2. Dr. Iványi Péter

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

7. előadás. Karbantartási anomáliák, 1NF, 2NF, 3NF, BCNF. Adatbázisrendszerek előadás november 3.

7. előadás. Karbantartási anomáliák, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF. Adatbázisrendszerek előadás november 7.

OOP #14 (referencia-elv)

Adatbázisok. 3. gyakorlat. Adatmodellezés: E-K modell szeptember szeptember 17. Adatbázisok 1 / 11

példa: Legyen egy zenés CD-ket tartalmazó objektum-orientált adatbázis. Feltételezzük: egy zenés CD típusa audio, vagy mp3-as, vagy videoklippeket

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Adatbázisrendszerek 7. előadás: Az ER modell március 20.

Kidolgozott példák. E-K diagram. Tánc egyednek csak egyetlen attribútuma van. Most a megoldás úgy is helyes lenne,

Adatbázisok I. Egyed-kapcsolat formális modell. Egyed-kapcsolat formális modell. Kapcsolatok típusai

A számítástudomány alapjai

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázisok tavaszi félév Vizsgatételsor

SQL DDL-1: táblák és megszorítások

11. előadás Objektumorientált adatbázisok haladóbb ismeretek

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Adatbázis alapú rendszerek

7. fejezet Kulcsok és idegen kulcsok

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

Adatbázisok 1. Kósa Balázs gyakorlata alapján Készítette: Nagy Krisztián. 1. gyakorlat

Adatbázisok elmélete 9. előadás

Adatmodellek. 2. rész

Kiskunmajsa és környéke turisztikai térinformatikai alkalmazás

Sor és oszlopkalkulus

Bevezetés: Relációs adatmodell

Adatbázisok elmélete 1. előadás

ADATBÁZISOK E-K MODELLBŐL RELÁCIÓS MODELL. Debrenti Attila

Adatbázisrendszerek. Karbantartási anomáliák, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF március 13.

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Relációsémák létrehozása SQL nyelvben

Adatbázis rendszerek 1. 4.Gy: ER modell

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Átírás:

Adatbázisok elmélete 3. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 2/30 Többágú kapcsolat típusa Az R(E 1, E 2,..., E n ) kapcsolat E i felé egyirányú, ha igaz az, hogy a maradék E 1, E 2,..., E i 1, E i+1,..., E n egyedhalmazokból bárhogy választva ki egy-egy egyedet (e k -t az E k -ból), maximum egy olyan E i -beli e i egyed van, amivel az (e 1, e 2,..., e i 1, e i, e i+1,..., e n ) egyedvektorra az R kapcsolat fennáll. (Természetesen lehet egy többágú kapcsolat egynél több irányban is egy jellegű.) Példa: 2005 Szerzõdés Színész Stúdió Egy rögzített (film, színész) párhoz csak egy stúdió tartozik, de pl. egy rögzített (stúdió, film) párhoz tartozhat több színész. Nem minden írható le ilyen módon, de nem baj, úgyis az a fontos, hogy majd a relációs megadásnál pontosak tudjunk lenni. A fenti példánál, a rajzon nem tudjuk jelölni azt, hogy már a film egyedül meghatározza a stúdiót, de a relációs modellben lesz erre eszközünk. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 1/30 Kapcsolatok típusa A bináris kapcsolatoknál ugyanúgy van, mint az ODL-nél: van több-több, több-egy és egy-egy kapcsolat. A többágú kapcsolat egy kicsit bonyolultabb. Bináris kapcsolat ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 3/30 Ha egy kapcsolatban egy egyedhalmaz többször is szerepel, akkor a nyilakon/vonalakon jelöljük a különböző szerepeket. pl: gyereke Az egy irányt nyíl jelzi, azaz ott van nyíl, amelyik egyedhalmazból csak egy tartozhat a másik egyedhalmaz egy egyedéhez. Személy Anyja Például, ha a C egyedhalmaz egy egyedéhez csak egy D-beli tartozhat az R kapcsolatnál, de egy D-belihez tartozhat több C-beli is, akkor: C R D Szerzõdés Stúdió anyja Fontos megcímkézni a vonalakat, mert ahhoz a szerephez tartozik az egy nyíl, ami az anyára vonatkozik, a gyerekághoz nem kell. Ha egy-egy kapcsolat van, akkor persze mindkét oldalra kell a nyíl.

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 4/30 Sokágú kapcsolat átírása binárisra ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 6/30 Megjegyzések az átíráshoz Miért kell/jó ez? átláthatóbb a bináris a megvalósításban könnyebben kezelhető látszik, hogy nem baj, hogy az ODL csak binárist tud, hisz a többágút is át lehet ilyenné írni Az átíráshoz fő ötlet: egy R(E 1, E 2,..., E n ) kapcsolat egy eleme egy n egyedből álló vektor: (e 1, e 2,..., e n ). Az átírásnál létrehozunk egy új egyedhalmazt, melynek az ilyen vektorok lesznek az egyedei és az ilyen vektorokat bináris több-egy kapcsolatok (n darab) fogják az E 1,..., E n egyedhalmazokhoz kötni. Ez az átírás azért is jó, mert egy kapcsolatot majd úgyis valahogy így tudunk kezelni a fizikai megvalósításban: a kapcsolat egy eleme egy három mutatóból álló tömb lesz, ahol ez egyes mutatók a kapcsolatot alkotó egyedekre (film, színész, stúdió) mutatnak. Az átírásnál persze veszíthetünk infót: az előbbi példánál elveszett az, hogy a többes kapcsolat egy volt a Stúdió fele. Ez nem baj, ezt majd a végén a relációs modellben úgyis finomabban le tudjuk írni. Mivel minden többágú kapcsolatot át lehet írni binárissá, azért elég volna csak ilyen bináris kapcsolatokat használni. Amúgy az ODL-ben lényegében ez történik, ha ott akarnánk ábrázolni azt a hármas kapcsolatot, ami a filmeket, színészeket és stúdiókat összeköti, akkor ehhez fel kellene vennünk egy negyedik osztályt így (és ez lényegében ugyanaz a helyzet, amit az E/K modellben kaptunk az átíráskor): ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 5/30 Rajzon: E1 En R... E1 E2 E2 helyett R... En ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 7/30 interface Szerződés { relationship Stúdió gyártja; inverse Stúdió::StúdióSzerződése; relationship filmje; inverse ::Szerződése; relationship Színész szereplője; inverse Színész::SzínészSzerződése; Konkrét példa (az előbbi háromágú szerződéses példa átírva): Szerzõdés Stúdió Színész

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 8/30 Feladat Javasoljon ODL-sémát egy olyan banki adatbázishoz, amely tartalmazza az ügyfeleket és azok számláit. Az ügyfelekről tartsuk nyilván a nevüket, címüket, telefonszámukat és személyi számukat. A számláknak legyen számlaszámuk, típusuk (takarékbetét számla, folyószámla pl.) és egyenlegük. Megoldás (néhány megoldás a sok lehetséges közül): attribute string lakcím; inverse Számla::tulajdonosai; interface Számla { relationship Set<Ügyfél> tulajdonosai; inverse Ügyfél::számlái; ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 10/30 Ha több címe is lehet egy embernek: attribute Set< Struct Cím{string város, string utca, int házszám}> lakcím; inverse Számla::tulajdonosai; ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 9/30 Lehetett volna struktúra a lakcím típusa: attribute Struct Cím{string város, string utca, int házszám} lakcím; inverse Számla::tulajdonosai; ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 11/30 Lehetett volna felsorolástípus a számla típusa: interface Számla { attribute enum Típus{ betét, folyó } számlatípus; relationship Set<Ügyfél> tulajdonosai; inverse Ügyfél::számlái;

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 12/30 Ha egy embernek csak egy számlája lehet és egy számlának csak egy tulajdonosa: interface Számla { attribute string lakcím; relationship Ügyfél tulajdonosa; relationship Számla számlája; inverse Ügyfél::számlája; inverse Számla::tulajdonosa; ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 14/30 inverse Számla: tulajdonosai; relationship Set<Lakhely> ittlakik; inverse Lakhely::lakói; interface Számla { relationship Set<Ügyfél> tulajdonosai; inverse Ügyfél::számlái; interface Lakhely { attribute string város; attribute string utca; attribute int házszám; attribute Set<int> telefonszámok; relationship Set<Ügyfél> lakói; inverse Ügyfél::ittLakik; ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 13/30 Ha egy embernek több lakhelye lehet és az egyes lakhelyekhez lehet több telefonszám is: attribute Set< Struct Cím{ string lakcím, Set<int> telszámok }> lakcím; Struct-on belül nem lehet kollekciótípus illetve két kollekciótípus sem lehet egymásba ágyazva egy attribútum típusában. Az se lenne jó, ha külön nyilvántartunk egy csomó lakcímet és ettől függetlenül az összes telefonszámot, mert akkor nem fogjuk tudni, hogy melyik címhez melyik szám tartozik. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 15/30 Feladat Tervezzen E/K diagrammot egy olyan banki adatbázishoz, amely tartalmazza az ügyfeleket és azok számláit. Az ügyfelekről tartsuk nyilván a nevüket, címüket, telefonszámukat és személyi számukat. A számláknak legyen számlaszámuk, típusuk (takarékbetét számla, folyószámla pl.) és egyenlegük. Megoldás (néhány megoldás a sok lehetséges közül): CÍM TELSZÁM

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 16/30 Ha egy számlának csak egy tulajdonosa lehet: ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 18/30 Ha egy embernek több címe és több telefonszáma is lehet, de azt nem kell nyilvántartani, hogy mik az összetartozó lakcím-telefonszám párok: ORSZÁG CÍM TELSZÁM VÁROS TELEFON CÍM HÁZSZÁM TELEFONJA LAKCÍME Azért nem lehetett az ügyfelek egyedhalmaz attribútuma a telefonszám, mert csak egyszerű típusokat használhatunk, kollekciókat nem. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 17/30 Ha egy számlának csak egy tulajdonosa lehet és egy ügyfélnek csak egy számlája lehet: ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 19/30 Ha azt is nyilván kell tartani, hogy mik az összetartozó lakcím- telefonszám párok: CÍM TELSZÁM VÁROS HÁZSZÁM ORSZÁG LAKHELY TELEFONJA TELEFON SZÁM LAKIK

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 20/30 Alosztályok Egy osztály (egyedhalmaz) speciális tulajdonságú, de egymáshoz hasonló objektumai (egyedei) alkotják. Ezeket érdemes együtt kezelni, de úgy, hogy a (nagyobb) osztályba való tartozásuk is megmaradjon. ODL-ben ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 22/30 Ha olyan filmeket is nyilván akarunk tartani, amik rajzfilmek (akarunk hangok kapcsolatot a Színészek felé) és krimik is (akarunk bizonyítékok attribútumot), akkor muszáj létrehoznunk a fenti Krimirajzfilm osztályt, mert az objektumos szemléletben minden objektum csak egy (al)osztályhoz tartozhat. Ha nem lenne Krimirajzfilm osztály, akkor vagy csak a hangokat vagy csak a bizonyítékokat tudnánk feljegyezni. Probléma lehet a többszörös öröklődésnél, ha ugyanolyan nevű attribútumot/kapcsolatot több helyről is örökölne egy alosztály. Ilyenkor valamelyiket át kell nevezni. Pl. a a osztályon belül akarhatunk külön Rajzfilm, Vígjáték, Krimifilm alosztályokat. Ennek megadása az osztályok deklarációjakor: A osztályt megadjuk, úgy, mint eddig, és interface Rajzfilm:{ relationship Set<Színész> hangok; inverse Színész::hangItt; Vagyis először megadjuk az alosztály nevét, aztán : után annak az osztálynak a nevét, aminek ő alosztálya lesz. A zárójelen belül már csak azokat az attribútumokat/kapcsolatokat kell megadni, amik az alosztály sajátjai, a többi attribútumot/kapcsolatot örökli a főosztálytól. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 21/30 Példa még: interface Krimifilm:{ attribute Set string bizonyítékok; Sőt, lehet több szintű öröklés, illetve egy alosztály örökölhet két főosztálytól is: ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 23/30 Alosztályok az E/K modellben Sokkal egyszerűbb, mint az ODL-ben, de a cél ugyanaz: egy egyedhalmaz speciális egyedeit együtt kezelni. Ehhez egy speciális (, magyarul azegy) kapcsolat van. (Motiváció: A ló az egy állat = a lovak alosztályát alkotják az állatoknak.) Jelölés, ha E 2 alosztálya E 1 -nek: interface Krimirajzfilm:Krimifilm, Rajzfilm{ Itt a Krimirajzfilm alosztály örökli a Krimifilm és a Rajzfilm (al)osztály összes attribútumát és kapcsolatát (természetesen azokat is, amiket azok is úgy örököltek), neki magának pedig semmi saját attribútuma/kapcsolata nincsen. E2 E1 E1 E2 Az öröklési kép ilyen: Krimifilm Rajzfilm Az első esetben a nyíl arra mutat, amelyik a Fő osztály, ez most nem a több-egy kapcsolatnál megszokott nyíl, az ilyen szempontból is speciális kapcsolat. A második esetben az alosztály van alul. Az alárendelt halmaz most is örökli a főosztály attribútumait és kapcsolatait, de persze lehetnek neki sajátjai is. Krimirajzfilm

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 24/30 A filmes példánál ez lesz az E/K modellben: hossz Különbségek a két modell között cím Rajzfilm Krimifilm bizonyíték hangok Színész egyedhalmaz felé év Az ODL-ben minden objektum csak egy osztályhoz tartozhat (ezért ott kellett Krimirajzfilm osztály), az E/K modellnél viszont lehetséges az, hogy egy egyed egyszerre több osztály/alosztály része is, ilyenkor az attribútumait/kapcsolatait úgy szedi össze a felmenőitől (E/K-ban nem kell Krimirajzfilm alosztály). A relációs modellre való átíráskor majd úgyis egységesen fogjuk ezeket a jellemzőket kezelni (lásd majd ott). Így az E/K modellben egy olyan film, ami krimi is és rajzfilm is (pl. Macskafogó), három helyről szedi össze az attribútumait/kapcsolatait: a címét, hosszát és gyártási évét a egyedhalmazból, a hangjait a Rajzfilm alosztályból, a bizonyítékot pedig a Krimifilmből. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 26/30 interface Hajó { attribute int súly; Megoldás ODL-ben interface Ágyúnaszád:Hajó { attribute Set<Struct Fegyver{string név, int darab, int kaliber}> fegyverek; interface Repülőgép-anyahajó:Hajó { attribute int hossz; interface Tengeralattjáró:Hajó { attribute int mélység; interface Csatarepülőgép-anyahajó:Ágyúnaszád, Repülőgép-anyahajó { ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 25/30 Példa ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 27/30 Megoldás E/K modellel Hadihajók adatbázisát szeretnénk megadni ODL-ben és E/K diagrammal. Minden hadihajóról nyilvántartjuk a nevét, a vízkiszorítását tonnában, típusát. Négyfajta hajót akarunk nyilvántartani: név súly HAJÓ típus 1. Ágyúnaszád (itt nyilvántartjuk a fegyverek számát és kaliberét) 2. Repülőgép-anyahajó (tároljuk a leszállópálya hosszát) 3. Tengeralattjáró (max. merülési mélység) 4. Csata-repülôgép-anyahajó (olyan ágyúnaszád, ami repülőgépanyahajó is). ÁGYÚNASZÁD REP.ANYA.H TENGERALATTJ. fegyvere hossz mélység FEGYVER neve darab kaliber Megjegyzés: Itt nem kell külön egyedhalmaz a Csatarepülőgép-anyahajóknak, mert nincs olyan attribútum, ami csak ezeknél lenne. Egy ilyen hajót úgy tartunk majd nyilván, hogy lesznek attribútumai mind az ágyúnaszádoktól, mind a repülőgép-anyahajóktól.

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 28/30 Megszorítások Olyan megszorításokat is ábrázolni akarunk az adathalmazokon, attribútumokon, kapcsolatokon, amik nem fejezhetők ki pusztán az attribútumok és a kapcsolatok felsorolásával. Ezek további infók, amik a séma részei, ezért már a tervezéskor kell rájuk gondolni, olyan megkötéseket tartalmaznak, amikre majd mindig figyelni kell. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 30/30 Általános gond: Mik a jó megszorítások? Miket lehet megvalósítani? Ez persze majd a konkrét megvalósítástól függ, a konkrét DDL-től, de azért jó lenne már a modellezéskor is annyit leírni, amennyit csak lehet. A megszorítások haszna jobban/valósághoz közelebbi módon le lehet velük írni a világot segíthetik a tárolást (elég pl. a kulcsattribútumokat megadni kereséskor) Nem világos, hogy mik a jó megkötések, miket lehet jól kezelni. Típusai (tipikus, (néha) jól kezelhető megszorítások): Kulcsok: olyan attribútum, vagy attribútumhalmaz megadása, ami az egyedet/objektumot már egyértelműen azonosítja. (Pl. személyi szám vagy filmnél gyártási év és cím.) A tervezéskor döntjük el, hogy mik alkossanak kulcsot (persze a valóságot szem előtt tartva). A kulcshoz tartozó attribútumoknak értékeket adva, legfeljebb egy objektum vagy egyed létezhet, amikhez ezek az értékek tartoznak. Néha tűnhet úgy az aktuális adatokból, hogy valami kulcs (mert akkor éppen nincs két egyed ugyanolyan értékekkel), de ettől még nem lesz kulcs valami, az csak a deklarációtól függ. ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 29/30 Egyértékűségi megszorítások: előírhatjuk, hogy valami érték vagy értékkombináció legyen egyedi. Pl. ilyen a kulcsok megadása, vagy az, hogy egy kapcsolat nem rendelhet halmazt értékül egy egyedhez/objektumhoz. Ilyenek lesznek majd a funkcionális függések is a relációs modellben. Hivatkozási épség: a hivatkozott dolognak léteznie kell. Értelmezési tartomány korlátozása: attribútum lehetséges értékeire megkötés (pl. magasság legyen kisebb 300-nál, film gyártási éve 1800 utáni). Módszerek erre: típusok megadása, felsorolás típus, konkrétabban majd az SQL DDL-jénél. Egyéb megszorítások: minden más, pl. kapcsolat fokának korlátozása (egy filmnek max. 10 szereplőjét akarjuk nyilvántartani). ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 31/30 1. Kulcs: Megszorítások megadása ODL-ben lehet egy vagy több kulcs egy kulcs állhat egy vagy több attribútumból Megadása formailag: interface <Osztálynév> (Kulcsinfók){... } ahol a Kulcsinfók = key(s) K 1,..., K n ahol K i egy kulcsleírás, ami <attribútumnév>, ha a kulcs egy attribútumból áll vagy (< at tr 1 >,..., < at tr n >), ha a kulcs több attribútumos. Például: interface (key (cím, év)) {... } itt egy darab kulcs van, ami két attribútumból áll, ezek együtt azonosítanak egy objektumot interface Dolgozó (key dolgozóid, tbszám) {... } itt két egy-attribútumos kulcs van, mindegyik külön-külön azonosít

ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 32/30 interface Ügyfél (key szemszám) { attribute string lakcím; inverse Számla::tulajdonosai; Korábbi példa interface Számla (key számlaszám) { relationship Set<Ügyfél> tulajdonosai; inverse Ügyfél::számlái; ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 34/30 3. Hivatkozási épség: Cél, hogy ha valahol van valamire hivatkozás, akkor az létezzen is. Pl. ha a nél van mutató egy Stúdióra, mint gyártóra, akkor legyen olyan stúdió a Stúdió osztályban. Erre figyelni bonyolult: ne lehessen úgy filmet felvenni, hogy nincs hozzá stúdió ne lehessen ész nélkül stúdiót törölni Az ODL az egész hivatkozási épség kérdést a megvalósítás szintjére tolja át. 4. Értelmezési tartomány megszorítása és egyéb megkötések: Az értelmezési tartomány megszorítására a típusok vannak, további szűkítést nem támogat. A kapcsolat fokát lehet korlátozni az Array kollekcióoperátor használatával (Array<Színész, 10> esetén csak 10 színészt tartunk nyilván). ADATBÁZISOK ELMÉLETE 3. ELŐADÁS 33/30 Megszorítások megadása ODL-ben 2. Egyértékűség az ODL-ben: Kulcs-szerű megszorítás jól leírható (lásd előbb) Az attribútumok és a kapcsolatok többességének szabályozására: a kollekcióoperátorok használata/nem használata. Így előírható, hogy egy attribútum/kapcsolat csak egy értéket vehessen fel. Egyértékűséget kétféleképpen is lehet érteni: legfeljebb egy értéken vehessen fel valami (ekkor esetleg állhat NULL-érték is bizonyos helyeken, ami jelentheti azt, hogy nincs megfelelő érték, vagy hogy van, de nem ismert), pontosan egyet vehessen fel (pl. kulcsattribútum nem lehet NULL). Hogy melyik megközelítés van, az rendszerfüggő. A NULL érték megjelenítésére eszközök az ODL-ben: értelmezési tartományon kívüli érték (film hossza -1), felsorolástípusnál külön megadva (enum szalagfajta {ff, sz, null}).