De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Objecttechnologie in databases

Verwante presentaties


Presentatie over: "Objecttechnologie in databases"— Transcript van de presentatie:

1 Objecttechnologie in databases
Database, Document and Content Management Objecttechnologie in databases Hoofdstuk 7

2 Logisch databaseontwerp
Overzicht Voorbeschouwing ODMG SQL3 Logisch databaseontwerp

3 Logisch databaseontwerp
Overzicht Voorbeschouwing Ontstaan Basisconcepten Objectgeoriënteerde databasetechnologie ODMG SQL3 Logisch databaseontwerp

4 Voorbeschouwing operationele modellen structurele traditionele
“inverted list”-model hiërarchisch model netwerkmodel andere operationele modellen semi-relationeel model relationeel model andere structurele modellen deductieve modellen spatio-temporele modellen “vage en onzekere” modellen andere “intelligente” modellen RM/T model object-relationeel model objectgeoriënteerde modellen andere semantische modellen traditionele structurele semantische verdere ontwikkelingen

5 Ontstaan Objectgeoriënteerd programmeerparadigma
Voorbeschouwing Ontstaan Objectgeoriënteerd programmeerparadigma Nood aan semantisch rijkere datamodellen

6 Basisconcepten Objecten, objecttypes, toestand en gedrag
Voorbeschouwing Basisconcepten Objecten, objecttypes, toestand en gedrag Er wordt in elke objectgeoriënteerde aanpak gewerkt met objecten die een complexe waarde hebben, die de toestand van het object wordt genoemd. In een systeem dat werkt met datatypes worden objecten opgebouwd via objecttypes, waarin zowel de complexe datastructuur van de toestand, als de specifieke operaties die voor het object gedefinieerd zijn (gedrag), door de softwareontwikkelaars zijn vastgelegd.

7 Voorbeschouwing Inkapseling van operatoren Operatoren worden gekenmerkt door een signatuur (de externe kenmerken) en een methode (de implementatie) Enkel de signatuur van de operatoren wordt zichtbaar gemaakt voor de gebruikers. Het verborgen houden van de methode voor de gebruikers wordt inkapseling genoemd.

8 Overerving en typehiërarchieën
Voorbeschouwing Overerving en typehiërarchieën Objectoriëntatie schrijft voor dat in nieuwe objecttypes een deel van de toestand- en gedragspecificaties van bestaande objecttypes kan worden overgenomen. De toestand en het gedrag van het nieuwe objecttype wordt dan bepaald door de combinatie van de overge- nomen en de eigen specificaties. Het mechanisme dat vastlegt hoe en onder welke voorwaarden deze combinatie gebeurt, wordt het overervingsmechanisme genoemd.

9 Operatoroverlading en -polymorfisme
Voorbeschouwing Operatoroverlading en -polymorfisme Bij objectoriëntatie laat het overervingsmechanisme het typisch toe om overgeërfde operatoren te herdefiniëren binnen het nieuwe objecttype en daarbij de naam van de operator te behouden. Dit heet operatoroverlading. Dezelfde operatornaam verwijst dan naar meerdere operatoren (en methodes).

10 Objectgeoriënteerde databasetechnologie
Voorbeschouwing Objectgeoriënteerde databasetechnologie Objectpersistentie Persistente objecten Naamgevingsmechanisme Bereikbaarheidsmechanisme

11 Objectidentiteit Voorbeschouwing
Elk object wordt geïdentificeerd door een unieke objectidentificator (OID) die door het dbms wordt aan- gemaakt en toegekend. Deze identificator kan niet worden gewijzigd (ook niet door het dbms). Een object- identificator wordt na verwijdering van het object liefst niet meer hergebruikt door het dbms.

12 Logisch databaseontwerp
Overzicht Voorbeschouwing ODMG Ontstaan Opbouw Het objectmodel ODL OQL SQL3 Logisch databaseontwerp

13 Ontstaan Opbouw Object Database Management Group
ODMG Ontstaan Object Database Management Group De facto standaard voor objectgeoriënteerde databases Opbouw Datadefinitietaal (ODL) Datamanipulatietaal (OQL) Taalbindingen naar C++, Smalltalk en JAVA Opmerking: “Impedance mismatch” is nog niet volledig weggewerkt

14 Het objectmodel Objecttypes en objecten ODMG
Constructie van objecttypes specificatie implemen- tatie literaaltype (structuur) interface (gedrag) klasse (structuur + gedrag) bouwsteen

15 ODMG Literaaltypes Basistypes
Systeemgedefinieerd vb. long, short, float, double, boolean, char, string Gebruikersgedefinieerd enumeratietypes met typeconstructor enum vb. enum kleur {rood, groen, blauw} Gestructureerde types Systeemgedefinieerd vb. date, time, timestamp, interval Gebruikersgedefinieerd met typeconstructor struct vb. struct punt {short x, short y}

16 Interfaces Bouwstenen voor het modelleren van gedrag. Klassen
ODMG Collectietypes met typeconstructor set, bag, list, array vb. set <punt> Interfaces Bouwstenen voor het modelleren van gedrag. Klassen Structuur Attributen Relaties (binaire verwantschappen tussen klassen) Gedrag Operatoren

17 ODMG Overerving supertype/subtype-verwantschappen
‘isa’-overerving . supertype is interface . subtupe is interface of klasse . meervoudige overerving is toegelaten . subtype “erft” enkel alle operatoren van de supertypes ‘extends’-overerving . supertype is klasse . subtype is klasse . meervoudige overerving is niet toegelaten . subtype “erft” alle attributen, relaties en operatoren van het supertype

18 ODMG Objecten en literalen Toestand Objectidentificator Objectnamen
Extenties en sleutels Integriteitrestricties worden geïmplementeerd via de operatoren

19 ODL Objectdefinitietaal
ODMG ODL Objectdefinitietaal Fysiek databaseontwerp gebeurt via de taalbindingen Voorbeeld Artiest Kunstwerk Schilderij is_geschilderd_door Eigenaar schilderde is_van bezit

20 ODMG struct adres {string straat, short nummer, string postcode, string plaats, string land} class Kunstwerk (extent kunstwerken key ID) {attribute string ID; attribute real waarde; relationship Eigenaar is_van inverse Eigenaar::bezit; boolean verifieer_waarde() raises(waarde_onbekend);} class Eigenaar (extent eigenaars key naam) {attribute string naam; attribute list<struct locatie {string type, adres locatie}> adressen; relationship set<Kunstwerk> bezit inverse Kunstwerk::is_van; void koop(in string ID) raises(niet_beschikbaar); void verkoop(in string ID) raises(niet_beschikbaar);} class Schilderij extends Kunstwerk (extent schilderijen key schilderijnaam, is_geschilderd_door) {attribute string schilderijnaam; attribute date periode; relationship Artiest is_geschilderd_door inverse Artiest::schilderde; boolean verifieer_waarde() raises(waarde_onbekend);}

21 Andere voorbeelden van overervingsspecificaties
ODMG class Artiest (extent artiesten key naam,voornaam,geboren) {attribute string naam; attribute string voornaam; attribute date geboren; attribute date gestorven; relationship list<Schilderij> schilderde inverse Schilderij::is_geschilderd_door;} Andere voorbeelden van overervingsspecificaties interface Werknemer {…} interface Loontrekker {…} class Persoon {…} class Patient extends Persoon {…} class Bediende extends Persoon : Werknemer, Loontrekker {…} class Manager extends Bediende {…}

22 OQL Objectmanipulatie gebeurt via de taalbindingen Verwant aan SQL
ODMG OQL Objectmanipulatie gebeurt via de taalbindingen Verwant aan SQL Toegangspunten tot de database Geef alle schilderijen. schilderijen Het resultaattype is set<Schilderij>. Geef het schilderij met objectnaam ‘Mooiste_schilderij’. Mooiste_schilderij Het resultaattype is Schilderij. Geef de naam van de schilder van het ‘Mooiste_schilderij’. Mooiste_schilderij.is_geschilderd_door.naam Gebruik van een padspecificatie. Het resultaattype is string

23 Iteratorvariabelen ODMG
Geef de namen van alle schilderijen waarvan de eigenaar ‘KMSK’ is. select s.schilderijnaam from s in schilderijen where s.is_van.naam = ‘KMSK’ Het resultaattype is bag<string>. Geef alle verschillende namen van schilderijen met eigenaar ‘KMSK’. select distinct s.schilderijnaam from s in schilderijen where s.is_van.naam = ‘KMSK’ Gebruik van ‘distinct’. Het resultaattype is set<string>. Geef de namen van alle schilderijen waarvan ‘KMSK’ de eigenaar is, alfabetisch geordend in stijgende volgorde. select s.schilderijnaam from s in schilderijen where s.is_van.naam = ‘KMSK’ order by s.schilderijnaam asc Gebruik van ‘order by’. Het resultaattype is list<string>.

24 ODMG Verifieer de waarde van alle schilderijen waarvan de eigenaar ‘KMSK’ is. select struct(naam:s.schilderijnaam, waarde:s.waarde, correct:s.verifieer_waarde()) from s in schilderijen where s.is_van.naam = ‘KMSK’ Gebruik van ‘struct’ en operatieoproep. Het resultaattype is bag<struct(naam:string, waarde:real, correct:boolean)>.

25 Aggregatieoperatoren
ODMG Aggregatieoperatoren Geef de gemiddelde waarde van alle schilderijen. avg(select s.waarde from s in schilderijen) Het resultaattype is real.

26 Werken met geordende collecties
ODMG Werken met geordende collecties Geef de naam en prijs van het duurste schilderij. first(select s.schilderijnaam, s.waarde from s in schilderijen order by s.waarde desc) De functie ‘first’ geeft het eerste element van een lijst terug. Het resultaattype is struct(schilderijnaam:string, waarde:real).

27 ODMG Groeperen Geef per eigenaar met meer dan 5 schilderijen de gemiddelde waarde van deze schilderijen. select naam, gemiddelde:avg(select p.waarde from p in partition) from s in schilderijen group by naam:s.is_van.naam having count(partition) > 5 Het resultaattype is set<struct(naam:string, gemiddelde:real)>.

28 Logisch databaseontwerp
Overzicht Voorbeschouwing ODMG SQL3 Ontstaan Gebruikersgedefinieerde datatypes Tuple-identiteit Inkapseling van operatoren Overerving Multimedia Logisch databaseontwerp

29 Gebruikersgedefinieerde datatypes
SQL3 Ontstaan Relationeel databasemodel Objectrelationeel databasemodel Gebruikersgedefinieerde datatypes Tupletypes Typeconstructor ‘row’ CREATE TYPE typenaam AS [ROW](componentspecificaties)

30 SQL3 Voorbeelden CREATE TYPE adrestype AS ( straat varchar(30), nummer integer, plaats varchar(30), postcode char(10), land varchar(30) ) CREATE TYPE eigenaartype AS ( naam varchar, adres adrestype )

31 Voorbeeld CREATE TABLE Eigenaar OF eigenaartype (PRIMARY KEY (naam))
SQL3 Aanmaken van tabellen CREATE TABLE tabelnaam OF typenaam Voorbeeld CREATE TABLE Eigenaar OF eigenaartype (PRIMARY KEY (naam))

32 Rijtypes SQL3 Typeconstructor ‘array’
type ARRAY [aantal_elementen] Voorbeeld CREATE TYPE Eigenaartype AS ( naam varchar, adres adrestype ARRAY[3])

33 Tuple-identiteit Tuple-identificator SQL3
Aanmaak: “DERIVED” vs. “SYSTEM GENERATED” Gebruik: Uitbreiding van de “CREATE TABLE”-instructie REF IS identificatornaam {DERIVED|SYSTEM GENERATED}

34 SQL3 Voorbeelden CREATE TABLE Eigenaar OF Eigenaartype REF IS eigenaar_id SYSTEM GENERATED CREATE TABLE Eigenaar OF Eigenaartype (REF IS eigenaar_id SYSTEM GENERATED, PRIMARY KEY(naam))

35 SQL3 Toevoegen van een referentie-attribuut attribuutnaam REF(naam_tupletype)[SCOPE(tabelnaam)] Voorbeelden CREATE TYPE Eigenaartype AS ( naam varchar, adres adrestype, eigenaar_id REF(Eigenaartype)) CREATE TABLE Eigenaar OF Eigenaartype VALUES FOR eigenaar_id ARE SYSTEM GENERATED

36 SQL3 CREATE TYPE Uitleentype AS ( van date, tot date, schilderij REF(Schilderijtype) SCOPE(Schilderij), ontlener REF(Eigenaartype) SCOPE(Eigenaar)) CREATE TABLE Uitleningen OF Uitleentype (PRIMARY KEY (van, schilderij)) Geef de naam van alle ontleners die een schilderij uit 1800 hebben ontleend. SELECT u.ontlener->naam FROM Uitleningen u WHERE u.schilderij->periode = 1800

37 Inkapseling van operatoren
SQL3 Inkapseling van operatoren Gebruikersgedefinieerde operatoren Implementatie SQL/PSM-taal METHOD operatornaam (argumentenlijst) RETURNS type; METHOD CREATE FUNCTION operatornaam (parameterlijst) RETURNS type FOR naam_tupletype AS [locale_declaraties] {functie_corpus}

38 Objectgeoriënteerde programmeertaal
SQL3 Objectgeoriënteerde programmeertaal METHOD CREATE FUNCTION operatornaam (parameterlijst) RETURNS type FOR naam_tupletype AS EXTERNAL NAME padnaam_voor_bestand LANGUAGE naam_taal

39 SQL3 Voorbeeld CREATE TYPE Uitleningtype AS ( van date, tot date, schilderij REF(Schilderijtype) SCOPE(Schilderij), ontlener REF(Eigenaartype) SCOPE(Eigenaar), METHOD bepaal_uitleenduur() RETURNS integer;) METHOD CREATE FUNCTION bepaal_uitleenduur() RETURNS integer FOR uitleningtype AS EXTERNAL NAME ‘/mydb/uitleenduur.class’ LANGUAGE ‘java’

40 Overerving Overerving bij tupletypes SQL3
CREATE TYPE typenaam UNDER (naam_supertype[,…]) AS [ROW](componentspecificaties) Voorbeeld CREATE TYPE HersteldSchilderijtype UNDER Schilderijtype AS ( Codehersteller varchar, datum date, korte_omschrijving varchar, METHOD bepaal_waarde() RETURNS real;)

41 Overerving bij de aanmaak van relaties
SQL3 Overerving bij de aanmaak van relaties CREATE TABLE naam_subtabel UNDER naam_supertabel Voorbeeld CREATE TABLE Europese_Schilderijen UNDER Schilderij; CREATE TABLE Nederlandse_Schilderijen UNDER Europese_Schilderijen; CREATE TABLE Belgische_Schilderijen UNDER Europese_Schilderijen; CREATE TABLE Brabantse_Schilderijen UNDER Nederlandse_Schilderijen;

42 SQL3 Multimedia Multimedia-objecten clob blob DML-operatoren XML

43 Logisch databaseontwerp
Overzicht Voorbeschouwing ODMG SQL3 Logisch databaseontwerp

44 Logisch databaseontwerp
Het omzettingsalgoritme voor objectgeoriënteerde databases 6 stappen: 1) Omzetting van reguliere entiteittypes, specialisaties en generalisaties 2) Omzetting van zwakke entiteittypes 3) Omzetting van binaire relatietypes 4) Omzetting van n-aire relatietypes waarbij n>2 5) Omzetting van categorieën 6) Toevoeging van operatoren

45 Logisch databaseontwerp
Stap 1: Omzetting van reguliere entiteittypes, specialisaties en generalisaties. Voor elk regulier entiteittype uit het diagram wordt een ODL-klasse aangemaakt. Kies een klassenaam. Maak een extentie aan voor de klasse. Alle attributen van het entiteittype worden toegevoegd aan de klasse. Maak voor de sleutelattributen een sleutel aan in de extentie van de klasse. Bij een klasse die correspondeerd met een subtype in het EER- diagram wordt de naam van de klasse van het corresponderende supertype toegevoegd in een ‘extends’-clausule.

46 Logisch databaseontwerp
Voorbeeld: class Artiest (extent artiesten key naam, geboren) {attribute struct naamtype {string voornaam, string achternaam} naam; attribute date geboren; attribute date gestorven; integer leeftijd() raises(niet_te_berekenen);} omzetting Artiest Naam Voornaam Achternaam Geboren Gestorven Leeftijd

47 Logisch databaseontwerp
Stap 2: Omzetting van zwakke entiteittypes. Optie 2a: Het zwak entiteittype wordt op dezelfde manier omgezet als een regulier entiteittype. Het identificerend relatietype wordt omgezet zoals een binair relatietype (zie stap 3). Optie 2b: Als het zwak entiteittype niet participeert in andere relatietypes dan zijn identificerend relatietype, kan het worden gemodelleerd als een attribuut van de klasse van zijn identificerend entiteittype. Het datatype is dan van de vorm: set < struct {…} > of list < struct {…} >

48 Logisch databaseontwerp
Voorbeeld: class Artiest (extent artiesten key naam, geboren) {attribute struct naamtype {string voornaam, string achternaam} naam; attribute date geboren; attribute date gestorven; integer leeftijd() raises(niet_te_berekenen); attribute set<struct schilderij {string snaam, real waarde, date periode}> schilderijen;} omzetting Artiest Naam Voornaam Achternaam Geboren Gestorven Leeftijd Schilderij maakt SNaam 1 N Periode Waarde

49 Logisch databaseontwerp
Stap 3: Omzetting van binaire relatietypes. Worden gemodelleerd via relaties of attributen met een klasse als type. Voeg een attribuut of relatie toe aan de klasse. Bij een kardinaliteitrestrictie ‘meerdere’ moet een collectietype worden opgenomen in de specificatie. Voeg de attributen van het relatietype toe. Dit kan door te werken met een gestructureerd type. Bij (1:N) en (M:N) relatietypes kan men als alternatief het relatietype modelleren door een extra klasse in te voeren. (zie stap 4).

50 Logisch databaseontwerp
Voorbeeld: Nummer Titel Auteur class Boek (extent boeken key nummer) {attribute integer nummer; attribute string titel; attribute string auteur; attribute struct ontlening {date ontleendatum, relationship Lezer is_ontleend_door inverse Lezer::heeft_ontleend} ontleningen;} Boek N Datum omzetting ontleent 1 class Lezer (extent lezers key naam) {attribute string naam; attribute string adres; relationship set<Boek> heeft_ontleend inverse Boek::ontleningen.is_ontleend_door;} Lezer Naam Adres

51 Logisch databaseontwerp
Stap 4: Omzetting van n-aire relatietypes waarbij n>2. Voor elk n-air relatietype waarbij n>2 wordt een nieuwe klasse aangemaakt. Kies een klassenaam. Maak een extentie aan voor de klasse. Voor elk van de betrokken entiteittypes wordt een attribuut toegevoegd die de klasse van het entiteittype als type heeft. Maak voor de sleutelattributen een sleutel aan in de extentie van de klasse. Deze bestaat uit de samenvoeging van deze attributen, tenzij er entiteittypes voorkomen waarvoor de kardinaliteitrestrictie 1 is. In dat geval moet bijkomend worden gecontroleerd of voldaan is aan de irreducibiliteitvoorwaarde. Alle attributen van het relatietype worden toegevoegd aan de klasse.

52 Logisch databaseontwerp
Voorbeeld: class Planningsonderdeel (extent planningsonderdelen key wordt_bezet, is_opgenomen_in) {attribute boolean bewaking; attribute Schilderij is_voor; attribute Tentoonstelling is_opgenomen_in; attribute Plaats wordt_bezet;} omzetting Naam Bewaking Code Schilderij Tentoonstelling Plaats plan- ning 1 N Periode Nummer Thema

53 Logisch databaseontwerp
Stap 5: Omzetting van categorieën. Beschouw de klasse die correspondeert met de categorie (deze is aangemaakt in stap 1). Modelleer de verwantschap tussen de categorie en elk van haar supertypes door gepaste relaties toe te voegen aan deze klasse en de klassen die corresponderen met de supertypes. Opmerking: Omdat elke entiteit van de categorie verwant is met juist één entiteit uit juist één van de supertypes mag geen van deze relaties gespecificeerd zijn over een collectietype.

54 Logisch databaseontwerp
Voorbeeld: class Eigenaar (extent eigenaars) {attribute string soort; relationship Persoon is_persoon inverse Persoon::is_eigenaar; relationship Bedrijf is_bedrijf inverse Bedrijf::is_eigenaar; relationship Museum is_museum inverse Museum::is_eigenaar;} Naam Voornaam Geboren Thema omzetting Persoon Eigenaar Bedrijf U Museum Soort ‘particulier’ ‘bedrijf’ ‘museum’ Plaats Belastingnr

55 Logisch databaseontwerp
Stap 6: Toevoeging van operatoren. Sleutels Operatoren Interfaces

56 Logisch databaseontwerp
Object-relationele mapping Omzettingsalgoritme voor relationele databases Bijkomende overwegingen Samengestelde attributen => tupletypes Meerwaardige attributen => rijtypes Specialisaties en generalisaties => tupletypes + overerving bij tupletypes Relatietypes => referentieattributen Gedragspecificaties => ingekapselde, gebruikersgedefinieerde operatoren


Download ppt "Objecttechnologie in databases"

Verwante presentaties


Ads door Google