A relációs adatmodell E. Codd vezette be: 1970 A Relational Model of Data for Large Shared Data Banks. Communications of ACM, 13(6). 377-387. 1982 Relational Databases: A Practical Foundation for Productivity. Communication of ACM, 109-117. • legelterjedtebb adatmodell napjainkban • népszerőségét annak köszönheti, hogy nagyon egyszerő deklaratív nyelvvel rendelkezik az adatok kezelésére, illetve lekérdezésére. értékorientált, ez ahhoz vezet, hogy a relációkon értelmezett mőveletek eredményei szintén relációk.
A relációs adatmodell értelmezése Legyenek D1 , D2 ,K, Dn halmazok. R egy reláció a D1 , D2 ,K, Dn halmazokon, ha R ⊆ D1 × D2 × K × Dn • Relációs adatmodell szempontjából Di az Ai attribútum értékeinek tartománya (doméniuma). • Di lehet egész számok halmaza, karaktersorok halmaza, valós számok halmaza stb. • n a reláció foka.
Egy ilyen relációt táblázatban ábrázolhatunk: ... Aj ... ... a1j ...
An a1n
... aij ...
ain
rm am1 ... amj ...
amn
R A1 r1 a11 M
ri ai1 M
ahol a ∈D . • a táblázat sorai a reláció elemei. • a tábla megnevezést is használják a reláció helyett. ij
j
Jelöljés: R (A1, A2,..., An). A reláció nevét és a reláció attribútumainak a halmazát együtt relációsémának nevezzük. példa: Diákok (BeiktSzám, Név, SzületésiDátum, CsopKod) reláció: BeiktSzám Név 67908 Nagy Ödön 68799 Kiss Csaba 68820 Papp József
SzületésiDátum 1975-DEC-13 1971-APR-20 1973-JAN-6
CsopKod 512 541 521
példa: Könyvek (ISBN, Szerzı, Cím, Kiadó, KiadÉv) reláció: ISBN 35463526 45344534
Szerzı Cím C. J. Date An Introduction to Database Systems Paul The Science of Database Helman
Kiadó AddisonWesley IRWIN
KiadÉv 2005 1994
A relációs adatmodell tulajdonságai 1. A tábla nem tartalmazhat két teljesen azonos sort, azaz két sor legalább egy attribútum konkrét értékében el kell hogy térjen egymástól. 2. Kulcs értelmezése: egy S attribútumhalmaz az R reláció kulcsa, ha: – R relációnak nem lehet két sora, melynek értékei megegyeznek az S halmaz minden attribútumára. – S egyetlen valódi részhalmaza sem rendelkezik a) tulajdonsággal. Példa: Diákok esetén BeiktSzám. • több attribútum is lehet, amelyek értéke egyedi minden egyes elıfordulásra nézve, akkor több kulcsjelöltrıl beszélhetünk; • kulcsjelöltek közül egyet elsıdleges kulcsnak kell kijelölni.
• ha nincs olyan tulajdonság, amelynek értéke egyedi lenne, akkor több tulajdonság értéke együtt fogja jelenteni az elsıdleges (összetett) kulcsot. Az 1. tulajdonság ⇒ mindig kell legyen elsıdleges kulcs, ha más nem, a teljes sor mindig egyedi. • Elsıdleges kulcs értéke soha nem lehet null vagy üres. 3. A táblázat sorainak a sorrendje lényegtelen. 4. A táblázat oszlopaira vagyis az attribútumokra a nevükkel hivatkozunk, tehát két attribútumnak nem lehet ugyanaz a neve. 5. A táblázat oszlopainak a sorrendje lényegtelen.
Relációs adatbázis séma meghatározása Relációs adatbázis séma: az adatbázist alkotó relációk sémájának az összessége. A relációkban tárolt konkrét értékek alkotják a relációs adatbázist. Egy helyes relációs adatbázis sémát több módszerrel is kaphatunk: • az egyed/kapcsolat diagramot átírjuk relációsémákká, • egy létezı relációs adatbázis sémát normalizálás segítségével normál formára hozzuk, • Object Definition Language segítségével megtervezett objektum-orientált adatbázis szerkezetet átírunk relációsémákká • UML
Az egyed/kapcsolat diagramok átírása relációs modellé 1. Egyedhalmaz ⇒ reláció. (egyedhalmaz attribútumai a reláció attribútumai lesznek) 2. Kapcsolat ⇒ reláció (kulcsok ⇒ attribútumok) 3. Közös kulcsú relációk összevonása.
2. Kapcsolat ⇒ reláció (kulcsok ⇒ attribútumok) • Legyen egy kapcsolat az E1, E2,..., Em egyedhalmazok között. • Legyenek K1, K2,..., Km az E1, E2,..., Em kulcs attribútumai, ahol K ∈E . • Relációs modell relációnak attribútumai a K1, K2,..., Km lesz. • Ha a kapcsolatokhoz attribútumokat rendeltünk az E/K diagramon, a relációs modell relációjában a kulcsok mellett a kapcsolat attribútumai is szerepelnek. i
i
3. Közös kulcsú relációk összevonása: • Ha két relációnak van egy közös kulcsjelöltje, a két relációt összevonjuk és helyettesítjük egy relációval. • Elınyök: kevesebb helyet foglal a reláció, a lekérdezések hamarabb megválaszolhatók, nincsenek annyira szétdarabolva az összetartozó adatok.
példa: nagykereskedı cég egyszerősített adatbázisa. 1. Egyedhalmaz ⇒ reláció. Az egyedhalmazok kulcsai a relációk kulcsai lesznek, és ezt aláhúzással jelöljük a relációs modell relációi esetében is. (1) (2) (3) (4) (5) (6) (7) (8) (9)
Alkalmazottak (SzemSzám, Név, Fizetés) Managerek (SzemSzám) Részlegek (RészlegID, Név, Helység) Szállítók (SzállID, Név, Helység, UtcaSzám) ÁruCsoportok (CsopID, Név) Áruk (ÁruID, Név, MértEgys, MennyRakt) Vevık (VevıID, Név, Helység, UtcaSzám, Mérleg) Szerzıdések (SzerzıdID, Dátum, Részletek) Tételek (TételID, Dátum)
2. Kapcsolat ⇒ reláció (kulcsok ⇒ attribútumok) (10) (11) (12) (13) (14) (15) (16) (17)
Dolgozik(SzemSzám, RészlegID) Irányít (SzemSzám, RészlegID) Árul (CsopID, RészlegID) Tartozik (CsopID, ÁruID) Szállít (SzállID, ÁruID, Ár) Elhelyez (VevıID, SzerzıdID) Tartalmaz (SzerzıdID, TételID) Szerepel (TételID, ÁruID, RendMenny, SzállMenny)
• nagyon fontos, hogy a kapcsolatokból kapott relációk kulcs attribútumait helyesen határozzuk meg • egy relációnak több kulcsjelöltje is lehet, a tervezı dönti el, hogy melyiket választja. Ha a kapcsolat bináris (E1 és E2 egyedhalmazok között) – E1 –nek K1 a kulcsa, – E2 –nek K2 a kulcsa,
Irányelvként elfogadhatjuk a következıket: – 1:1 típusú kapcsolatok esetén lehet a K1 vagy a K2 is kulcsjelölt. Példa: a Managerek és Részlegek egyedhalmazok közötti Irányít kapcsolat esetén a SzemSzám és a RészlegID is lehet kulcs. – 1: n típusú kapcsolat E1 és E2 (itt az n) között, akkor a kapcsolatnak megfelelı reláció kulcsjelöltje a K2. Példa: a Részlegek és Alkalmazottak egyedhalmazok között a Dolgozik kapcsolat 1: n típusú, a Dolgozik relációnak a relációs adatmodellben a kulcsa a SzemSzám. – n: m típusú kapcsolat áll fenn E1 és E2 egyedhalmazok között, akkor a kapcsolatnak megfelelı relációnak kulcsjelöltje összetett kulcs lesz, a K1 és a K2 egyesítése. Példa: a Szállítók és Áruk közötti Szállít kapcsolat n: m típusú, így a kulcs összetett, SzállID és ÁruID együtt.
• az E/K „az_egy” specializáló kapcsolataihoz nem készítünk relációkat, • az általános egyedhalmazhoz egy olyan relációt készítünk, amelynek a sémája tartalmazza az egyedhalmaz attribútumait. • minden alosztályban megismételjük az általános egyedhalmaz kulcsát. • tehát a specializáló kapcsolatokat burkolt formában az a tény fejezi ki, hogy a kapcsolódó egyedeknek ugyanazok a kulcsértékei. Példa: a Managerek reláció fogja azon alkalmazottak személyi számait tárolni, akik managerek. A személyi számukat tároljuk, biztosít minket arról, hogy a managerek is alkalmazottak, megtaláljuk az Alkalmazottak relációban a személyi szám segítségével.
3. Közös kulcsú relációk összevonása: • Alkalmazottak és Dolgozik közös kulcsa SzemSzám, Alkalmazottak relációt kiegészítjuk a RészlegID-al. Alkalmazottak (SzemSzám, Név, Fizetés, RészlegID)
• Hasonlóan: ÁruCsoportok (CsopID, Név, RészlegID) Áruk (ÁruID, Név, MértEgys, MennyRakt, CsopID) Szerzıdések (SzerzıdID, Dátum, Részletek, VevıID) Tételek (TételID, Dátum, SzerzıdID)
az
• Részlegek és Irányít közös kulcsa a RészlegID, a Részlegek relációt kiegészítjük a managere személyi számával, átkereszteljük ManSzemSzám-á Részlegek (RészlegID, Név, Helység, ManSzemSzám)
Kérdés: - ha az egyik részlegnek épp nincs managere a ManSzemSzám attribútumnak nullértéket használunk. • A NULL érték nem 0 (zéró), nem üres karaktersor, hanem egy speciális érték.
• Az összetett kulcsú Szállít és Szerepel nem vonható össze más relációkkal, mivel ezek m: n típusú kapcsolatokat modellálnak. • Az összevont relációkon kívül még megmaradt relációk ahhoz, hogy az adatbázisséma teljes legyen a közös kulcsú relációk összevonása után: Managerek (SzemSzám) Szállítók (SzállID, Név, Helység, UtcaSzám) Vevık (VevıID, Név, Helység, UtcaSzám, Mérleg) Szállít (SzállID, ÁruID, Ár) Szerepel (TételID, ÁruID, RendMenny, SzállMenny)
A Managerek relációt esetleg elhagyhatnánk, ha nincs olyan managerünk, aki nem irányít részleget. Ha minden manager irányít egy részleget, akkor megtaláljuk ıket a Részlegek relációban.