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 timestampT aanpassing−timestamp d a. – rollback T en opnieuw starten met nieuwe timestamp timestampT aanpassing−timestampd b. – uitvoeren leesoperatie van T en actualiseren lees-timestamp van d met lees−timestamp d =maxtimestamp T , lees−timestamp d ii. Transactie T wil d aanpassen timestampT lees−timestamp d a. – rollback T en opnieuw starten met nieuwe timestamp timestampT 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.