Antwoorden Databases - VTK Gent

advertisement
Antwoorden op de vraagjes in het boek
Hallo,
Ik heb dit bestand samengesteld op basis van volgende forumthread:
http://vtk.ugent.be/forum/viewtopic.php?
f=124&t=26719&sid=fc1e24c0443c31c619539150e30fd59c
Mijn antwoorden zijn wel soms iets uitgebreider of volledig 'from scratch' geschreven als ik het
antwoord op het forum niet voldoende vond. Som heb ik ook een korter antwoord geschreven dan
in de thread als ik vond dat een korter antwoord reeds voldoende zei.
Ik garandeer trouwens ook niet dat deze antwoorden 100% correct zijn en af en toe ontbreekt er
misschien ook wel iets. Bovendien heb ik het gevoel dat de antwoorden op hoofdstuk 7 en 8 iets
duidelijker kunnen zijn. Oh ja, ik garandeer ook niet de correctheid van de spelling, want mijn
spellcheck werkt hier niet deftig en dt-regeltjes zijn geleden sinds het middelbaar. :)
Feel free trouwens om dit bestand aan te passen of aan te vullen als je denkt dat het beter kan.
Johan
Datum laatste aanpassing: 26/01/11
Hoofdstuk 1: Databases en databasesystemen
1
Wat is het verschil tussen data en informatie? Waarom is het nuttig om binnen de context
van databases een onderscheid te maken tussen beide?
Data zijn gegeven feiten zoals bv. cijfers, getallen, karakters, symbolen en woorden. Informatie
daarentegen verwijst ook nog naar de betekenis van de gegevens.
"De Mona Lisa bevindt zich in het Louvre." is zo een voorbeeld van informatie, waarbij "Mona Lisa"
en "Louvre" gegevens zijn. Dit onderscheid is belangrijk omdat computersystemen enkel data
efficiënt kunnen beheren.
2
Wat is een database, een databasesysteem en een databasemanagementsysteem?
Een database is een collectie van persistente data. Een databasesysteem is een
computersysteem opgezet voor het beheer van zo databases.
Het databasemanagementsysteem is dan de softwarecomponent van het databasesysteem die
instaat voor het uiteindelijke beheer van de databases.
3
Wat
zijn
de
voordelen
van
een
'drielagen'-architectuur
databasemanagementsysteem? Welke lagen worden daarbij onderscheiden?
voor
een
Het voordeel van een 'drielagen'-architectuur is dat ze dataonafhankelijk zijn van elkaar. Dit wil
zeggen dat de beschrijving van data in een bepaalde laag aangepast kan worden zonder dat dit
impact heeft op de andere lagen, waardoor databasesystemen makkelijker onderhouden kunnen
worden.
Bovendien moeten dankzij de interne laag de fysieke opslagdetails niet gekend zijn door de
gebruikers en kan dankzij de externe laag bepaald worden hoe de data aan elke gebruiker
gepresenteerd wordt d.m.v. views.
We onderscheiden drie lagen: de interne laag, de logische laag en de externe laag.
4
Uit welke componenten bestaat een databasesysteem?
Er zijn drie hoofdcomponenten, namelijk de hardware, de data en de software.
De hardwarecomponent bestaat voornamelijk uit de CPU om de software-instructies uit te
kunnen voeren en computergeheugen om de database op te kunnen slaan (secundair geheugen)
en te bufferen (primair geheugen).
De data bestaat uit records bestaande uit een of meerdere velden van data die vastgelegd zijn in
het recordtype van het record. De records worden in het secundair geheugen opgeslagen in de
vorm van bestanden. Data van eenzelfde database vormt een geïntegreerd geheel.
De softwarecomponent bestaat uit het databasemanagementsysteem dat de databases op een
databasesyteem beheert, toepassingsprogramma's zodat gebruikers kunnen interageren met de
database, tools om databasebeheertaken eventueel te automatiseren en vergemakkelijken en
communicatiesoftware om te kunnen communiceren met de servers als de eigenlijk database op
andere machines staat dan de client.
5
Schets de geheugenhiërarchie. Bespreek de rol van de verschillende types geheugen die
hierin voorkomen met betrekking tot databases. Waarom zijn de databasebuffers belangrijk?
Eerst en vooral heb je het primair geheugen is het snelste geheugen en bestaan uit statisch en
dynamisch RAM-geheugen. Het statisch RAM-geheugen wordt gebruikt als cachegeheugen om
uitvoering van programma's te versnellen terwijl het dynamisch geheugen gebruikt wordt voor
tijdelijke opslag van data en programmacode.
Ook worden minstens twee databasebuffers opgezet in het primair geheugen zodat de inhoud
van de ene buffer kan ingelezen of weggeschreven worden terwijl de CPU de data uit de andere
buffer verwerkt. Dit komt de prestaties van het databasesysteem ten goede.
Het primair geheugen is echter volatiel en relatief klein. Daarom bestaat er ook het niet-volatiele,
veel grotere (maar ook veel tragere) secundair geheugen dat instaat voor de eigenlijke opslag
van de database. De CPU kan echter niet rechtstreeks de data uit dit geheugen verwerken,
waardoor het eerst naar de databasebuffers dient gekopieerd te worden. Voorbeelden van
secundair geheugen zijn bv. magneetschijven en cd's of dvd's.
Eventueel kunnen dan ook nog magneetbandgeheugens gebruikt worden als een soort van
tertiair geheugen dat dan dient voor archieven en back-up.
6
Wat zijn databaserecords? Welke types kan men onderscheiden? Hoe kunnen deze
worden beschreven?
Records zijn een of meerdere velden die data bevatten.
Recordtypes kunnen ofwel een vaste ofwel een variabele lengte hebben. Dit laatste komt voor
als een van de recordvelden een datatype heeft van variabele lengte, een of meer recordvelden
meerwaardig is of een of meer velden van het recordtype optioneel is.
Recordtypes met een vaste lengte worden beschreven door hun file header om aan te geven waar
elk deel van de record is opgeslagen. Voor variabele lengte dienen er speciale separatorkarakters
gebruikt te worden in de record zelf om het einde van een veld, waarde of de record zelf aan te
geven.
7
Waartoe dienen datawarehousing en datamining? Situeer beide ten opzichte van
databases.
Terwijl een databasemanagementsysteem bedoelt is voor het beheer van actuele data en dus
geen geschiedenis bijhoud van de databases zelf, doet een datawarehouse dit juist wel. Een
datawarehouse is dus een grote database bedoeld voor data-analyse, meestal gericht op het
historisch karakter van de data.
Datamining heeft dan als doel om die analyse te doen en dus zinvolle informatie (zoals patronen
en verbanden) in de data te vinden die tot dan toe onbekend waren.
8
Wat zijn gebruikersprofielen? Bespreek de taken van een data-administrator en een
database-administrator.
Gebruikersprofielen worden toegekend aan gebruikers en bepalen welke bevoegdheden de
gebruiker krijgt.
Een data-administrator is de persoon die beslist welke data, in welk formaat, in welke database
moet worden opgeslagen. Bovendien legt hij ook de regels vast voor toegang tot de database,
gebruikersprofielen, beveiliging, verwerking en communicatie van de data en wie voorrang krijgt bij
toegangsconflicten. Hij speelt vooral een belangrijke rol bij het ontwerp van een database.
De database-administrator is dan de persoon die instaat voor de technische zaken en het
onderhoud van de databases. Hij is verantwoordelijk voor herstel bij falen, consistentie en prestatie
van de databases.
9
Bespreek databasedefinitie, databasemanipulatie en databaseconstructie.
Bij de databasedefinitie worden zowel de databasestructuur als de semantische regels voor de
database vastgelegd. Dit laatste dient om de integriteit van de database (de correctheid van de
data) te garanderen.
Databasemanipulatie bestaat uit het efficiënt toevoegen, verwijderen en aanpassen van data en
het efficiënt doorzoeken van databases.
Databaseconstructie slaat op het efficiënt bijhouden van de aangemaakte databases in het
geheugen, zonder dat de gebruikers zich er om hoeven te bekommeren.
10
Waarom is het noodzakelijk dat databases kunnen worden gedeeld? Wat zou er gebeuren
als die niet kan?
Dit is noodzakelijk zodat meerdere gebruikers of software tegelijk dezelfde data kunnen aanpassen
of doorzoeken. Als databases niet zouden kunnen gedeeld worden, zou elke gebruiker moeten
wachten tot de vorige klaar is. In dit geval zouden er echter ook geen toegangsconflicten optreden.
11
Waarom is het noodzakelijk dat databases worden beveiligd?
Het is nodig om de database te beveiligen tegen fysiek falen om het dataverlies zoveel mogelijk
te beperken.
Het is ook nodig om een database te beveiligen tegen ongeoorloofd gebruik (aldanniet
opzettelijk) om te voorkomen dat gebruikers schadelijke acties kunnen uitvoeren op de database of
data kan lezen die niet voor hem bedoeld is.
Er kan bovendien ook beveiligd worden tegen geoorloofd gebruik. Dit wil zeggen dat de
database zoveel mogelijk incorrecte data zelf dient te detecteren en weren.
12
Waarom is er een verschil tussen de interne laag van de drielagenarchitectuur en de
fysieke dataopslag? Wat is het nut van de interne laag?
De interne laag beschrijft hoe de bestanden en records georganiseerd worden. De eigenlijke
fysieke dataopslag valt onder het beheer van het besturingssysteem omdat het verschilt van
systeem tot systeem. De interne laag zorgt dus voor een abstractielaag om de fysieke
opslagdetails buiten de architectuur van de dbms te houden.
13
Wat zijn indexen? Waartoe worden deze gebruikt in databases?
Een index is een geordende lijst van koppels met een veldwaarde en een referentie, geordend op
de veldwaarde. De veldwaarde is de waarde van het veld waarvoor de index gedefinieerd is, terwijl
de referentie wijst naar de plaats in het geheugen waar een record met die veldwaarde is
opgeslagen.
Indexen worden gebruikt om sneller te kunnen navigeren door de records volgens het betreffende
recordveld en kan dus helpen om bv. queries te versnellen.
14
Wat is het nut van de logische laag en de externe laag van de drielagenarchitectuur?
In de logische laag (of gemeenschappelijke laag) wordt de database abstract voorgesteld volgens
de voorschriften van het databasemodel als een databaseschema. Dit is dus overzichtelijker voor
mensen dan de interne laag.
De externe laag dient om de zogenoemde views op de database te definiëren. Een view zorgt
ervoor dat voor de gebruiker de view de database lijkt te zijn. In deze laag kan dus bepaald
worden welk deel iedere gebruiker kan zien van de volledige database.
15
Waarop slaat dataonafhankelijkheid? Illustreer het nut ervan met een concreet voorbeeld.
Dataonafhankelijkheid wil zeggen dat de beschrijving van data in een bepaalde laag aangepast
kan worden zonder dat dit impact heeft op de andere lagen, waardoor databasesystemen
makkelijker onderhouden kunnen worden.
Door fysieke dataonafhankelijkheid kan bv. de fysieke opslagstructuur aangepast worden
zonder dat dit impact heeft op de logische en externe laag (de mappings tussen logische en
interne laag veranderen natuurlijk wel).
Door logische dataonafhankelijkheid kan bv. een recordtype aangepast of verwijderd worden
zonder dat dit impact heeft op de views in de externe laag (alweer, de mappings tussen logische
en externe laag veranderen wel).
16
Waarmee moet men rekening houden bij de keuze om bij een toepassing wel of geen
databasesysteem te gebruiken?
–
–
–
–
–
–
Hoeveel dbms-faciliteiten zijn er vereist?
Is het systeem complex genoeg om een dbms nodig te hebben? (Moet de data bv. in de
loop van de tijd aangepast worden of blijft het steeds hetzelfde?)
Budget?
Eisen qua snelheid, uitvoeringstijd?
Geheugencapaciteit?
Onderhoud?
17
Bedenk een realistische
opslagsysteem zou kiezen.
toepassing
waarbij
je
zeker
voor
een
zelfontwikkeld
De save-file voor een videogame waarbij de variabelen en dergelijken enkel maar allemaal
geladen worden bij het laden van die file. Verder dienen er geen bewerkingen op uitgevoerd te
worden.
Hoofdstuk 2: Datamodellen en databasemodellen
1
Wat is het verschil tussen een datamodel, een databasemodel en een databaseschema.
Een datamodel is een verzameling van voorschriften en regels die het mogelijk maken om de
structuur en het gedrag te beschrijven van data die in bepaalde software voorkomen.
Een databasemodel is een verzameling van voorschriften en regels die het mogelijk maken om
zowel de structuur, de beperkingen voor integriteit en beveiliging, als het gedrag van een database
te beschrijven op het niveau van de logische laag uit een 'drielagen'-architectuur voor dbms-en.
Een databaseschema is het resultaat van het gebruik van een databasemodel in een specifieke
situatie, dus het schema dat de data beschrijft die bij die situatie relevant is.
2
Vergelijk de operationele, structurele en semantische modellen op het vlak van
datamodellering en de manier van opzoeken van data. Geef een voorbeeld van een
databasemodel uit elk van deze categorieën.
De operationele modellen omschrijven de structuur van de data, maar niet de bewerkingen.
Opzoeken en aanpassen van data gebeurt d.m.v. specifieke operatoren in een hosttaal. Een
voordeel van dit model is dat dit zeer efficiënt kan gebeuren.
We hebben er twee besproken, het hiërarchisch model (boomstructuur) en het netwerkmodel
(graafstructuur).
Structurele modellen zijn wiskundig onderbouwd m.b.v. relaties. Deze worden in het model
voorgesteld d.m.v. tabellen (alleen atomaire waarden toegelaten).
Het opzoeken/aanpassen van data gebeurt niet langer vanuit een hosttaal, maar m.b.v. een taal
eigen aan het model, SQL.
Het belangrijkste model hier is het relationele model.
Bij semantische modellen benadrukt men bij het modelleren vooral de semantiek van de
gegevens waardoor men een stap dichter komt bij het modelleren van informatie.
Voorbeelden zijn het objectgeoriënteerde model, het objectrelationeel model en de hybride
modellen.
3
Hoe wordt data gemodelleerd volgens het hiërarchisch databasemodel?
De data wordt gemodelleerd in een boomstructuur. De verwantschappen tussen recordtypes
worden weergegeven door 'ouder-kind'-relaties. Voorbeeld van een relatie: de ouder is 'Artiest' en
het kind is 'Schilderij', want een artiest heeft meerdere schilderijen gemaakt.
4
Wat zijn virtuele 'ouder-kind'-relaties? Waarvoor worden deze gebruikt?
Virtuele ouderknopen worden ingevoegd in de boomstructuur (hiërarchisch model), maar verwijzen
niet naar de werkelijke ouder in de boom. Deze worden gebruikt om te verwijzen naar een andere
tabel die gerelateerd is met de huidige tabel. Een schilderij heeft zo bv. 'Artiest' als zijn ouderknoop
en 'Eigenaar' als een virtuele ouderknoop. Dit concept werd ingevoerd omdat een knoop
normaalgezien maar één ouderknoop mag hebben.
5
Wat zijn hiërarchische recordsequenties? Waarvoor zijn deze nodig?
Hiërarchische recorddsequenties zijn een ordening van de data in een hiërarchisch databasemodel
door de records in de boom in pre-order (dat is, diepte eerst, van links naar rechts) te doorlopen.
Ze zijn nodig om de 'nabijheid' van knopen in de boom duidelijk te maken: de kinderen van een
knoop staan immers logisch gezien dichter bij hun ouder dan bij andere knopen die op hetzelfde
niveau staan als de ouder (logische nabijheid). Hierdoor kunnen bv. makkelijker alle schilderijen
van een bepaalde artiest of eigenaar teruggevonden worden.
6
Hoe verloopt de manipulatie van hiërarchische databases? Welke faciliteiten zijn daarvoor
vereist? Wat zijn de voor- en nadelen van deze benadering?
Manipulatie van hiërarchische databases gebeurt door commando's die we oproepen vanuit de
programmeertaal waarin de toepassingen zij geschreven (hosttaal). Dit betekent dus dat er
hiervoor softwarebibliotheken met operatoren nodig zijn.
Voordelen zijn dat je gelijk welke programmeertaal kan gebruiken waarvoor de bibliotheek
ontwikkeld is en dat het oproepen van variabelen direct en efficiënt is.
De nadelen zijn echter dat je enkel maar de programmeertalen kan gebruiken waarvoor de
bibliotheek ontwikkeld is en dat je eerst hostvariabelen moet declareren voordat je een operator
oproept, dus verwerking van databasemanipulatie gebeurt record per record.
7
In welke opzichten verschilt het netwerkmodel van het hiërarchisch databasemodel? Wat
zijn de voor- en nadelen van het netwerkmodel vergeleken met het hiërarchisch databasemodel?
In het netwerkmodel wordt er gebruik gemaakt van een graafstructuur i.p.v. een boomstructuur
zoals in het hiërarchisch model.
De voordelen van het netwerkmodel zijn de mogelijkheid tot ingewikkeldere relaties en meer
verbindingen, waardoor datatoegang vaak efficiënter kan verlopen dan bij het hiërarchisch model.
Het nadeel van dit model is dan echter dat er geen logische nabijheid meer is en dat manipulatie
van netwerkdatabases complexer is dan bij hiërarchische databases.
8
Wat wordt in het relationeel databasemodel bedoeld met atomaire waarden? Welke
beperkingen brengt dit met zich mee?
Atomaire waarden zijn waarden in een tabel die op informatieniveau niet meer verder opgesplitst
kunnen worden. De beperking hiervan is dat het moeilijk is om complexe data voor te stellen.
9
Hoe worden verwantschappen tussen verschillende rijen uit dezelfde of verschillende
tabellen gemodelleerd in het relationeel databasemodel?
Dit wordt gedaan met behulp van kandidaatsleutels en vreemde sleutels. Een kandidaatsleutel uit
een tabel kan opgenomen als een vreemde sleutel in een andere tabel om een verwantschap te
modelleren tussen twee tabellen.
10
Geef voor- en nadelen die in aanmerking genomen moeten worden bij de keuze tussen
een objectgeoriënteerd databasemodel en het objectrelationeel model.
Voordelen objectgeoriënteerd model:
– steunen puur op de notie van objecten die meteen volledig ingebouwd is, terwijl het er
bij objectrelationeel als het ware 'opgeplakt' is.
Voordelen objectrelationele model:
– de relationele structuur zorgt voor een lagere instapdrempel, betrekkelijke eenvoud en
wiskundige hanteerbaarheid.
–
–
heeft een standaard, terwijl er voor puur objectgeoriënteerde dbms-en nog altijd geen
algemeen aanvaarde standaard is.
geleverd door bedrijven die het systeem zullen onderhouden en updaten,
objectgeoriënteerd minder gevestigde waarde, veel minder zekerheid.
11
Wat is een 'impedance mismatch' in de context van databases? Waarom bestaat er nog
steeds een 'impedance mismatch' bij objectgeoriënteerde modellen? Motiveer of de 'impedance
mismatch' ooit definitief kan worden verholpen.
Impedance mismatch is het optreden van nadelig informatieverlies wanneer je gegevens die
gemodelleerd zijn volgens de voorschriften van een databasemodel omzet naar de datastructuren
van een gebruikte programmeertaal en vice versa.
(Een voorbeeld: verschil bij aantal cijfers na de komma bij database en gebruikte
programmeertaal.)
Dit gebeurt omdat men ervan uitgegaan is dat de te beheren informatie in een perfect omschreven
vorm voorhanden is (bv. vage data). Dit gaat waarschijnlijk nooit definitief verholpen kunnen
worden omdat informatie van nature vaak onnauwkeurig, vaag omschreven, onzeker, onvolledig
en soms zelfs inconsistent is.
12
Bespreek de voor- en nadelen van een keuze voor een open source-oplossing in het licht
van de aspecten die werden aangehaald voor de keuze van een database-model.
+
-
Minder kans op vendor lock-in en goedkoop.
Vaak steilere aanleercurve en minder technische ondersteuning.
Hoofdstuk 3: Conceptueel databaseontwerp
1
Uit welke fases bestaat het databaseontwerpproces? Hoe worden deze in de praktijk
afgewerkt?
Informatievergaring: informatie vergaren door documenten te onderzoeken, gesprekken met
mensen, ...
Conceptueel ontwerp: omzetten naar EER-diagram en functionele beschrijving
Logisch ontwerp: logisch databaseschema, gedragsspecificaties
Fysiek ontwerp: DDL-scripts, implementatie van gedrag
2
Wat zijn CASE-tools? Wat zijn de voor- en nadelen van het werken met CASE-tools?
CASE-tools (Computer Aided System Engineering) zijn tools om het databaseontwerpproces
gedeeltelijk te automatiseren. Dit zijn bv. programma's waarmee men EER-diagrammen kan
tekenen.
+ interactief, makkelijker aan te passen, zien er grafisch beter uit dan een schets
- ondersteunen soms niet alle ontwerpfasen, genereren geen geoptimaliseerde DDL-scripts, zijn
niet compatibel met andere CASE-tools, kunnen soms geen n-aire relaties weergeven
3
Wat is het verschil tussen een entiteit en een entiteitstype?
Een entiteit is een 'ding' dat een zelfstandig bestaan leidt in de reële wereld. (Zowel fysiek object
als abstract concept.)
Een entiteitstype karakteriseert een collectie van entiteiten en wordt gekenmerkt door een naam
en een verzameling van attributen.
4
Wat is het verschil tussen een attribuut en een relatietype?
Attributen zijn gemeenschappelijke karakteristieken van een entiteitstype.
Een relatietype is een verwantschap tussen twee of meer al dan niet verschillende entiteitstypes.
Een attribuut is dus een 'eigenschap' van een entiteit(type) terwijl een relatietype gaat over het
verband tussen twee of meerdere entiteiten/entiteitstypes
5
Wat is het verschil tussen enkelwaardige en meerwaardige attributen? Geef voorbeelden
van elk.
Enkelwaardige attributen zijn attributen die maar 1 waarde mogen aannemen op ieder tijdstip en
bestaan dus uit 1 atomaire waarde, terwijl meerwaardige attributen meerdere waarden tegelijk
kunnen aannemen en dus een set van atomaire waarden zijn.
Het attribuut 'Naam' van 'Artiest' is bv. enkelwaardig, omdat een artiest 1 naam heeft, terwijl 'Talen'
meerwaardig kan zijn omdat een artiest meerdere talen kan spreken.
6
elk.
Wat is het verschil tussen atomaire en samengestelde attributen? Geef voorbeelden van
Een samengesteld attribuut bestaat uit meerdere atomaire attributen, bv. 'Adres' bestaat uit
'Straat', 'Nummer' en 'Postcode'. Elk van deze drie is een atomair attribuut.
7
Waarom worden er afgeleide attributen onderscheiden?
Omdat afgeleide attributen niet moeten opgeslagen worden in de database. Ze kunnen steeds
berekend worden a.d.h.v. reeds opgeslagen data.
De leeftijd van een persoon kan bv. steeds veranderen, dus i.p.v. de leeftijd elk jaar aan te passen
in de database, is dit een afgeleid attribuut dat kan berekend worden als de huidige datum min de
geboortedatum.
8
Wat zijn zwakke entiteitstypes? Waarom zijn deze nodig?
Een zwak entiteitstype karakteriseert zwakke entiteiten. Dit zijn entiteitstypes die niet op zichzelf
kunnen bestaan, maar voor hun bestaan afhankelijk zijn van het bestaan van andere,
identificerende entiteiten.
Deze zijn nodig om een bepaalde situatie te kunnen modelleren. Een schilderij kan bv. niet
bestaan zonder een artiest. Dit wordt dan gemodelleerd met een zwak entiteitstype.
9
Wat duiden de kardinaliteitsrestricties en de participatierestricties bij relatietypes aan?
De kardinaliteitsrestricties geven aan hoeveel entiteiten van het entiteitstype op een gegeven
tijdstip maximaal kunnen voorkomen in een relatie van het relatietype (één of meerdere).
Participatierestricties geven aan hoeveel entiteiten van het entiteitstype op een gegeven tijdstip
minimaal moeten voorkomen in een relatie van het relatietype (nul of één).
10
Wat zijn subtypes? Waarom worden deze ingevoerd?
Een subtype is een entiteitstype dat een subcollectie van entiteiten karakteriseert. Deze worden
ingevoerd om het mogelijk te maken dat een entiteitstype attributen kan overerven van zijn
supertype. Dit is handiger dan entiteitstypes als totaal onafhankelijk te beschouwen.
11
Bespreek het mechanisme van overerving bij supertype/subtype-verwantschappen.
Waarom is dit nuttig?
De subtypes krijgen ook alle attributen van het supertype, waardoor we ze niet meer opnieuw bij
het subtype moeten tekenen. Dit is zeer nuttig voor het voorstellen van verschillende entiteiten die
heel wat attributen gemeenschappelijk hebben.
12
Wat zijn geconditioneerde subtypes? Hoe wordt er gewerkt als de subtypes niet
geconditioneerd zijn?
Om te bepalen tot welk subtype een entiteit behoort, beschouwt men de waarde van een bepaald
attribuut van het supertype en associeert men daarmee een conditie. Als de attribuutwaarde van
de entiteit voldoet aan de voorwaarde, is de entiteit ook entiteit van het subtype. (Bv. 'Type' als
attribuut van 'Kunstwerk' bepaalt tot welk subtype het kunstwerk behoort.)
Als de subtypes niet geconditioneerd zijn, kan men wel nog weergeven of er totale of partiële
participatie is van het supertype en of de subtypes disjunct of overlappend zijn.
13
Wat zijn categorieën? Waarom worden deze ingevoerd? In welke opzichten verschilt een
categorie van een regulier subtype met meerdere supertypes? Geef een voorbeeld van elk.
Een categorie of unietype is een 'speciaal' subtype met verschillende supertypes, dat wordt
ingevoerd om de entiteiten van deze supertypes te groeperen.
Elke entiteit van de categorie is hierbij slechts entiteit van juist één van de supertypes, terwijl een
gewoon subtype met meerdere supertypes alle attributen van al zijn supertypes zal hebben.
Voor een categorie 'Eigenaar' met de supertypes 'Bedrijf' en 'Museum' zal de eigenaar ofwel een
eigenaar zijn van een bedrijf, ofwel van een museum.
Voor een subtype 'Juweel' met als supertypes 'Outfit' en 'Kunstwerk' zal het juweel zowel de
attributen van een outfit als van een kunstwerk hebben.
14
Bespreek het mechanisme van overerving bij categorieën. Waarom is dit nuttig?
Een entiteit van een categorie erft enkel over van het supertype waartoe de entiteit behoort.
Om te bepalen tot welk supertype het subtype nu uiteindelijk behoort in een categorie en van welk
supertype het dus de attributen overerft, wordt er gebruikgemaakt van geconditioneerde
supertypes. Dit mechanisme is volledig analoog aan geconditioneerde subtypes.
Bovendien wordt er ook vastgelegd of er totale of partiële participatie is van het subtype.
Het nut van dit mechanisme is om de entiteiten van supertypes te groeperen.
Hoofdstuk 4: Relationele DB: het relationeel databasemodel
1
Wat wordt bedoeld met atomair datatype? Geef drie voorbeelden van datatypes die niet
atomair zijn. Welke positieve en negatieve gevolgen heeft de beperking tot atomaire datatypes
voor het relationeel databasemodel?
Een atomair datatype wordt gespecificeerd door een verzameling van toegelaten atomaire
waarden (het domein van het datatype) en een verzameling van operatoren die allemaal inwerken
op de domeinwaarden en het gedrag van het datatype vastleggen.
Een atomaire waarde is een waarde die, voor wat het relationeel databasemodel betreft, niet
verder conceptueel opsplitsbaar is.
Voorbeeld niet-atomair: datum (dag, maand, jaar), adres (straat, nummer, postcode) en naam
(naam, voornaam).
Atomaire gegevens kunnen niet samengesteld of meerwaardig zijn, dus is het moeilijker complexe
gegevens op te slaan. Het voordeel is echter dat atomaire gegevens eenvoudiger zijn om mee te
werken.
2
Wat is het verschil tussen een domein en een datatype?
Het domein van een datatype specificeert enkel de toegelaten atomaire waarden, terwijl het
datatype ook de operatoren specificeert.
3
Hoe is een basisrelatie opgebouwd? Welke eigenschappen hebben basisrelaties? Hoe
kunnen basisrelaties worden geïnterpreteerd?
Een basisrelatie is opgebouwd uit een relatieschema (heading) en een extentie (body).
Eigenschappen:
– Binnen een relatie kunnen geen dubbele tuples voorkomen. (= redundante gegevens)
– De tuples van een relatie zijn niet geordend.
– De attributen van een relatie zijn niet geordend. (= ongeordende kolommen)
– Alle attribuutwaarden van een relatie zijn atomair.
Het schema van de relatie interpreteer je als de declaratie van een welbepaalde veronderstelling
(bv. 'Artiest(A_ID:char(3), Naam:varchar, Voornaam:varchar)') en elk tuple uit de extentie van de
relatie interpreteer je als een feit of een particuliere instantie (bv. '(A_ID:A01, Naam:'Da Vinci',
Voornaam:'Leonardo')') van deze veronderstelling.
4
Waartoe dient de catalogus? In welke opzichten verschilt de catalogus van een database
van de database zelf? Hoe kan met een catalogus worden gewerkt?
De catalogus bevat metadata (bv. hoe vaak wordt een bepaalde relatie geraadpleegd) en enkel
maar geraadpleegd worden door gebruikers, en dus niet aangepast worden.
De catalogus wordt meestal bevraagd om het databaseschema te achterhalen om dan queries op
te kunnen stellen. Er wordt ook informatie i.v.m. gebruikers en prestaties in bijgehouden.
5
Wat zijn views? Waartoe worden ze gebruikt? Bespreek kort hoe views kunnen worden
bevraagd en aangepast.
Een view is een benoemde, virtuele relatie die is afgeleid van gebruikergedefinieerde en/of
systeemgedefinieerde basisrelaties en/of andere views.
Ze worden gebruikt om:
– nieuwe data af te leiden. Bv. een view maken om leeftijd te tonen.
– bevragingsinstructies in te korten. De view fungeert dan als een verkorte schrijfwijze voor
de vaak gebruikte complexe instructie.
– in individuele gebruikersbehoeften te voorzien. Ieder kan een individuele kijk op de
database krijgen.
– data af te schermen. Met een view kan je maken dat bepaalde gebruikers bepaalde data
niet kunnen zien.
Bevragingen gebeuren op dezelfde manier als bij gewone basisrelaties.
Aanpassingen kunnen enkel uitgevoerd worden als de view aanpasbaar is. Bovendien mag er
geen conflict ontstaan met de definitie van de view (bv. geen rij toevoegen met daarin een
geboortedatum die kleiner is dan in de definitie van de view) en mogen er geen aanpassingen
uitgevoerd worden op afgeleide data.
6
Hoe worden indexen ondersteund in het relationeel databasemodel? Bespreek hun vooren nadelen.
Een index is een tabel waarin de attributen waarop de index gedefinieerd is geordend worden met
de volgorde bepaald door de indexdefinitie, en waarbij dan in een extra kolom een (logische of
fysieke) pointer naar de data bewaard wordt. Dit wordt gedaan met de instructie 'CREATE INDEX'.
+ prestatieverbetering doordat zoeken op een geordende kolom kan gebeuren met binaire
zoekalgoritmes.
- aanpassen, toevoegen en verwijderen duurt langer, aangezien de indexen daarbij ook aangepast
moeten worden.
7
Geef de hoofdredenen voor het ontbreken van informatie. Wat zijn null-waarden? Welke
impact heeft het beschouwen van null-waarden op (de datatypes van) het relationeel
databasemodel? Welke problemen bestaan er bij het werken met null-waarden? Illustreer dit aan
de hand van een voorbeeld.
Informatie kan ontbreken doordat ofwel de gegevens bestaan maar niet voorhanden zijn
(onbekende informatie), ofwel de gegevens niet bestaan of niet van toepassing zijn en dus nooit
beschikbaar zullen komen (niet-gedefinieerde informatie).
Een null-waarde is een waarde die overeenkomt met 'ontbrekend'. De impact hiervan op de
datatypes van het relationeel databasemodel is dat er een nieuwe waarde toegevoegd wordt aan
het domein, namelijk 'null'.
Het probleem met null-waarden is dat er problemen kunnen optreden voor logica. Bv. wat geeft
'waar = null' als resultaat? Er wordt voor de nodige operatoren dus een uitbreiding voorzien voor
de waarheidswaarde 'null'.
Nu is (alles < 1800) + (alles >= 1800) != alles door de null-waarden.
8
Wat zijn defaultwaarden? Welke zijn de voor- en nadelen van het werken met
defaultwaarden?
Defaultwaarden zijn de waarden die automatisch worden ingevuld als geen waarde wordt
opgegeven. Ze worden gebruikt als benadering of als model voor elke ontbrekende waarde van
het attribuut.
Het voordeel hiervan is dat je zo altijd een waarde hebt om mee te werken. Het nadeel is echter
dat het slechts een benadering is en verkeerde resultaten dus mogelijk zijn.
9
Wat is een kandidaatsleutel? Wat is een vreemde sleutel? Waartoe worden vreemde
sleutels gebruikt?
Een kandidaatsleutel is een deelverzameling van de verzameling van alle attributen van een
gegeven basisrelatie die voldoet aan de uniciteits- en irreducibiliteitseigenschap.
Een vreemde sleutel F van een basisrelatie R2 is een verzameling van attributen van R2 waarvoor
het volgende geldt:
– Er bestaat een basisrelatie R1 (R1 niet noodzakelijk verschillend van R2) met een
kandidaatsleutel K, die evenveel attributen bevat als F en waarbij er een één-opééncorrespondentie is tussen de attributen van K en de attributen van F, zodat
corresponderende attributen dezelfde geassocieerde datatypes hebben.
– Op elk tijdstip komt elke reguliere waarde van F in R2 eveneens voor als waarde van K
in een tuple van R1.
Vreemde sleutels worden gebruikt om te verwijzen naar andere basisrelaties. Zo kunnen
verbanden tussen twee relaties (tabellen) gelegd worden.
10
Wat wordt bedoeld met cyclische referentie? Geef een voorbeeld van een cyclische
referentie waarbij er meer dan twee basisrelaties zijn betrokken.
Een cyclische referentie wil zeggen dat een vreemde sleutel in R1 verwijst naar R2 terwijl een
vreemde sleutel in R2 verwijst naar R1. Dit kan uitgebreid worden van een verwijzing van R1 naar
R2, R2 naar R3, ... , R(n-1) naar Rn en Rn naar R1.
Bv. in een tabel 'Schilderij' is er een vreemde sleutel die verwijst naar 'Tentoonstelling' (in welke
tentoonstelling het schilderij te zien zal zijn. In 'Tentoonstelling' is er dan een vreemde sleutel die
verwijst naar 'Plaats' (waar de tentoonstelling doorgaat). Ten slotte is er een vreemde sleutel in
'Plaats' die verwijst naar 'Schilderij' (welke schilderijen die plaats bezit). (Eigenlijk zijn er nog
meerdere relaties tussen om al die M-op-N-relaties te mappen.)
11
Wat is referentiële integriteit?
Referentiële integriteit is de voorwaarde dat elk van de reguliere – niet-null – waarden van een
vreemde sleutel op elk moment voorkomt als de waarde van de corresponderende
kandidaatsleutel.
12
Wat zijn integriteitsrestricties? Volgens welke criteria worden integriteitsrestricties
onderverdeeld?
Een integriteitsrestrictie is een voorwaarde waaraan alle data uit een database op elk moment
moet voldoen. Integriteitsrestricties worden op twee manieren onderverdeeld:
– onderscheid tussen toestandsrestricties (waakt over correcte toestand database, bv.
geboortejaar < sterftejaar) en transitierestricties (vergelijken nieuwe waarde met oude
waarde, slechts betrekking op attribuut dat aangepast wordt, bv. toenemen loon
werknemer)
– onderscheid tussen relatierestricties (enkel data uit één relatie nodig voor evaluatie) en
databaserestricties (data uit meerdere relaties nodig voor evaluatie).
13
Wat is een stored procedure? In welke opzichten verschillen stored procedures van
integriteitsrestricties?
Een stored procedure is een voorgecompileerde groep bewerkingen, geschreven in SQL/PSM die
de SQL-taal omvat. Samen voeren deze bewerkingen een actie uit op de database of met de data
van de database en eventueel wordt een resultaat teruggegeven.
Elke stored procedure wordt gekenmerkt door een naam en code en wordt bijgehouden in de
catalogus.
Stored procedures zijn geavanceerder dan integriteitsrestricties. Er
bewerkingsresultaat weergegeven worden en er is expliciete input en output.
14
kan
bv.
een
Hoe werken triggers?
Als een bepaalde trigger event zich voordoet en de eventuele condition geëvalueerd wordt als
waar, wordt een actie (stored procedure) uitgevoerd. Een trigger bestaat dus uit een naam, trigger
event, trigger condition en triggered action.
15
In hoeverre kun je een dbms als relationeel beschouwen als deze niet is uitgerust met
faciliteiten voor stored procedures en triggers?
Het relationeel databasemodel wordt gekenmerkt door twee zaken, het is onderbouwd door de
relationele algebra en het is een structureel model.
De relationele algebra zegt niets over stored procedures en triggers. Bovendien is het perfect een
structureel model (benadrukken van het concept 'abstracte structuur', onafhankellijk van de fysieke
organisatie en opslag van de data), ook zonder stored procedures en triggers.
Het is dus nog steeds een relationeel model.
16
Geef de acht basisoperatoren van de relationele algebra. Zijn er basisoperatoren die
kunnen worden afgeleid van andere?
UNION, INTERSECT, MINUS, TIMES (cartesiaans product), WHERE (selectie), projectie, JOIN en
DIVIDEBY.
R1 INTERSECT R2 = R1 MINUS (R1 MINUS R2)
17
Hoe werkt de intersectieoperator? Welke beperkingen gelden daarbij?
De intersectie operator levert (op R1 en R2) de tuples die in zowel R1 als R2 voorkomen.
Voorwaarde: R1 en R2 moeten een schema van hetzelfde type hebben.
18
In welke opzichten verschillen de cartesiaanse productoperator en de 'join'-operator?
Bij het cartesiaans product worden alle samenvoegingen van tuples beschouwd, terwijl bij de join
enkel tuples die gerelateerd zijn via dezelfde waarden voor de gemeenschappelijke attributen
samengevoegd worden.
Bij JOIN moet er een gemeenschappelijk veld zijn, bij cartesiaans product niet.
19
Geef een voorbeeld waaruit het praktische nut van de cartesiaanse productoperator blijkt.
Lastig...
Van forum: "Assemblage van pc's. Veronderstel dat we in een ideale wereld leven en alle
afzonderlijke componenten mooi bij elkaar passen. Dan kunnen we tabellen als processoren,
moederborden, grafische kaarten, ram geheugen in een cartesiaans product steken om alle
mogelijke configuraties te bekomen."
20
Hoe werkt de delingsoperator? Waarom is deze ingevoerd?
De delingsoperator werkt op dezelfde manier alsof je factoren zou wegdelen uit een
breuk/veelterm. Alleen tuples waaruit je iets weg hebt kunnen delen worden weergegeven,
algemeen XY DIVIDEBY X = Y
Deze operator is ingevoerd met het oog op de verwerking van vraagstellingen waarbij gebruik
wordt gemaakt van de 'universele quantor' (∀ of 'voor alle')
21
Wat wordt bedoeld met het gesloten zijn van de relationele algebra? Waarom is deze
eigenschap belangrijk?
Dit betekent dat elke operator inwerkt op een of meerdere relaties en daarbij een nieuwe relatie
produceert. Dit is belangrijk want zo is het mogelijk om operators samen te stellen.
Hoofdstuk 5: Logisch databaseontwerp
1
Beschrijf in grote lijnen het logisch databaseontwerp met behulp van EER-modellering. Wat
is het belang van 'reverse engineering' hierbij?
Een EER-diagram wordt omgezet naar een databaseschema d.m.v. een omzettingsalgoritme.
Daarna worden ook nog de functionele beschrijvingen omgezet naar gedragspecificaties
(alternatieve sleutels, integriteitsrestricties, stored procedures en trigggers).
Reverse engineering is dan het omzetten van een databaseschema naar een EER-diagram. Dit
dient om het EER-diagram te actualiseren na aanpassing van het databaseschema.
2
Welke ondersteuning bieden CASE-tools op dit vlak? Zoek bijkomende documentatie over
een CASE-tool (bijvoorbeeld via internet).
Sommige CASE-tools laten toe om met de druk op een knop een databaseschema te genereren
op basis van een EER-diagram. Ook reverse engineering en het omzetten van functionele
beschrijvingen wordt soms ondersteund.
3
Bespreek de vier opties voor het omzetten van een generalisatie of specialisatie met één
supertype. Wat zijn de voor- en nadelen van elk van deze opties? Bedenk voor elk van deze opties
een voorbeeld van een specialisatie die met die optie het best kan worden omgezet.
–
verschillende basisrelaties, voor het supertype en de subtypes.
+ bestaande basisrelaties blijven behouden
+ werkt voor alle mogelijkheden
- veel basisrelaties
–
verschillende basisrelaties, enkel voor de subtypes (attributen supertype bij subtype)
+ een relatie minder (die van het supertype)
- enkel voor totale specialisatie/generalisatie met disjuncte subtypes
–
één basisrelatie met één typeattribuut (attributen subtype bij supertype)
+ slechts één relatie
- veel ontbrekende gegevens als er veel attributen zijn bij de subtypes
- enkel voor disjuncte subtypes
–
één basisrelatie met meerdere typeattributen
+ slechts één relatie
+ werkt voor alle mogelijkheden
- veel ontbrekende gegevens als er veel attributen zijn bij de subtypes
- voor elk mogelijk subtype is er een aparte boolean nodig
4
Kunnen typeattributen worden gebruikt voor het omzetten van een generalisatie of
specialisatie met meerdere supertypes? Motiveer je antwoord.
Ja, je geeft het subtype de attributen van al zijn supertypes en gebruikt dan het typeattribuut om
aan te geven tot welke supertypes het subtype allemaal behoort.
5
Geef een voorbeeld van een binair 'één-op-één' relatietype en een binair 'één-op-meerdere'
relatietype dat het best wordt omgezet met een extra basisrelatie.
1-op-1: Getrouwd met: het is niet logisch om de attributen van de man/vrouw toe te voegen aan de
vrouw/man, het is logischer om ze als aparte entiteiten te houden. Bovendien is het ook niet
logisch om de attributen van 'getrouwd' (vb. trouwdatum, gemeente ...) toe te voegen aan slechts 1
persoon.
1 op N: analoog, maar we beschouwen ook polygame relaties.
6
Hoe kun je te werk gaan om een samengesteld meerwaardig attribuut met een
meerwaardige, enkelvoudige componentattribuut om te zetten? Geef een voorbeeld.
Stel A is een samengesteld, meerwaardig attribuut van relatie R, en is samengesteld uit B en C
(enkelvoudig, enkelwaardig) en D (enkelvoudig, meerwaardig).
Dan maken we een nieuwe basisrelatie R1, met attributen B en C, plus een Foreign Key: de
primaire sleutel van R. B en C vormen de primaire sleutel van R1 (als B op zich al uniciteit
garandeert, laten we C vallen).
We maken dan nog een nieuwe basisrelatie R2, met als attribuut de waarde van D, en een Foreign
Key die wijst naar de primaire sleutel van R1. De primaire sleutel is het attribuut met de waarde
van D.
7
Wat zijn functionele afhankelijkheden? Waarom kunnen deze niet automatisch worden
afgeleid uit de specificatie van een basisrelatie?
Een verzameling van attributen Y is functioneel afhankelijk van een verzameling van attributen X
als de waarden van de attributen van Y op elk moment uniek worden vastgelegd door de waarden
van de attributen van X.
Als de attribuutwaarden van X bekend zijn, zijn daardoor ook de attribuutwaarden van Y gekend. X
wordt de determinant van de functionele afhankelijkheid genoemd.
De functionele afhankelijkheid kan zich binnen een enkele basisrelatie bevinden. Als er geen
verwijzingen zijn d.m.v. (foreign) keys dan is er volgens het model ook geen verband tussen de
informatie.
8
Wat zijn irreducibele functionele afhankelijkheden? Waarom wordt er bij normalisatie
gewerkt met irreducibele functionele afhankelijkheden?
Een verzameling van attributen Y is irreducibel functioneel afhankelijk van een verzameling van
attributen X als Y functioneel afhankelijk is van X en er bovendien geldt dat:
– X en Y disjunct zijn en dus geen gemeenschappelijke attributen hebben.
– Er geen echte deelverzameling X' van X bestaat, zodat Y functioneel afhankelijk is van X'.
Er wordt met irreducibele afhankelijkheden gewerkt omdat functionele afhankelijkheid alleen niet
leidt tot consistente data. Immers, stel dat je bij 2NF gewone functionele afhankelijkheid zou
nemen dan moet er helemaal geen optimalisatie gebeuren. Stel immers dat een element
irreducibel afhankelijk is van enkel A terwijl de K.S {A,B} is. Dan breiden we gewoon de
afhankelijkheid uit naar {A,B} en zou deze toch in 2NF staan. Bijgevolg kunnen we overtollige
informatie opslaan.
9
Wat zijn meerwaardige functionele afhankelijkheden? Wanneer staat een relatie in vierde
normaalvorm?
Een verzameling van attributen Y is meerwaardig functioneel afhankelijk van een verzameling
van attributen X als de waarden van de attributen van X op elk moment een collectie met
meerdere waarden voor de attributen van Y vastleggen.
Een relatie staat in vierde normaalvorm als ze in 'Boyce-Codd'-normaalvorm staat en geen
enkele meerwaardige functionele afhankelijkheid bevat, tenzij dit de enige afhankelijkheid is die
voorkomt in de relatie.
Een relatie staat in 'Boyce-Codd'-normaalvorm als ze in eerste normaalvorm (alle datatypes
atomair) staat en elke determinant een kandidaatsleutel is van de relatie.
Hoofdstuk 6: Fysiek databaseontwerp en SQL
1
Beschrijf in grote lijnen het fysieke ontwerp van relationele databases.
Het databaseschema, de (alternatieve) sleutels, de integriteitsrestricties, de stored procedures en
de triggers worden geïmplementeerd in een gekozen relationeel dbms d.m.v. SQL-instructies.
Eerst worden de relaties aangemaakt en daarna wordt de inhoud toegevoegd.
2
Hoe is standaard-SQL opgebouwd?
SQL bestaat uit de datadefinitietaal met instructies voor fysiek databaseontwerp en de
datamanipulatietaal met instructies voor datamanipulatie en -doorzoeking. Daarnaast zijn er ook
nog instructies om te werken met view, opzetten van beveiligingsmechanismen en het delen van
gegevens.
3
Wat zijn SQL-dialecten? Welke consequenties zijn er verbonden aan het werken met een
SQL-dialect?
SQL-dialecten zijn aangepaste implementaties van SQL door dbms-ontwerpers. (Bv. Oracle SQL)
De consequenties hiervan is dat de gebruiker gebonden wordt aan de constructeur. Overgaan
naar een ander dbms zal immers een zware conversie-inspanning vragen. Het voordeel is vaak
een groter gebruikersgemak.
4
Welke zijn de typische stappen die het dbms onderneemt bij het verwerken van DMLinstructies?
Een binnenkomende DML-instructie wordt eerst gevalideerd en bij de validatie omgezet naar een
algebraïsche expressie. De algebraïsche expressie wordt dan geoptimaliseerd waarbij er een
queryplan opgebouwd wordt. Dat queryplan wordt dan uitgevoerd waarna het resultaat
teruggegeven wordt.
5
Wat is de rol van relationele expressies? Schets in grote lijnen hoe deze worden
opgebouwd bij toevoeg- , verwijder- en opzoekinstructies.
Alle queries worden omgezet naar relationele expressies.
Voor toevoeg- en verwijderinstructies:
Toevoegen
INSERT INTO R1
VALUES (v1, v2, ..., vn)
(R1 UNION R2), met R2 is tuple van v1, ... , vn
INSERT INTO R1 (R2)
(R1 UNION R2)
Verwijderen
DELETE FROM R WHERE c
R EXCEPT (R WHERE c)
Voor opzoekinstructies:
Stap
Vertaling
FROM R1, R2, ... , Rn
E1 = (R1 TIMES ... TIMES Rn)
WHERE c1
E2 = (E1 WHERE c1)
GROUP BY A'1, ... , A'm E3 = (E2 GROUP (A'1, ... , A'm))
HAVING c2
E4 = (E3 WHERE c2)
SELECT A1, ... , Ap
E5 = (E4 {A1, ..., Ap}) (projectie)
6
Wat gebeurt er bij optimalisatie? Waarom wordt meestal niet doorgezocht naar de meest
optimale oplossing?
Het dbms zal eerst proberen om de relationele expressie om te vormen naar een equivalente
expressie die identieke resultaten garandeert, maar efficiënter is om uit te voeren.
Er wordt meestal niet gezocht naar een optimale oplossing omdat dit langer zou duren dan de
opgeleverde tijdwinst.
7
Welke stappen kunnen nuttig zijn om de prestaties van bedrijfskritische queries te
verbeteren?
–
–
–
–
–
–
–
Begrijpen wat de query doet.
Weten op welke relaties de query inwerkt.
Zijn alle opgevraagde attributen nodig?
Kan de WHERE clause optimaal gebruikmaken van de beschikbare indexen?
Hoe vaak wordt de query uitgevoerd? (Hoe vaker, hoe belangrijker optimalisatie.)
Toepassingsprogramma herontwerpen als de query steeds heel veel resultaten teruggeeft.
Queryplan analyseren en eventueel gebruik indexen afdwingen.
8
Wat is een Query-By-Example (QBE)? Wat zijn de voor- en nadelen van het gebruik van
QBE?
Bij QBE worden DML-instructies opgebouwd door het invullen van grafische templates die de
structuur weergeven van de (door de gebruiker geselecteerde) relaties uit de database.
Het voordeel hiervan is dat de database toegankelijker wordt voor nieuwe gebruikers. Het nadeel
is echter dat het moeilijk te koppelen is aan in huis ontwikkelde programmacode en dat niet alle
SQL-queries zonder problemen kunnen worden omgezet naar QBE-specificaties.
Hoofdstuk 7: Objecttechnologie in databases
1
Wat zijn objecten en objecttypes?
Objecten zijn autonome entiteiten, hiervan zijn de structuur en het gedrag vastgelegd in het
objecttype. Objecten hebben een complexe waarde die de toestand van het object wordt
genoemd.
2
Wat is inkapseling van operatoren? Wat is het voordeel hiervan?
Inkapseling zorgt ervoor dat de methode van de operator verborgen wordt gehouden en slechts
de signatuur van de operator zichtbaar wordt gemaakt voor de gebruiker. Het voordeel hiervan is
dat implementatiedetails afgeschermd worden en dat de code makkelijk onderhouden kan worden.
3
Wat is overerving? Waarom is overerving nuttig?
Overerving is het overnemen van de toestand en het gedrag van andere objecttypes. Het nut
hiervan is dat het mogelijk wordt om specifiekere objecttypes op te bouwen uit algemenere
objecttypes en daarbij de specificaties van de structurele kenmerken en operatoren van de
algemenere objecttypes opnieuw te kunnen gebruiken.
4
Geef twee voorbeelden van operatoroverlading en -polymorfisme.
Bv. Teken(Figuur). Als de figuur een cirkel is zal er iets anders getekend worden dan als de figuur
een vierkant is.
5
Hoe werken het naamgevings- en bereikbaarheidsmechanisme voor persistentie?
Het naamgevingsmechanisme houdt in dat een object persistent kan worden gemaakt door het
een persistente naam te geven, die uniek is over de hele database.
Het bereikbaarheidsmechanisme zorgt ervoor dat elk object dat voorkomt in (of waarnaar
verwezen wordt vanuit) een persistent object, ook persistent gemaakt wordt.
(Persistente objecten zijn objecten die blijven bestaan zelfs na het afsluiten van het
toepassingsprogramma.)
6
Waarom zijn objectidentificatoren nuttig?
Objectidentificatoren zijn nuttig om objecten uniek te definiëren. Bovendien verandert de
objectidentificator niet. Join operaties kunnen vermeden worden door gewoon de
objectidentificator te gebruiken om van een object naar andere objecten te verwijzen.
7
Wat zijn literaaltypes en objecttypes volgens het ODMG-objectmodel? Wat zouden de
gevolgen zijn, als alle types objecttypes zouden zijn? Bespreek dit.
Een objecttype modelleert de gemeenschappelijke structuur- en gedragskenmerken van een
groep objecten (instanties van dat objecttype).
Literaaltypes zijn de bouwstenen die gebruikt worden voor het modelleren van structurele
kenmerken.
Als beide types objecttypes zouden zijn, zou alles persistent moeten kunnen opgeslagen worden
en zouden dus ook aan literalen (instanties van literaaltypes) objectidentificatoren toegekend
moeten worden.
(Literalen en niet-persistente objecten hebben normaal geen objectidentificator.)
8
Waarvoor dienen interfaces en klassen? Waarom zijn interfaces nuttig? Wat is het verschil
tussen een objecttype en een klasse?
Interfaces zijn bouwstenen om het gedrag te modelleren.
Klassen dienen om de structurele kenmerken en gedragskenmerken van een objecttype vast te
leggen.
Objecttypes kunnen opgebouwd worden uit literalen, interfaces en klassen, terwijl klassen kunnen
opgebouwd worden uit attributen, relaties en operatoren. Objecttypes zijn dus algemener.
9
Bespreek de twee manieren waarop in ODMG verwantschappen tussen klassen kunnen
worden gemodelleerd. Geef de voor- en nadelen van elk.
Verwantschappen kunnen ofwel uni-directioneel ofwel bi-directioneel worden gemodelleerd. Bij de
uni-directionele werkwijze wordt de gerelateerde klasse opgenomen als type van een attribuut.
Bij de bi-directionele werkwijze worden twee relaties gebruikt: één in elk van de betrokken
klassen.
Uni-directioneel:
+ eenvoudig
- geen referentiële integriteitscontrole
Bi-directioneel:
+ referentiële integriteitscontrole door twee relaties die elkaars inverse zijn
- extra relatie aanmaken t.o.v. uni-directioneel
10
Welke vormen van overerving worden ondersteund in ODMG?
'Isa'-overerving: het supertype moet een interface zijn en het subtype moet een klasse of een
interface zijn. Meerdere interfaces als supertype zijn toegelaten, maar dan mag er wel geen
operatoroverloading zijn.
'Extends'-overerving: zowel het supertype als het subtype moeten klassen zijn. Meervoudige
overerving is niet toegestaan, maar operatoroverloading is dat wel.
11
Wat zijn extenties? In welke opzichten verschilt het ODMG-concept extentie van het
relationeel concept extentie?
Extenties zijn benoemde persistente verzamelingen die bestaan uit alle persistente objecten van
het objecttype.
Entiteiten bij het relationeel model worden sowieso in de extentie geplaatst, terwijl objecten bij het
objectgeoriënteerd model daar enkel in geplaatst worden als ze persistent zijn. Bij het relationeel
model is een extentie mooi uit rijen van een tabel opgebouwd, terwijl dat bij ODMG niet zo mooi
lineair opgebouwd is.
12
Hoe werken sleutels in ODMG? Vergelijk met het EER-model en het relationeel model.
Bij het ODMG-model is er slechts 1 sleutel, deze komt overeen met een kandidaatsleutel bij EER
en het relationeel model.
Ieder (persistent) object heeft sowieso al een unieke objectidentificator.
13
Wat is de rol van de taalbindingen met betrekking tot objectdefinitie, objectmanipulatie en
objectbevraging?
Fysiek dataontwerp, toevoegen, aanpassen en verwijderen van objecten kunnen enkel via
taalbindingen gebeuren.
Voor objectbevraging is er ook nog altijd mogelijkheid tot directe DB toegang via de OQL.
14
In welke opzichten verschilt OQL van SQL?
OQL kan enkel gebruikt worden voor opzoeken van data (SQL ook voor manipulatie). OQL biedt
wel meer flexibiliteit op vlak van zoekmogelijkheden en weergave van resultaten.
15
Staan SQL3 objectrelationele databaseschema's nog in eerste normaalvorm? Wat zijn de
voor- en nadelen hiervan?
Nee, aangezien er nu ook niet atomaire datatypes toegelaten zijn. Het nadeel hiervan is kans op
inconsistentie, maar het voordeel is dat er meer flexibiliteit, een grotere semantische waarde en
meer gebruikersgemak is.
16
Illustreer hoe tupletypes in SQL3 kunnen worden gebruikt om relaties op te bouwen.
Met een variant van de 'CREATE TABLE'-instructie kan men een relatie aanmaken met de
componenten van het tupletype als attributen en met een zelf gespecificeerde primaire sleutel.
Bv.
CREATE TYPE Eigenaartype AS (
naam varchar,
adres adrestype )
CREATE TABLE Eigenaar of Eigenaartype
(PRIMARY KEY (naam))
17
Waarom worden er tuple-identificatoren gebruikt in SQL3? Op welke manieren kunnen ze
worden aangemaakt? Illustreer hun werking.
Tuple-identificatoren kunnen gebruikt worden om rechtstreeks van 1 tuple naar een andere tuple te
navigeren.
De identificator kan ofwel afgeleid worden van de primaire sleutel (DERIVED) ofwel onafhankelijk
van de primaire sleutel door het systeem opgebouwd worden (SYSTEM GENERATED).
Je kan de waarden van de door tuple-identificator gerefereerde tuple bereiken door gebruik te
maken van de dereferentie-operator '->'.
Bv. SELECT u.lener->naam FROM Uitleningen u WHERE u.schilderij->periode = 1800
18
Welke vormen van overerving zijn er in SQL3? Geef een voorbeeld waaruit duidelijk het
verschil tussen beide naar voren komt. Is het zinvol om beide vormen gecombineerd te gebruiken?
Enerzijds heb je overerving vastgelegd bij de definitie van een tupletype (zo veel andere tupletypes
als je wil) en anderzijds heb je overerving bij de aanmaak van een relatie (overerven andere tabel,
maximum 1).
Tupletype:
CREATE TYPE HerstelSchilderijtype UNDER Schilderijtype AS(
Codehersteller varchar,
datum date,
korte_omschrijving varchar,
METHOD bepaald_waarde() RETURNS real;)
Relatie:
CREATE TABLE Europese_Schilderijen UNDER Schilderij;
Elke tuple in 'Europese_Schilderijen' moet ook voorkomen in 'Schilderij'.
19
Wat zijn 'clob'- en 'blob'-datatypes? Welke voordelen heb je wanneer je deze gebruikt in
combinatie met objecttechnologie?
Dat zijn datatypes om multimediaobjecten in een database te integreren.
Het datatype clob, character large object, gebruiken we voor het weergeven van grote
karaktersequenties, die samen een tekst vormen.
Het datatype blob, binary large object, gebruiken we om grote bitsequenties weer te geven die een
digitale representatie kunnen zijn van multimedia en bv. afkomstig zijn van een omzetting van
video, beeld of geluid naar digitaal formaat.
Het voordeel hiervan is dat het gebruik van tupletypes het mogelijk maakt om datatypes voor
multimedia te maken waarin gebruikergedefinieerde operatoren zijn geïntegreerd. Bovendien
kunnen ook componenten voor het modelleren van data over de multimedia in het tupletype
worden aangebracht.
20
Wat wordt bedoeld met objectrelationele mapping?
Objectrelationele mapping is het omzetten van objecttypes naar een relationeel databaseschema.
Hoofdstuk 8: Toegangsmogelijkheden voor applicaties
1
Wat zijn API"s?
Een API (ApplicatieProgramma-Interface) voor databasetoegang zorgt voor de verbinding of
interface tussen de applicatie en het dbms. De API wordt door de applicatie gebruikt om instructies
door te geven aan het dbms en wordt omgekeerd door het dbms gebruikt om resultaten en statusen foutcodes door te geven aan de applicatie.
2
Hoe werkt een ingebouwde API voor databasetoegang?
Bij een ingebouwde API worden de instructies voor databasetoegang integraal ingebouwd in de
applicatiecode. De uitvoering van de 'verrijkte' applicatiecode bewerkstelligt de interactie met het
dbms, dat op zijn beurt verantwoordelijk is voor de correcte afhandeling van de instructies en de
feitelijke databasetoegang.
3
Wat is een hosttaal?
De hosttaal is de taal waarvoor een API in de vorm van een softwarebibliotheek beschikbaar is
gemaakt, zodat het mogelijk is om in deze taal interactie te hebben met een dbms.
Uiteindelijk is het de taal waarin je aan het werken bent en van waaruit je ook toegang nodig hebt
tot een database en daardoor die instructies 'inbed'.
4
Bespreek in grote lijnen hoe 'embedded' SQL werkt. Wat zijn de voor- en nadelen van het
werken met 'embedded' SQL?
Embedded SQL stelt je in staat om SQL-instructies, via specifieke taalconstructies, in te bouwen in
de programmacode. Deze worden geprecompileerd naar een format dat het dbms kan uitvoeren.
Het voordeel is dat de omzetting maar eenmaal plaats hoeft te vinden, waarna de gecompileerde
instructie diverse malen kan worden uitgevoerd.
Het nadeel is echter dat embedded SQL databasespecifiek is, waardoor een applicatie steeds
aangepast moet zijn aan de API van een bepaalde databaseconstructeur.
5
Wat is een cursor? Bespreek en illustreer de vier stappen die in acht genomen moeten
worden bij het werken met cursors.
Een cursor is een iteratorconstructie die het toelaat om tuples één voor één op te halen en te
verwerken.
Elke cursor moet eerst eenmalig worden aangemaakt (DECLARE). Daarna kan de cursor voor
gebruik worden geopend (OPEN). Pas dan kan de cursor worden gebruikt om de tuples één voor
één – bij opeenvolgende iteraties van de WHILE-lus – op te halen (FETCH). Na gebruik moet de
cursor op een gepaste manier worden afgesloten (CLOSE). De cursor is dan klaar om opnieuw
geopend te worden.
6
In welk opzicht verschilt statische SQL van dynamische SQL? Waarom is er bij dynamische
SQL een systeem van late binding nodig?
Dynamische SQL wordt niet geprecompileerd, waardoor meer flexibiliteit beschikbaar is (volledige
SQL-instructie pas at runtime invoeren).
Late binding is nodig juist omdat pas at runtime een omzetting uitgevoerd wordt.
7
Hoe werkt een 'call-level' API voor databasetoegang? Bespreek de voor- en nadelen
vergeleken met ingebouwde API's.
Bij een call-level API gebeurt de databasetoegang via aparte software die communiceert met de
applicatie en het dbms (dus instructies omzetten).
+ geen precompilatie meer nodig, late binding laat meer mogelijkheden toe.
- omzetting gebeurt opnieuw bij elke uitvoering, dus is er vertraging.
8
Bespreek de (werking van de) hoofdcomponenten van de ODBC-architectuur.
Applicatie-interface: instructies van de applicatie verwerken en doorgeven aan de interne
driverbeheerder.
Driverbeheerder: selecteren van de juiste driver die overeenstemt met een bepaalde aanvraag en
database.
Driver: rechtstreekse communicatie naar database (databronnen).
9
Waarom is het nuttig of niet nuttig om binnen ODBC een onderscheid te maken tussen een
'environment', een 'connection' en een 'statement'? Discussieer.
Environment: lijst toegekende verbindingen bij specifieke database
Connection: specifieke verbinding
Statement: specifieke instructie
Waarschijnlijk wel nuttig, anders zouden ze het niet gebruiken. Met die handles kan je de status
opvragen van de toegekende verbindingen, van specifieke verbindingen en van specifieke
instructies opvragen.
10
In welk opzicht verschilt ODBC van 'embedded' SQL met betrekking tot het ophalen van
resultaten?
Er is eigenlijk weinig verschil, beiden maken gebruik van een fetch instructie die record per record
ophaalt. Embedded SQL maakt wel specifiek gebruik van cursors die opgehaald worden en in
verschillende variabelen gestoken worden, terwijl je bij ODBC eerst zegt waarin de resultaten
terecht gaan komen en dan gewoon de handle fetcht.
11
Wat is, gezien het bestaan van ODBC, het nut van SQL/CLI?
Naast environment-, connection- en statement-records zijn bij SQL/CLI (Call Level Interface) ook
description-records toegevoegd, om extra informatie te krijgen over tuples.
12
Bespreek de hoofdcomponenten van de OLE DB/ADO-architectuur. In welke opzichten
verschilt OLE DB/ADO van ODBC?
OLE DB = object linking and embedding for databases
ADO = ActiveX Data Objects
Gebruikers communiceren (eventueel via ADO) met het OLE DB gedeelte via een call-level API.
Dat gedeelte geeft informatie door aan COM-objecten (die bekend staan als 'data providers'),
die dan communiceren met het dbms. Er kunnen ook extra COM-objecten toegevoegd worden om
voor extra functionaliteit te zorgen. Deze COM-objecten heten 'service providers'.
Het verschil tussen OLE DB/ADO en ODBC is dat COM-objecten meer uiteenlopende
functionaliteit hebben dan drivers. Bij een relationele database zal een COM-object werken als een
driver, bij een tekstbestand zal een beperkter aantal functies ondersteund worden.
Er kan dus m.b.v. verschillende drivers uit verschillende soorten bronnen informatie gehaald
worden.
Zie ook figuur 8.8, pagina 259 ter illustratie.
13
Waarvoor worden 'connection'-, 'command'- en 'recordset'-objecten gebruikt in OLE
DB/ADO?
Connection: verbinding met databron, en verbindingsparameters initialiseren.
Recordset: resultaten van zoekopdrachten ophalen.
Command: zoekopdrachten met parameters of opdrachten die geen zoekopdracht zijn.
14
Wat zijn dynamische webpagina's? Hoe kun je vanuit webpagina's databasetoegang
verkrijgen?
Dynamische webpagina's zijn pagina's die dynamisch worden opgebouwd als de gebruiker
gegevens uit een database of andere bron opvraagt. Databasetoegang gebeurt via de API of
indirect via de webserver d.m.v. bv. PHP, JSP, ASP.
Hoofdstuk 9: Beveiliging tegen ongeoorloofd gebruik
1
Wat zijn de grootste gevaren bij ongeoorloofd gebruik van databases?
De grootste gevaren bij ongeoorloofd gebruik zijn diefstal en fraude, schending van de privacy,
beschadiging van de database en sabotage van het databasesysteem.
2
Waardoor wordt een goede beveiligingsstrategie gekenmerkt?
Een goede beveiligingsstrategie wordt gekenmerkt door aandacht te besteden aan het beveiligen
van alle componenten: gebruikers, hardware, software en data. Bovendien moet niet enkel
kwetsbare punten aangepakt worden, maar moet men ook vooruitkijken om te weten wat er moet
gedaan worden als er aldanniet met succes wordt geprobeerd om de beveiligingen te omzeilen of
uit te schakelen.
3
Situeer en bespreek kort het gebruik en nut van toegangscontrole, toegangsbeperking,
auditbestanden, versleuteltechnieken en views.
Toegangscontrole: zorgen dat enkel de juiste mensen in de database binnenmogen
Toegangsbeperking: gebruikers mogen enkel bepaalde acties uitvoeren
Auditbestanden: opmerken verdachte gebruikerspatronen, of achteraf de indringer vinden
Versleuteltechnieken: zorgen dat de data, zelfs bij diefstal, niet gecompromitteerd wordt/leesbaar
is
Views: enkel bepaalde data zichtbaar maken
4
Wat is authenticatie? Wat is volgens jou de veiligste vorm van authenticatie? Discussieer.
Authenticatie is controleren of de gebruiker inderdaad de persoon is voor wie hij zich uitgeeft. De
veiligste methode zou zijn om alle mogelijke authenticaties tezamen te gebruiken (wachtwoorden,
smartcard, stemscan, vingerafdruk, netvliesscan). Zelfs al deze beveiligingen kunnen echter nog
teniet worden gedaan door de persoon met alle wachtwoorden en nodige eigenschappen te
bedreigen.
Een oplossing hiervoor zou misschien zijn om bv. de nodige wachtwoorden te verspreiden over
meerdere personen. Natuurlijk is meer beveiliging onpraktischer, bv. als de persoon met alle
rechten tot de database plots sterft.
5
Wat zijn privileges? Waarom wordt er gewerkt met privileges en niet met beperkingen die
het gebruik van instructies verbieden?
Een privilege is een instructie waarvoor expliciet toestemming wordt verleend. Er wordt niet met
beperkingen gewerkt omdat een gebruiker niet zou klagen als ze hem een beperking zijn vergeten
toekennen. Zo kan die gebruiker dan misschien aan gegevens die hij niet zou mogen zien.
Als je echter een privilege bent vergeten toekennen zal de gebruiker wel komen klagen en kan je
hem het extra privilege geven als het nodig is.
6
Wat wordt bedoeld met een contextafhankelijke privilege? Wat wordt bedoeld met een
verlaten privilege?
Contextafhankelijk: privileges hangen af van voorwaarden (bv. enkel toegang op bepaalde dag)
Verlaten: toegekend door persoon die ondertussen zelf dat privilege niet meer heeft
7
Bespreek de 'RESTRICT' en 'CASCADE'-opties bij de REVOKE-instructie.
RESTRICT: enkel van huidige gebruiker privileges verwijderen als dat niet leidt tot verlaten
privileges, anders faalt de operatie
CASCADE: ook privileges verwijderen van gebruikers die van huidige gebruiker privileges
gekregen hebben
8
Wat zijn de voor- en nadelen van het spreiden van de verantwoordelijkheden van een DBA
via gebruikersprofielen? Discussieer.
+ Er is niet 1 persoon met de volledige macht over de volledige database, dus is er minder kans
dat de volledige database gecompromitteerd wordt als die persoon niet betrouwbaar is.
- Om sommige zaken te verwezenlijken ga je meerdere personen nodig hebben, dus wordt het
ingewikkelder om globale aanpassingen te maken.
- Niemand heeft een totaalbeeld van de databank.
9
Hoe werkt een toegangsbeperking met beveiligingsniveaus?
Gebruikers kunnen enkel zaken lezen van beveiligingsniveau gelijk aan of lager dan hun
toegangsniveau, en enkel gegevens schrijven waarvoor het beveiligingsniveau groter dan of gelijk
is aan hun toegangsniveau.
10
Pas de beperkingen uit het protocol van Bell en La Padula aan zodat ze bruikbaar zijn in
een situatie waar beveiligingsniveaus worden gecombineerd met privileges.
(Dat protocol is dat hierboven.)
Gebruikers krijgen enkel leesprivileges voor hun eigen en lagere niveaus, terwijl ze enkel
schrijfprivileges krijgen naar eigen en hogere niveaus.
11
Wat is polyinstantiatie? Geef een concreet voorbeeld van hoe dit kan ontstaan.
Polyinstantiatie wil zeggen dat op verschillende toegangsniveaus verschillende attribuutwaarden
worden weergegeven.
Dit kan bv. ontstaan bij organisaties met een verborgen agenda of zo waarbij enkel de grote bazen
bepaalde data kunnen zien.
Neem bv. de database van uitgaven van Wayne Enterprises (Batman). Daarin zal voor gewone
gebruikers waarschijnlijk de uitgaven voor wapens voor Batman als iets anders benoemd worden
dan wat zichtbaar is voor Bruce Wayne zelf.
12
Volgens welke principes werkt statistische bevraging? Waarom worden 'query restriction'
en 'data swapping' gebruikt? Waarom beperken deze de bruikbaarheid van de database?
Het idee achter toegangsbeperking door statistische bevraging is dat een gebruiker slechts
geaggregeerde data uit de database mag opvragen. Opzoekinstructies die exacte gegevens over
individuele records opvragen, zijn verboden.
Query restriction dient om het aantal opzoekinstructies die een gebruiker mag uitvoeren te
beperken. Dit is dus onpraktisch als je veel queries moet uitvoeren.
Data swapping manipuleert de database zodat de statistische informatie correct blijft (maar de
rest niet echt meer, bv. door permuteren en verplaatsen van waarden). Dit is heel vervelend als je
iets anders moet weten dan statistische informatie.
13
Wat zijn 'before images' en 'after images'? Hoe zou je die zelf concretiseren bij een
relationele database? Hoe bij een objectgeoriënteerde database?
Dit zijn respectievelijk de toestanden van de componenten vóór en nadat de instructie werd
uitgevoerd.
Bij een relationele database kun je bv. de tabellen die overschreven worden (nieuwe en oude
toestand) ergens opslaan.
Bij objectgeoriënteerde databases kun je gewoon extra overgangsobjecten maken waarin je zowel
de oude als nieuwe waarde opslaat.
14
Welke nadelen heeft het versleutelen van een volledige database?
Door versleuteling vertraagt de toegang tot de database aangezien hij voor elke instructie
gedecodeerd moet worden.
Bovendien zouden in dit geval alle gebruikers met toegang tot de database de sleutel moeten
kennen, wat helemaal niet veilig is.
15
Welke voor- en nadelen heeft het werken met symmetrische versleutelalgoritmen ten
opzichte van asymmetrische versleutelalgoritmen?
+ korte uitvoeringstijd
- minder veilig
16
Wat zijn de voor- en nadelen van versleuteling door een dbms?
+ eenvoudig te implementeren
+ je hoeft toepassingsprogramma's niet aan te passen (ze moeten niet zelf de versleutelalgoritmen
oproepen zoals bij encryptie door externe software)
- kost resources (rekentijd) voor het dbms dat zelf moet instaan voor het versleutelen en
decoderen
- codeer en decodeersleutels worden in de catalogus bewaard, wat minder veilig is dan ze extern
te bewaren
Hoofdstuk 10: Beveiliging tegen falen
1
Waarom worden transacties gebruikt in databasesystemen? Welke problemen zou men
tegen kunnen komen, als men niet met transacties werkt?
Een transactie is een hoeveelheid werk (één of meerdere instructies) waarvan het dbms
garandeert dat het ofwel volledig met succes wordt uitgevoerd, ofwel helemaal niet wordt
uitgevoerd.
Het wordt gebruikt om te zorgen dat de database niet inconsistent wordt. Als men niet met
transacties zou werken, zou men bv. het probleem kunnen krijgen dat instructies maar gedeeltelijk
uitgevoerd worden en data inconsistent wordt.
Extra (prof zei van dit vanbuiten te kennen):
Transacties voldoen aan de ACID-eigenschappen. (Atomair, Consistent, Isolatie en Duurzaam)
Atomair: ofwel volledig uitgevoerd, ofwel niet
Consistent: zet database om van een consistente toestand naar een andere
Isolatie: impact van instructies van een transactie niet zichtbaar voor een andere transactie zolang
de ene transactie niet beëindigd is
Duurzaam: resultaten van succesvol uitvoeren transactie moeten permanent geregistreerd zijn in
de database
2
Waarom moeten transacties geïsoleerd van elkaar worden uitgevoerd?
Omdat een gedeelte van de database tussen het begin en einde van een transactie inconsistent
kan zijn. Als op dat moment bv. een andere transactie een leesoperatie uitvoert op een deel van de
database dat beschreven wordt door een andere transactie, kan 'garbage data' gelezen worden.
3
Wat zijn impliciete transacties? Wat zijn expliciete transacties?
Impliciete transacties zijn alle instructies voor een dbms.
Expliciete transacties zijn een reeks verschillende instructies (impliciete transacties) die als een
logisch geheel moeten uitgevoerd worden (als één grote transactie). De gebruiker geeft dan zelf
het begin en einde van de transactie aan.
4
Kijk naar de volgende sequentie van instructies. Waar worden synchronisatiepunten gezet?
Welke instructies worden respectievelijk ongedaan gemaakt met elk van de drie 'ROLLBACK
WORK'-instructies?
SELECT... UPDATE... ROLLBACK WORK INSERT... START TRANSACTION... UPDATE...
DELETE... ROLLBACK WORK SELECT... INSERT... ROLLBACK WORK
ROLLBACK WORK maakt alle instructies tussen ROLLBACK WORK en laatste sync ongedaan.
Als autocommit uit staat, enkel sync bij eerste SQL-instructie, dus ROLLBACK maakt telkens alles
ongedaan. (Normaal wordt er een syncpunt geplaatst na elke COMMIT WORK, maar deze komen
hier niet expliciet voor.)
sync
SELECT
sync
UPDATE
sync
(altijd syncpunt in begin)
(autocommit bij select)
(autocommit bij update)
ROLLBACK WORK
INSERT
syncpunt
START TRANSACTION
UPDATE
DELETE
ROLLBACK WORK
SELECT
sync
INSERT
sync
ROLLBACK WORK
5
( autocommit bij insert)
(autocommit bij select) (?)
(autocommit bij insert)
Geef twee voorbeelden van situaties waarbij een expliciete transactie is vereist.
Een museum dat een schilderij ruilt voor twee andere schilderijen van een ander museum. Er dient
hiervoor een verwijderoperatie en twee toevoegoperaties uitgevoerd te worden.
Andere voorbeelden met ruilen mogelijk.
6
Wat is het verschil tussen een 'soft crash' en een 'hard crash'? Geef drie voorbeelden van
situaties waarbij zich een 'soft crash' voordoet en drie voorbeelden van situaties waarbij zich een
'hard crash' voordoet.
Soft crash: databasebuffers gaan verloren
Hard crash: volledige/deel van de databank zelf (secundaire geheugen) gaat verloren.
Hard: overstroming, vliegtuigcrash in het gebouw waar de database staat, blikseminslag op
databaseservers
Soft: uitvallen elektriciteit, delen door nul, bug in dbms
7
Stel dat men beschikt over 200 euro. Een bijkomende magneetschijf, een systeem voor
beveiliging tegen stroompieken en een systeem voor beveiliging tegen stroomuitval kosten elk 100
euro. Hoe zou jij de 200 euro besteden? Motiveer je antwoord.
Ik zou gaan voor bescherming tegen stroompieken (want die kunnen je schijven kapotkrijgen) en
een bijkomende magneetschijf voor backup. Stroomuitval is toch maar een soft crash.
Eigenlijk kan elk antwoord hier werken als je het maar motiveert, denk ik.
8
Wat stelt de 'write-ahead log'-regel? Waarom is deze belangrijk?
Die regel stelt dat de commit eerst in de log geregistreerd wordt en daarna pas uitgevoerd wordt.
Dit is belangrijk omdat bij eerst committen en dan loggen als het systeem crasht tussen beide
acties, niet bijgehouden zijn welke transactie gebeurd is en kan bij het herstellen van het systeem
niet geweten zijn dat die transactie uitgevoerd dient te worden.
9
Waarom worden logbestand en de databasebestanden het best in aparte geheugens
bewaard?
Om te zorgen dat niet beiden tegelijk verloren gaan. Je hebt immers minstens één van beide nodig
om de data te herstellen.
10
Welke twee basistechnieken worden er gebruikt bij RAID-technologie?
Mirroring, kopieën om falen van magneetschijfgeheugen op te vangen en striping, om lees- en
schrijftoegang tot de tragere magneetschijfgeheugens te versnellen.
11
Bespreek de werking van de databasebuffers. Wat is 'flushing'? Waarom is 'flushing' nodig?
De databasebuffers zijn de plaats in het primaire geheugen waarin alle bewerkingen,
aanpassingen en leesoperaties gebeuren.
Flushing is het doorsturen van de gegevens in de databasebuffers naar het secundaire geheugen.
Dit is nodig omdat de plaats in het primair geheugen beperkt is en het geheugen bovendien niet
persistent is, dus bij het afsluiten van de stroom wordt het primaire geheugen gewist.
12
Wat houdt een 'steal, no force'-strategie in?
Steal: flushing mag uitgevoerd worden terwijl er onbevestigde transacties zijn.
No force: flushing mag niet door een impliciete of expliciete commit-instructie veroorzaakt worden.
13
Waarvoor worden controlepunten gebruikt? Waarom is het nodig om een lijst met
identificaties van aan de gang zijnde transacties weg te schrijven bij een controlepunt?
Een controlepunt is een tijdstip waarop de database en het logbestand worden gesynchroniseerd
door alle databasebuffers te 'flushen'. Dit zorgt ervoor dat bij een soft crash niet vanaf de vorige
back-up moet hersteld worden.
Het bijhouden van die lijst is nodig omdat transacties die nog bezig waren tijdens het controlepunt,
opnieuw dienen uitgevoerd te worden als teruggekeerd wordt naar dat controlepunt.
14
dit.
Wat zijn de basisprincipes van hersteltechnieken met uitgestelde aanpassing? Bespreek
Databasesystemen volgen een no steal strategie. Er kunnen dus geen transacties bezig zijn op
controlepunten.
–
–
–
–
Elke transactie wordt eerst geregistreerd in het logbestand.
Instructies die de database aanpassen worden niet uitgevoerd, noch in de databasebuffers,
noch in de database, totdat de after image klaar is.
Voor elke commit van een transactie wordt een COMMIT-instructie weggeschreven naar
het logbestand met 'write-ahead log'-regel. De after image wordt gebruikt om de wijziging
uit te voeren.
Als een transactie wordt afgebroken, wordt de registratie van de transactie in het
logbestand genegeerd.
Bij een soft crash worden dan voor alle transacties waarvoor er een commit in het logbestand staat
de after image (in volgorde) terug opgeroepen.
15
Wat zijn de basisprincipes van hersteltechnieken met onmiddellijke aanpassing? Waarom
worden deze in de praktijk het meeste gebruikt? Bespreek dit.
Databasesystemen volgens de steal, no force strategie. Deze worden in de praktijk het meeste
gebruikt omdat ze het efficiëntst is qua verwerkingskracht en primair geheugen.
Er worden before en after images weggeschreven naar het logbestand bij iedere instructie die de
database aanpast. Onmiddellijk daarna worden de aanpassingen doorgevoerd in de
databasebuffers.
–
–
–
–
–
–
maak lege undo en redo lijst
ga naar recentste controlepunt, plaats de transacties die bezig waren op dat moment in de
undo lijst
doorloop nu naar einde en plaats alle transacties die beginnen in de undo lijst
kom je een commit tegen van een transactie, verplaats die dan naar de redo lijst
doorloop nu terug in omgekeerde richting en do alle undo's
doorloop nu terug naar einde logbestand en do alle redo's
16
Hoe werken hersteltechnieken met schaduwpagina's? Wat zijn de voor- en nadelen van
deze technieken?
Alle gegevens worden 2 keer bijgehouden. De schaduwpagina's en werkpagina's hebben bij het
begin van de transactie dezelfde inhoud, maar enkel de werkpagina wordt tijdens de transactie
aangepast. Aan het einde van de transactie (commit) worden de wijzigingen gekopieerd naar de
schaduwpagina's.
+ geen logbestand nodig
+ geen omslachtige undo- en redo-operaties nodig
- magneetschijfgeheugen raakt er versnipperd door (fragmentatie) en er komt veel ongebruikte
(opnieuw vrijgemaakte) geheugenruimte tussen de data te staan
17
Is het werken met schaduwpagina's verwant met 'mirroring' bij RAID-systemen? Verklaar je
antwoord.
Ja, men kan de schaduwpagina's op een tweede schijf plaatsen.
Bij een RAID-systeem kan je met mirroring zo met de ene schijf de andere herstellen.
Schaduwpagina's kunnen zo analoog de database herstellen.
Hoofdstuk 11: Delen van gegevens
1
Wat is het verschil tussen parallelle transacties en 'interleaved' transacties?
Parallelle transacties kunnen uitgevoerd worden als er meerdere processors zijn.
Als er echter meer gelijktijdige transacties zijn dan processors, verdelen de processors hun
werktijd over de verschillende transacties, zodat ze interleaved verwerkt worden: een gedeelte
van een transactie (A) wordt uitgevoerd, vervolgens een gedeelte van een andere transactie (B),
en daarna kan weer een deel van A uitgevoerd worden.
~Tekening~
2
Wat zijn 'lost update'-problemen, 'uncommitted dependency'-problemen en problemen van
inconsistente analyse? Geef voor elk van deze een voorbeeld.
Voor deze vraag best tekeningen maken op examen.
Makeshift tekeningen:
Lost update:
Transactie A
Tijd
Transactie B
lees d
t1
/
/
t2
lees d
pas d aan
t3
/
vorige aanpassing gaat
verloren!
t4
pas d aan
Transactie A
Tijd
Transactie B
lees d = 9
t1
/
/
t2
lees d = 9
d + 1 = 10
t3
/
vorige aanpassing gaat
verloren!
t4
d+ 1 = 10
Transactie A
Tijd
Transactie B
/
t1
pas d aan
lees d
t2
/
d wordt ongeldig!
(aanpassing d door B
ongedaan gemaakt)
t3
ROLLBACK
Resultaat: d = 10, bedoeling d = 11
Uncommitted dependency:
Transactie A
Tijd
Transactie B
/
t1
d + 1 = 10
lees d = 10
t2
/
d wordt ongeldig!
(aanpassing d door B
ongedaan gemaakt)
t3
ROLLBACK
A had dus d = 9 moeten lezen, niet d = 10
Inconsistente analyse:
Een transactie past gegevens aan terwijl een andere transactie deze gegevens nog aan het
verwerken is.
Transactie A
Tijd
Transactie B
d1
d2
d3
lees d1, totaal = 45
t1
/
45
30
25
lees d2, totaal = 75
t2
/
45
30
25
/
t3
lees d3
45
30
25
/
t4
pas d3 aan
45
30
15
/
t5
lees d1
45
30
15
/
t6
pas d1 aan
55
30
15
/
t7
COMMIT
55
30
15
lees d3, totaal = 90
t8
/
55
30
15
Het totaal is fout en had 100 moeten zijn.
3
Wat wordt bedoeld met 'dirty read', 'nonrepeatable read' en 'phantom read'?
Dirty read: bij een uncommitted dependency-probleem werkt een transactie verder met gegevens
die niet langer geldig zijn. Het lezen van onbevestigde (niet-'gecommitte' data) noemen we 'dirty
read'.
Nonrepeatable read: een transactie vraagt meermaals dezelfde gegevens op, maar krijgt telkens
andere waarden (omdat een andere transactie aanpassingen heeft doorgevoerd).
Phantom read: meermaals een opzoekinstructie uitvoeren, en bij het resultaat een extra record
vinden (tussen de 2 opvragingen toegevoegd door een andere transactie).
4
Welke 'concurrency'-controlemechanismen bestaan er? Analyseer het dbms dat u
momenteel gebruikt en ga na welke methode/protocol voor 'concurrency'-controle door het dbms
wordt gebruikt.
Serialiseren, timestamping, locking en optimistische methoden.
De eerste drie worden in de volgende vragen nog besproken, voor de laatste:
Optimistische methoden: Net voor het succesvol beëindigen en bevestigen van een transactie
wordt gecontroleerd of zich geen ‘concurrency’-problemen met de transactie hebben voorgedaan.
Is dit zo dan wordt de transactie afgebroken en opnieuw opgestart
5
Wat is serialiseerbaarheid? Waarom is dit praktisch nuttig?
Serialiseerbaarheid: als instructiesequenties van parallelle transacties om te zetten zijn naar
een seriële sequentie, en dezelfde resultaten produceert.
Als instructies serialiseerbaar zijn, kan men ze zonder problemen gelijktijdig/interleaved uitvoeren.
6
Wat zijn isolatieniveaus? Waarvoor worden isolatieniveaus gebruikt? Welke isolatieniveaus
worden ondersteund in SQL?
Het isolatieniveau is de parameter voor het instellen van de gewenste vorm van isolatie.
Isolatieniveaus worden gebruikt om te bepalen hoe sterk verschillende instructies van elkaar
geïsoleerd moeten zijn om gelijktijdig uitgevoerd te mogen worden.
Volgende niveaus worden ondersteund:
– Read uncommitted, lees uncommitted data
– Read committed, beveiliging tegen dirty read
– Repeatable read, beveiliging tegen dirty read en nonrepeatable read
– Serializable, volledig veilig, alle instructies moeten serialiseerbaar zijn
7
Hoe werkt 'timestamping'? Geef de basisregels en beschrijf het 'twee-fase locking'-protocol
dat is gegeven in dit hoofdstuk.
Een timestamp is een unieke identificator die de relatieve starttijd van een transactie aanduidt.
Deze wordt toegekend aan elke transactie.
Een transactie lezen of aanpassen wordt enkel toegestaan als de recentste aanpassing op dat
gegeven gebeurde door een oudere transactie.
In het andere geval wordt het lezen of aanpassen geweigerd en wordt de transactie ongedaan
gemaakt (rollback) en opnieuw gestart met een nieuwe, recentere timestamp.
Protocol:
i.
Transactie T wil d lezen
timestampT aanpassing−timestamp d 
a.
– rollback T en opnieuw starten met nieuwe timestamp
timestampT aanpassing−timestampd 
b.
– uitvoeren leesoperatie van T en actualiseren lees-timestamp van d met
lees−timestamp d =maxtimestamp T  , lees−timestamp d 
ii.
Transactie T wil d aanpassen
timestampT lees−timestamp d 
a.
– rollback T en opnieuw starten met nieuwe timestamp
timestampT aanpassing−timestamp d 
b.
– rollback T en opnieuw opstarten met nieuwe timestamp
c.
alle andere gevallen
– uitvoeren aanpassingsoperatie van T en aanpassing-timestamp van d actualiseren
met aanpassing −timestamp d =timestamp T 
8
Bespreek de aanpassingsregel van Thomas.
De aanpassingsregel van Thomas stelt dat bij stap 2b van het algoritme de aanpassingsoperatie
van T veilig kan genegeerd (we voeren T niet uit) worden zonder T af te breken (rollback), dus er is
geen rollback nodig.
Je moet dan wel een extra transactie uitvoeren om te zorgen dat de genegeerde aanpassing van
de T later wordt uitgevoerd.
9
Hoe werkt 'locking'? Geef de basisregels en beschrijf het 'twee-fase locking'-protocol dat is
gegeven in dit hoofdstuk.
Een lock is een soort van reservering op een gegeven, waardoor een transactie een exclusieve of
gedeelde toegang tot het gegeven krijgt en de gewenste operatie kan uitvoeren.
Een transactie die een gegeven wil lezen, moet daartoe eerst een gedeelde lock (read lock) op
het gegeven hebben gekregen van het dbms.
Een transactie die een gegeven wil aanpassen, moet daartoe eerst een exclusieve lock (write
lock) op het gegeven hebben gekregen van het dbms.
Het 'twee-fase locking'-protocol houdt in dat een transactie kan worden opgedeeld in twee
fasen. In de eerste fase, die we de groeifase noemen, kan de transactie 'locks' aanvragen en
toegekend krijgen. In de tweede fase, de krimpfase, worden de verkregen 'locks' vrijgegeven.
Tijdens de krimpfase kan de transactie geen nieuwe 'locks' meer verkrijgen.
10
Wat is het praktische nut van het 'twee-fase locking'-protocol?
'Twee-fase locking'-theorema: Als alle transacties werken volgens het 'twee-fase locking'protocol, dan zijn de instructiesequenties van alle 'gelijktijdige' uitvoeringen van deze transacties
serialiseerbaar.
Ze gebruiken immers allemaal verschillende gegevens om aan te passen en gegevens die gelezen
worden, kunnen op dat moment niet aangepast worden.
11
Wat wordt bedoeld met granulariteit? Bespreek granulariteit bij 'timestamping'- en 'locking'methoden.
Granulariteit is de grootte van de data-eenheid waaraan een timestamp/lock wordt toegekend. Dit
kan de volledige database zijn, een collectie van records, 1 record, 1 attribuut, ... Hoe kleiner de
granulariteit, hoe meer timestamps/locks.
12
Wat is een 'livelock'? Wat is een 'deadlock'?
Livelock: als een transactie voortdurend geen lock krijgt (bijvoorbeeld omdat de transactie een
exclusief lock nodig heeft, maar er voortdurend andere transacties 'voorsteken' die een gedeeld
lock nodig hebben, of ze hebben ook een exclusieve lock nodig, maar krijgen die gewoon steeds
eerder dan het reeds wachtende proces).
Deadlock: als meerdere transacties geen lock krijgen omdat ze wachten totdat een van de andere
transacties een bepaald lock vrijgeeft. Stel het voor in een cirkel, waarbij elke transactie een lock
heeft die de volgende nodig heeft, waardoor nooit een van hen al zijn nodige locks heeft, waardoor
dus heel het systeem vast blijft zitten.
13
Hoe kan een 'deadlock' worden gedetecteerd?
–
–
Met een 'wacht voor'-graaf (veel werk)
Met een time-out (soms krijg je dan wel valse positieven)
14
Wat is een 'wacht voor'-graaf? Is het voordeliger dat een dbms een 'wacht voor'-graaf
dynamisch zou bijhouden, in plaats van na verloop van tijd telkens opnieuw op te bouwen?
Verklaar je antwoord.
Een 'wacht-voor'-graaf is een gerichte graaf waarvan de knopen transacties voorstellen en een
gerichte boog van de knoop voor transactie A naar de knoop voor transactie B aanduidt dat
transactie A wacht om een gegeven te kunnen 'locken' dat momenteel 'gelockt' is door transactie
B. Als er een cyclus voorkomt in die graaf, is er sprake van een deadlock.
Het dynamisch bijhouden van de wacht-voor graaf zorgt voor een voortdurende kost op de
database. Als men een beperkt budget heeft qua hardware, kan het voordelig zijn om slechts nu
en dan een wacht-voor graaf op te bouwen (en dan gewoon op 1 moment de database sterk te
vertragen).
Deze sterke vertraging zorgt echter wel dat op dat ene moment gegevens in het geheel niet
bereikbaar zijn.
Download