Database, Document and Content Management DATABANKEN MAPPING EER-SCHEMA NAAR RELATIONEEL DATABANKSCHEMA
Logisch relationeel databankontwerp met behulp van een EER-diagram Overzicht Logisch relationeel databankontwerp met behulp van een EER-diagram Case studie Oefeningen
Logisch relationeel databankontwerp met behulp van een EER-diagram Overzicht Logisch relationeel databankontwerp met behulp van een EER-diagram Case studie Oefeningen
Relationeel databankontwerp Omzettingsalgoritme voor relationele databanken: stap 3 (omzetting van specialisaties en generalisaties) alle entiteitstypes uit een specialisatie met m subtypes {S1,S2, …,Sm} en supertype C zijn reeds in stap 1 of 2 omgezet naar basisrelaties Ri, 1im, en R (stel dat de attributen van R, de relatie die C voorstelt, {k,a1,a2,…,an} zijn, met k de (primaire) sleutel): optie 3a (meerdere relaties – supertype en subtypes) behoud alle bestaande basisrelaties breidt de relaties Ri, voor elk van de subtypes Si 1im, uit met een vreemde sleutel {k}, verwijzend naar de primaire sleutel van de relatie R; {k} is tevens primaire sleutel van de relaties Ri deze optie werkt voor elke specialisatie (totaal of partieel; disjunct of overlappend)
Relationeel databankontwerp optie 3b (meerdere relaties – enkel subtypes) breidt de relaties Ri, voor elk van de subtypes Si 1im, uit met de attributen {k,a1,a2,…,an} van de basisrelatie R; in alle relaties Ri wordt k de primaire sleutel verwijder R, de basisrelatie van het supertype C deze optie werkt enkel voor totale specialisaties met disjuncte subtypes
Relationeel databankontwerp optie 3c (één relatie met extra type-attribuut) breidt de basisrelatie R uit met de attributen van alle subtypes Si 1im, plus een extra attribuut {t}; k blijft de primaire sleutel k verwijder alle basisrelaties Ri 1im het attribuut t wordt het type-attribuut of discriminerend attribuut genoemd en geeft de subklasse aan waartoe een tuple behoort deze optie werkt voor enkel voor specialisaties met disjuncte subtypes (mogelijks veel NULL waarden !)
Relationeel databankontwerp optie 3d (één relatie met meerdere type-attributen) breidt de basisrelatie R uit met de attributen van alle subtypes Si 1im, plus extra attributen {t1,t2,…,tm}; k blijft de primaire sleutel k verwijder alle basisrelaties Ri 1im elk attribuut ti, 1im, is een Boolean type-attribuut dat aangeeft of een tuple behoort tot subtype Si deze optie werkt voor elke specialisatie (mogelijks veel NULL waarden !)
Relationeel databankontwerp stap 3’ (omzetting van meervoudige overervingen) beschouw een subtype S met meerdere supertypes Ci, 1im; in stap 1 of 2 werden deze omgezet naar basisrelaties R en Ri, 1im, met ki de (primaire) sleutels van de supertypes: optie 3a’ (meerdere relaties – supertypes en subtype) behoud alle bestaande basisrelaties breidt de relatie R, voor het subtype S, uit met vreemde sleutels {ki}, verwijzend naar de primaire sleutels van de relatie Ri; indien de relatie R nog geen primaire sleutel heeft, kan deze worden gevormd door de combinatie van alle vreemde sleutels {ki}, ofwel door het toevoegen van een nieuw sleutelattribuut als surrogaatsleutel
Relationeel databankontwerp optie 3b’ (één relatie) breidt de relatie R, voor het subtype S, uit met de attributen van alle supertypes Ci indien de relatie R nog geen primaire sleutel heeft, kan deze worden gevormd door de combinatie van alle sleutelattributen {ki} van de supertypes Ci, ofwel door het toevoegen van een nieuw sleutelattribuut als surrogaatsleutel verwijder alle basisrelaties Ri 1im
Relationeel databankontwerp stap 4 (omzetting van categorieën) gewoonlijk hebben de definiërende supertypes van een categorie verschillende primaire sleutels; hierom dient er een nieuw sleutelattribuut k’, de surrogaatsleutel, gecreëerd te worden voor relatie R, de relatie die correspondeert met de categorie; k’ is de primaire sleutel van R voeg k’ als vreemde sleutel toe aan de relaties die corresponderen met de definiërende supertypes van de categorie opmerking: voor entiteiten van de definiërende superklassen die zelf geen element zijn van de categorie is de waarde van de vreemde sleutel NULL opmerking: een gedragspecificatie is nodig om af te dwingen dat een instantie van een categorie overeenkomt met een instantie van slechts één van de supertypes
Logisch relationeel databankontwerp met behulp van een EER-diagram Overzicht Logisch relationeel databankontwerp met behulp van een EER-diagram Case studie Oefeningen
Case studie: softwarefirma naam werknemernr gebruikerID Ext_Gebr. Int_Gebr. bedrijf productnr N Product U telefoon beschr. 1 Gebruiker adres bezit van 1 e-mail door rapportnr N versienr N Versie 1 omschr. datum Rapport datum 1 status over d prioriteit voor N M registratienr Int_Rapport Ext_Rapport N 1 Registratie N over datum
Case studie: softwarefirma INT_RAPPORT GEBRUIKER telefoon, adres, email PRODUCT productnr, beschrijving REGISTRATIE regnr, datum EXT_GEBR gebruikersnaam, bedrijf INT_GEBR werknemernr RAPPORT rapportnr, omschr, status, prioriteit, datum EXT_RAPPORT , productnr, versienr FK (productnr, versienr): VERSIE , gebrID (FK: GEGRUIKER) , gebrID (FK: GEGRUIKER) stap 3 stap 1 stap 6 stap 4 stap 2 stap 7 , gebrID , productnr, versienr, gebrID FK (productnr, versienr): VERSIE; FK (gebrID): GEBRUIKER rapportnr, omschr, status, prioriteit, datum , regnr, gebrID FK (regnr): REGISTRATIE; FK (gebrID): GEBRUIKER rapportnr, omschr, status, prioriteit, datum VERSIE productnr (FK: PRODUCT), versienr, datum REG_SOFTW gebruikersnaam, bedrijf, regnr (FK: REGISTRATIE) FK (gebruikersnaam, bedrijf): EXT_GEBR
Case studie: softwarefirma Gedragspecificatie (pseudo-code): Integriteitsrestricties: CHECK (FORALL GEBRUIKER.gebrID: (SELECT count(*) FROM INT_GEBR WHERE INT_GEBR.gebrID = GEBRUIKER.gebrID) + (SELECT count(*) FROM EXT_GEBR WHERE EXT_GEBR.gebrID = GEBRUIKER.gebrID) = 1) CHECK (VERSIE.datum >= VERSIE2.datum WHERE VERSIE.productnr = VERSIE2.productnr AND VERSIE.versienr > VERSIE2.versienr) CHECK (REGISTRATIE.datum >= VERSIE.datum) CHECK (INT_RAPPORT.datum >= VERSIE.datum) CHECK (EXT_RAPPORT.datum >= REGISTRATIE.datum) CHECK (INT_RAPPORT door INT_GEBR); CHECK (EXT_RAPPORT door EXT_GEBR)
Logisch relationeel databankontwerp met behulp van een EER-diagram Overzicht Logisch relationeel databankontwerp met behulp van een EER-diagram Case studie Oefeningen
FamNaam Voornaam Naam Adres Geslacht Lid Telefoonnummer o Orkestlid Koorlid Bestuurslid Functie Soort “blaas” “strijk” “slag” Naam Titel N speelt M voor Stem Partituur partID Instrument Componist o d Orkestpartituur Koorpartituur Blaas Strijk Slag
Oefeningen: databank voor koor en orkest Relationeel schema: LID (FamNaam, VNaam, Adres, Geslacht, Tel.) ORKESTLID (FamNaam, VNaam) FK(FamNaam, VNaam): LID KOORLID (FamNaam, VNaam) FK(FamNaam, VNaam): LID BESTUURSLID (FamNaam, VNaam, Functie) FK(FamNaam, VNaam): LID INSTRUMENT (INaam, Soort) PARTITUUR (Titel, Componist, Orkest, Koor) SPEELT (FamNaam, VNaam, INaam) FK(FamNaam, VNaam): ORKESTLID, FK(INaam) : INSTRUMENT STEM (FamNaam, VNaam, Stem) FK(FamNaam, VNaam): KOORLID VOOR (INaam, Titel, Componist) FK(INaam): INSTRUMENT, FK(Titel, Componist): PARTITUUR
Oefeningen: databank voor koor en orkest Gedragspecificatie: Integriteitsrestricties: CHECK (Orkest = TRUE OR Koor = TRUE) CHECK (PARTITUUR.Orkest = TRUE WHERE PARTITUUR.(Titel, Componist) = VOOR .(Titel, Componist))
Uitzending Zender M N N Medewerker 1 M ZendEenheid N Zelfst. Programma commentaar naam code id tijdstip Uitzending Zender M N naam id N afkorting Medewerker 1 omschrijving ISAN M ZendEenheid titel genre rol duur ISAN N Zelfst. Programma U Programma d Aflevering Serie ID N 1 genre titel ISANvolgnr subtitel ISANbasis
Oefeningen: televisiemaatschappij Relationeel schema: ZENDER (Code, Naam, Afkorting) UNIQUE (Naam), UNIQUE (Afkorting) MEDEWERKER (ID, Naam) PROGRAMMA (ProgrammaID, genre, titel, ISAN(basis), eenheidID) UNIQUE (ISAN(basis)) AFLEVERING (ISANbasis, ISANvolgnr, subtitel, eenheidID (FK: ZENDEENHEID)) FK (ISANbasis): PROGRAMMA.ISAN(basis) ZENDEENHEID (eenheidID, type, omschrijving, duur) UITZENDING (ID, commentaar, tijdstip, eenheidID (FK: ZENDEENHEID)) UITZENDING_ZENDER (UitzendingID, ZenderCode) FK (UitzendingID): UITZENDING; FK (ZenderCode): ZENDER PROGRAMMAMEDEWERKER (ProgrammaID, MedewerkerID, rol) FK (ProgrammaID): PROGRAMMA; FK (MedewerkerID): MEDEWERKER
Oefeningen: televisiemaatschappij Gedragspecificatie: Afgeleide attributen (bv. ISAN code): CREATE PROCEDURE ZendEenheid_ISAN (ID IN integer, ISAN OUT integer) AS BEGIN IF ID IN (SELECT eenheidID FROM Aflevering) THEN ISAN = (SELECT ISANbasis+ISANvolgnr FROM Aflevering WHERE eenheidID = ID) ELSEIF ID IN (SELECT eenheidID FROM Programma) THEN ISAN = (SELECT ISAN(basis) FROM Programma WHERE eenheidID = ID) ELSE raise ZendEenheidOnbekend ENDIF END;
Oefeningen: spoorwegmaatschappij Het spoorwegnetwerk bestaat uit een verzameling knooppunten die met elkaar verbonden zijn via spoorlijnen. Elk knooppunt heeft een uniek nummer maar kan ook geïndentificeerd worden via de geografische ligging (geografische lengte- en breedtegraad). Een typisch knooppunt is een station, maar ook onderhoudsplaatsen worden als knooppunten beschouwd. Van elk station wordt de (unieke) naam, en het aantal perrons bijgehouden. Voor elke onderhoudsplaats moet men bijhouden welke soorten onderhoudswerken men er kan uitvoeren (vb. tanken, reinigen, herstellingen, ...). Een knooppunt kan zowel station als onderhoudsplaats zijn. In een enkel geval is een knooppunt geen van beide (i.e. een splitsing). Een verbinding wordt geïdentificeerd aan de hand van een begin- en een eindknooppunt. Verder wordt ook de afstand en de maximale snelheid op de verbinding bijgehouden. Merk op dat een verbinding gericht is, een verbinding van A naar B is niet gelijk aan een verbinding van B naar A. De diensten van de spoorwegmaatschappij bestaan erin om op elk vastgesteld tijdstip (datum en uur van vertrek) een rit volgens het bijhorend vastgelegde traject uit te voeren. Een traject, dat wordt aangeduid met een uniek nummer, legt vast welke verbindingen hierbij achtereenvolgens worden gevolgd. Voor elk van de op dit traject gelegen verbinding wordt relatieve vertrek en aankomsttijd (t.o.v. van de aanvang van de rit) bijgehouden. Om deze diensten te verzorgen beschikt de maatschappij over een hoeveelheid rollend materieel dat wordt ingedeeld in drie categorieën: locomotieven, goederenwagons en passagiersrijtuigen. Elk voertuig krijgt binnen zijn categorie een uniek nummer. Naast de algemene kenmerken zoals lengte en gewicht, worden voor elke categorie een aantal specifieke kenmerken bijgehouden. Voor locomotieven: motortype (diesel of elektrisch) en het vermogen. Voor goederenwagons: vrachttype en tonnage. Voor passagiersrijtuigen: de klasse en het aantal passagiers. Er wordt bijgehouden welke voertuigen (zullen) worden ingezet voor een bepaalde rit.
voor van M N N 1 Rijtuig Rit Traject cat M d “L” “P” Locomotief tnr lengte cat voor van M N N 1 id Rijtuig Rit Traject nr cat gewicht vertrek M d “L” “P” datum uur Locomotief Passagiers “G” rel. vertrek via Goederen rel. aankomst PK klasse zitjes brandstof van N vracht tonn. 1 N knr Verbinding Knooppunt lengtegr ligging naar 1 N breedtegr o km km/h Station Onderhoudspl soort onderhoud naam perrons .
Oefeningen: spoorwegmaatschappij Relationeel schema: RIJTUIG (cat, nr, lengte, gewicht) LOCOMOTIEF (cat, nr, PK, brandstof) FK (cat, nr): RIJTUIG GOEDERENWAGON(cat, nr, vracht, tonnage) FK (cat, nr): RIJTUIG PASSAGIERSWAGON (cat, nr, klasse, zitjes) FK (cat, nr): RIJTUIG TRAJECT (Tnr) RIT (Tnr (FK: TRAJECT), datum, uur) KNOOPPUNT (Knr, lengtegr, breedtegr) UNIQUE (lengtegr, breedtegr) STATION (Knr (FK: KNOOPPUNT), naam, perrons) UNIQUE (naam) ONDERHOUDSPLAATS (Knr (FK: KNOOPPUNT)) VERBINDING (van (FK: KNOOPPUNT), naar (FK: KNOOPPUNT), km, km/h) VIA (traject (FK: TRAJECT), van, naar, rel_vertrek, rel_aankomst) FK (van, naar): VERBINDING VOOR (Tnr, datum, uur, cat, nr) FK (Tnr, datum, uur): RIT; FK (cat, nr): RIJTUIG ONDERHOUD (Knr (FK: ONDERHOUDSPLAATS), TypeOnderhoud)