Objecttechnologie in databases

Slides:



Advertisements
Verwante presentaties
Stilstaan bij parkeren Dat houdt ons in beweging
Advertisements

De elektronische verzamelaanvraag Ruben Fontaine Markt- en Inkomensbeheer – dienst Aangiftes.
‘SMS’ Studeren met Succes deel 1
NEDERLANDS WOORD BEELD IN & IN Klik met de muis
WAAROM? Onderzoek naar het meest geschikte traject voor de verlenging tot in Sint-Niklaas van het bestaande fietspad naast de Stekense Vaart en de Molenbeek.
1 Resultaten marktonderzoek RPM Zeist, 16 januari 2002 Door: Olga van Veenendaal, medew. Rothkrans Projectmanagement.
November 2013 Opinieonderzoek Vlaanderen – oktober 2013 Opiniepeiling Vlaanderen uitgevoerd op het iVOXpanel.
Uitgaven aan zorg per financieringsbron / /Hoofdstuk 2 Zorg in perspectief /pagina 1.
1 COVER: Selecteer het grijze vlak hiernaast met rechtsklik & kies ‘change picture’ voor een ander beeld of verwijder deze slide & kies in de menubalk.
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
STAPPENPLAN GRAMMATICUS.
Ronde (Sport & Spel) Quiz Night !
Entiteit-Relatie Model
Module 7 – Hoofdstuk 5 (4) SQL – voorwaarden aan groepen en meerdere tabellen.
Een Concert van het Nederlands Philharmonisch Orkest LES 4 1.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Het selecteren van data uit meerdere gekoppelde tabellen
Van Nul naar Drie Normaliseren.
<Mdl01 hoorcollege 1>
Databases I Van EER naar relationeel
Een optimale benutting van vierkante meters Breda, 6 juni 2007.
Kb.1 Ik leer op een goede manier optellen en aftrekken
Nooit meer onnodig groen? Luuk Misdom, IT&T
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Hoofdstuk 6: Controle structuren
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
FOD VOLKSGEZONDHEID, VEILIGHEID VAN DE VOEDSELKETEN EN LEEFMILIEU 1 Kwaliteit en Patiëntveiligheid in de Belgische ziekenhuizen anno 2008 Rapportage over.
Elke 7 seconden een nieuw getal
Softwarepakket voor het catalogeren en determineren van fruitsoorten
1 introductie 3'46” …………… normaal hart hond 1'41” ……..
Relationele databases: Fysiek databaseontwerp en SQL
Oefeningen F-toetsen ANOVA.
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
TUDelft Knowledge Based Systems Group Zuidplantsoen BZ Delft, The Netherlands Caspar Treijtel Multi-agent Stratego.
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
1 Voorwaarden hergebruik Modulair ontwerp Low coupling High cohesion.
Inleidend probleem Data structuur (hiërarchie van classes)
13 maart 2014 Bodegraven 1. 1Korinthe Want gelijk het lichaam één is en vele leden heeft, en al de leden van het lichaam, hoe vele ook, een lichaam.
Afrika: Topo nakijken en leren.
User management voor ondernemingen en organisaties
ribwis1 Toegepaste wiskunde – Differentieren Lesweek 7
Hoofdstuk 3: Inleiding tot Java Applets
Relationele databases: Logisch databaseontwerp
Datamodellen en databasemodellen
Hartelijk welkom bij de Nederlandse Bridge Academie Hoofdstuk 9 Het eerste bijbod 1Contract 1, hoofdstuk 9.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
De financiële functie: Integrale bedrijfsanalyse©
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
12 sept 2013 Bodegraven 1. 2  vooraf lezen: 1Kor.7:12 t/m 24  indeling 1Korinthe 7  1 t/m 9: over het huwelijk  10 t/m 16: over echtscheiding  16.
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
1 Week /03/ is gestart in mineur De voorspellingen van alle groten der aarden dat de beurzen zouden stijgen is omgekeerd uitgedraaid.
LauwersCollege Buitenpost Informatica
7 Databases. SAMENGESTELDE VOORWAARDEN 1 Wat is het adres van Odile Goossens? SELECT adres, woonplaats FROM leden WHERE naam = ‘Goossens’ AND voornaam.
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Hoofdstuk 6 – Objectgeoriënteerd Programmeren: Overerving
23 mei 2013 Bodegraven vanaf hoofdstuk 6: hoofdst.1: de wijsheid van de wereld hoofdst.2: de wijsheid van God hoofdst.3: Gods akker en Gods bouwwerk.
Vakgroep Telecommunicatie en Informatieverwerking 1 Relationele databases: Het relationeel databasemodel Hoofdstuk 4 Database, Document and Content Management.
Hoofdstuk 11 Databasemanagementsystem. hoofdstuk 112 STROKENDIAGRAMMEN llnrvoornaamtussenvachternaamstraathuisnummerpostcodeplaatstelefoongeslachtgebdatumklas.
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 2 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Week 6 BIMAIV03 les B1. DML en DDL ata D anipulation M anguage L ata D efinition D anguage L.
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
SQL Les 7 24 February 2019.
Transcript van de presentatie:

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

Logisch databaseontwerp Overzicht Voorbeschouwing ODMG SQL3 Logisch databaseontwerp

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

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

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

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.

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.

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.

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

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

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.

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

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

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

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}

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

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

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

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

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);}

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 {…}

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

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

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

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

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

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

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

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

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 )

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

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

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

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

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

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

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}

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

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’

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;)

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;

SQL3 Multimedia Multimedia-objecten clob blob DML-operatoren XML

Logisch databaseontwerp Overzicht Voorbeschouwing ODMG SQL3 Logisch databaseontwerp

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

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.

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

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 {…} >

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

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

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

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.

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

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.

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

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

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