IS0-dictaat deel 1 Databases en database-managementsystemen DBMS Databases Een database (gegevensbank) bevat over het algemeen zéér veel gegevens, van grote aantallen gegevenstypes, waarbij op de een of andere manier een verband bestaat tussen die verschillende gegevenssoorten. Databases zijn bijna altijd zodanig ontworpen, dat gegevens niet (of: zo weinig mogelijk) meervoudig worden opgeslagen. Voor het werken met een database wordt database-management-software gebruikt. Voorbeelden van databases zijn: • Voor een bibliotheek worden in een gegevensbank de gegevens bijgehouden over boekencatalogus, leden, exemplarenbezit, uitleningen (welk exemplaar aan welk lid), reserveringen (welk boek voor welk lid) e.d.. • Voor een bedrijf worden in een database product-, klant-, toeleverbedrijf-, inkoop-, verkoop-, magazijn- en financiële gegevens bijgehouden. • Bij een gemeente worden in database(s) gegevens bijgehouden over inwoners, paspoorten en rijbewijzen, (honden)belasting, percelen, bebouwing, bestrating, leidingen, e.d.. Een belangrijk aspect bij het gebruiken van een gegevensbank is, dat er voorzorgsmaatregelen worden genomen op het gebied van data-integriteit en van gegevensbeveiliging. Dit betekent respectievelijk, dat enerzijds moet worden voorkomen dat er foutieve gegevens in de database komen (b.v. dat een niet-bestaand boek-exemplaar aan een nietbestaand bibliotheeklid is uitgeleend) en dat anderzijds moet worden voorkomen dat onbevoegden toegang hebben tot niet voor hen bedoelde gegevens (b.v. dat werknemers hun eigen salarisschaal kunnen veranderen). Op databases gebaseerde informatiesystemen zijn tegenwoordig van cruciaal belang voor bedrijven en organisaties. Grote en middelgrote bedrijven zijn er dusdanig afhankelijk van geworden, dat de meesten het economisch níet overleven als hun informatiesystemen gedurende enkele weken zouden uitvallen. Elementen van een databasesysteem Het is vaak belangrijk om je óók van een databasesysteem een model te vormen; een veel gebruikte mogelijkheid daarvoor biedt ons het zogenaamde ANSI/SPARC-model, dat in een databasesysteem dríe niveau’s onderkent: • het externe niveau, dat voor alle gebruikers verschillend kan zijn en afhangt van de wijze waarop zo’n gebruiker tegen de gegevens in een organisatie aankijkt. Vaak omvat een gebruikersview slechts een deel van de gegevens (en hun samenhang) die op het conceptuele niveau worden beschreven. De user interfaces die de gebruiker van het systeem kent, zullen met zijn gebruikersmodel moeten corresponderen. • het conceptuele niveau (ook wel: logische niveau), waarbij álle in de database aanwezige gegevens en hun onderlinge samenhang worden beschreven, zonder dat daar de wijze waarop fysiek (lees: op intern niveau) de gegevens op een opslagmedium zijn opgeslagen. Dit model vormt een basis voor het bepalen van: • het interne niveau, waarin beschreven wordt hoe de gegevens op een efficiënte wijze worden opgeslagen, zodanig dat ze bijvoorbeeld snel terug kunnen worden gevonden. Het ontwikkelen van een databasesysteem begint in de praktijk met het vaststellen en analyseren van het externe model, gevolgd door het opstellen van een conceptueel model en het vandaaruit afleiden van het interne niveau. Om je eerst een idee te laten vormen van databasesystemen beginnen we in deze cursus met het interne niveau. Basisgegevensstructuren Bij heel veel soorten gegevens die binnen een organisatie van (vaak levens-) belang zijn, bestaat er een relatie tussen de verschillende delen waaruit een gegevensrecord is opgebouwd. Als voorbeelden geven we de mogelijke structuur en de inhoud van een klant-record: klantnr naam voorletters adres postcode plaats telefoon 34521 Jansen J.K.L. Annastraat 357 6515 XT Nijmegen 024-3362718 KUN / Informatica / IS-0-cursus 1 en van een verkoop-record: klantnr productnr 34521 8439A bedrag leverdatum 135,50 15-09-2002 betaaldatum In voorgaand gegevensrecord is het laatste gegevensveld leeg gelaten (er is blijkbaar nog niet betaald). Ga voor jezelf na, dat een ènkel, geïsoleerd gegevensrecord-deel (zoals een losstaand bedrag) geen zinvolle betekenis heeft. Database Management Systemen (DBMS' s) zijn oorspronkelijk (vooral) ontwikkeld om te werken met gegevensre cords die strak gedefinieerd zijn. Voor het boven aangeduide klant-record kan bijvoorbeeld als recorddefinitie gelden, dat: • het klantnummer een getal van (maximaal) 5 cijfers moet zijn; • de klantnaam uit maximaal 12 tekens mag bestaan; • in het voorletters-veld plaats gereserveerd is voor 10 tekens; • verder mag: het adres-veld maximaal 18 tekens, het postcode-veld 7 tekens, het plaatsnaam-veld 12 tekens en het telefoon-veld maximaal 11 tekens bevatten. Deze starre structuur met vaststaande veldlengten bleek nodig om de software efficiënt (= snel) te laten werken. Al vrij snel bleek de noodzaak om ook minder gestructureerde gegevens te kunnen opslaan. Daarvoor werden met een record zogenaamde memo-velden van onbepaalde omvang geassocieerd; daar konden dan bijvoorbeeld stukken tekst zoals opmerkingen, voortgang van een project e.d. in worden opgeslagen. Bij modernere software bestaat vaak de mogelijkheid om in een aan een star gegevensrecord geassocieerd speciaal soort veld (een 'general field') ook plaatjes, geluid, filmpjes e.d. op te nemen. Sinds eind tachtiger jaren wordt voor een groeiend aantal toepassingen gebruik gemaakt van 'objecten' . Deze objecten beschikken behalve over gegevens (al dan niet in een gegevensrecord) ook over verwerkingsmethoden, die voor verschillende objecttypen verschillend kunnen zijn. Bij het opslaan van zulke objecten in een gegevensbestand worden dan naast de gegevens ook informatie opgeslagen over wat voor sóórt object dat wel is, zodat bij teruglezen bekend is wat er voor operaties op de gegevens mogelijk zijn. Zo werken teken-programma' s (al dan niet CAD/CAM) met opslag van objecten (lijnen, cirkels, gearceerde rechthoeken e.d.). Soorten database-managementsystemen (DBMS’s) Er bestaan meerdere soorten database-managementsystemen (DBMS’s). De begin zeventi ger jaren opgekomen DBMS’s volgens het zoge naamde hiërarchische model of volgens het zogenaamde netwerk-model, worden tegenwoordig voor de meeste toepassingen als ‘verouderd’ gezien (ze zijn vaak weliswaar ‘snel’, maar wel erg rigide in hun structuur en daardoor moeilijk aan te passen aan veranderende organisatie-omstandigheden en -wensen; zie voor een beschrijving van deze modellen de ‘bijlage 1’ bij dit collegedictaat). Voor bedrijfsadministratieve systemen gebruikt men tegenwoordig hoofdzakelijk zogenaamde relationele databases en bijbehorende relationele database-managementsystemen (RDBMS’s); deze zijn sinds het begin van de tachtiger jaren sterk opgekomen. Een groot voordeel van dit soort databases is, dat hun structuur relatief gemakkelijk aan te passen is aan veranderende bedrijfsomstandigheden; ze zijn dus vrij flexibel. Relationele databases zijn opgebouwd uit meerdere, gerelateerde gegevenstabellen, waarin telkens intern gestructureerde gegevensrecords zijn opgeslagen en waarbij de gegevensrecords uit die afzonderlijke gegevenstabellen op een systematische en gestructureerde manier aan elkaar gekoppeld kunnen worden. Via de onderlinge koppeling van gegevenstabellen is het opzoeken van gegevens relatief eenvoudig. We richten ons hierna voornamelijk op het gebruik van dit soort DBMS' s en op de daarinbeschikbare datamanipulatie- en opvraagtaal SQL (Structured Query Language). De sinds eind tachtiger jaren ontwikkelde object oriented database-managementsystemen (OODBMS' s) worden toegepast in systemen waarbij gegevens met verschillende eigenschappen worden opgeslagen. Als voorbeeld noemen we het opslaan van de vector graphics afbeeldingen uit CAD/CAM-systemen (Computer Aided Design / Computer Aided Manufacturing). KUN / Informatica / IS-0-cursus 2 Relationele database-management-systemen (RDBMS' s) Zoals reeds vermeld, bevat een relationele database meerdere, gerelateerde gegevenstabellen, waarin telkens intern gestructureerde gegevensrecords zijn opgeslagen en waarbij de gegevensrecords uit die afzonderlijke gegevenstabellen op een systematische en gestructureerde manier aan elkaar gekoppeld kunnen worden. De relationele databases vertonen dat aan-elkaar-gerelateerd-zijn van de gegevenstabellen zelfs op zo’n heldere wijze, dat gegevensbewerkingen binnen deze systemen wiskundig geformuleerd kunnen worden. Voor ons doel is het belangrijk, dat voor dit soort (R)DBMS’s een gemakke lijk te gebruiken data-manipulatie- en opvraagtaal is ontworpen: SQL (Structured Query Language). SQL hoort bij de zogenaamde vierde generatie-talen (4GL) en gebruikt een beperkt aantal, gemakkelijk aan te leren Engelse uitdrukkingen. Verderop gaan we uitvoerig op de mogelijkheden en het gebruik van SQL in. Het ontwerpen van de structuur van die afzonderlijke, binnen een database aan elkaar gerelateerde gegevenstabellen is een kunst op zich (beoefend bij de zogenaamde informatie-modellering). Die structuur moet zodanig zijn, dat binnen een record van de ene gegevenstabel steeds een (sleutel)gegeven gelijk is aan een (sleutel)gegeven binnen een of meer records van een andere tabel; dit zonodig onder gebruikmaking van een (indirecte) koppeling via andere gegevenstabellen. We kunnen via die sleutelgegevens bij wijze van spreken van gegevens in de ene tabel naar gegevens van een andere tabel overspringen. Bij die ontwerpprocedure moet ervoor gezorgd worden, dat de combinatie van tabelstructuren zodanig is, dat gegevens ‘nooit’ meervoudig hoeven te worden opgeslagen. 1 Een voorbeeld van het in een relationele database opslaan van gegevens is te zien in bijgaande figuur, waar getoond wordt hoe van de spelers van een sportvereniging de NAW-lidgegevens, de teamgegevens en de boete-gegevens in afzonderlijke, gerelateerde gegevenstabellen zijn opgeslagen. Spelers Spnr Spelernaam Boetes Straatnaam Plaatsnaam Annastraat 24 Nijmegen Heren Nijmegen Dames 1 K. Huisman 2 P.J. van Onderen Willemstraat 13 4 P. van Oosterom Past. Pietstraat 14Weurt Heren W. De Bom Huilstraat 67 Wychen Spelersnr Bedrag 8 Datum F.G. Habank Vossendijk 288 Nijmegen Heren 9 Zwanenveld 89-90Nijmegen Jeugd1 Kasteel 4 Wychen Jeugd1 Nijmegen Heren 6 Boetenr Teams Teamnaam Teamnaam H. Flits 10 L. Willemsen 1 12/8/89 Klasse Aanvoerder 12 M.E.P. Graag 12 25.00 Broerdijk 234 Dames 2 13 12/8/89 H. Nijboer 12Plein 44 5.00 Arnhem Jeugd1 13 10De Groot 19 13/8/89 K. 34Huilstraat 100.00 63 Wychen Dames Jeugd2 Jeugd2 34 20 13/8/89 B.E. 20 Melmans 28Kasteel 6 25.00 Wychen Jeugd2 25 23 Wychen Jeugd1 Annastraat 24 Nijmegen Jeugd1 Dames Heren 16 24 W. De Bom 36 19/8/89 T. Huisman 6 Huilstraat 67 100.00 20/8/89 12 25 Snelweg 673 Lent Dames 20/8/89 W.Jansen 42Wolvendijk1.00 123 Elst Jeugd2 8 30 20/8/95 D. van Agt 12De Beurs 25.00 12 Groesbeek Jeugd1 9 32 2/9/95 K. Zwartjes 12Past. Pietstraat 5.00 2 Weurt 7 25 28 H. Fluit 25.00 Jeugd1 33 J. Mienen Ekkersrijt 23 Eindhoven Heren 34 H. Blaak Ekkersrijt 28 Eindhoven Jeugd2 36 D.F. Janssen Groenstraat 45 Oss Dames 42 R. Heymans Dreef 24 Grave Jeugd1 44 P. van Oss Dreef 24 Oss Jeugd1 Figuur 1 Voorbeeld van een relationele database met onderling gerelateerde gegevenstabellen Er zijn tegenwoordig RDBMS’s in velerlei smaken en soorten verkrijg baar. Ze bestaan zowel voor mainframes (b.v. IBM’s DB2), voo r mini-computers (zoals Oracle, Sybase, Ingres, etc.) en microcomputers (zoals dBase, FoxPro, Paradox, Clipper, Oracle, Acces, SuperBase, etc.). De laatste jaren is het gebruik van SQL ook hoe langer hoe meer 1 Soms wordt echter net bewust zulke data-redundantie ingebouwd om bepaalde (zoek-)processen sneller te laten verlopen. KUN / Informatica / IS-0-cursus 3 doorgedrongen tot RDBMS’s voor micro -computers (PC’s dus); wel is het SQL van RDBMS’s voor PC’s vaker slechts ‘beperkt’ te gebruiken (d.w.z. een aantal SQL -opties zijn dan niet beschikbaar). In ‘volledige’ SQL/RDBMS’s (op mainframes en mini’s) is het aspect van gegevensbeveiliging bijna altijd ingebouwd. Een database-systeembeheerder kan daarbij via aanvullende SQL-opdrachten aan een gebruiker toestemming verlenen om bijvoorbeeld gegevens in een (bepaalde) gegevenstabel te raadplegen, toe te voegen, te wijzigen en/of te verwijderen. Iemand zonder zo' nautorisatie kan daardoor niet aan die gegevens komen. Data-integriteit moet meestal worden afgedwongen via speciaal geschreven toepassingen voor het gebruikte DBMS. Daardoor moet het bijvoorbeeld onmogelijk worden, dat iemand een postcode-waarde als ‘76 C9 H’ in de database kan invoeren, of de gegevens van een bibliotheeklid kan verwijderen, terwijl de betreffende persoon nog een stapel uitgeleende boeken thuis heeft of nog een boete moet betalen en bij verwijderde lidgegevens nooit meer te achterhalen zou zijn. SQL (Structured Query Language) Het werken met gegevens in een database (of in een geïsoleerd gegevensbestand) is conceptueel gezien uiterst eenvoudig. Er zijn immers maar vier soorten bewerkingen mogelijk: toevoegen, veranderen, verwijderen en opzoeken van gegevens. De taal SQL is zodanig opgezet dat deze vier operaties ermee uitgevoerd kunnen worden. Het is dus niet alleen een opvraagtaal zoals het ‘query’-deel in de naam suggereert, maar ook een data-manipulatie-taal. Daarnaast bevat SQL een aantal mogelijkheden voor gegevensbeveiliging en afdwingen van data-integriteit. SQL hoort bij de zogenaamde vierde generatie-talen (4GL) en gebruikt een beperkt aantal, gemakkelijk aan te leren Engelse uitdrukkingen. Hij is ontworpen voor gebruik met R(elationele) DBMS’s, waarbij dus koppelingen van gegevens in de verschillende gegevenstabellen mogelijk is. Verderop wordt in het tweede deel van dit collegedictaat uitvoerig ingegaan op SQL-1 (de oude SQL-standaard die rond 1986 werd vastgelegd). We hebben in dit tweede deel grote stukken van het SQL1-manual opgenomen, zoals dat meegeleverd werd bij een SQL-RDMS (ISQL/DBQ), dat (in de ogen van de huidige computergebruikers) wat gebruiksonvriendelijk overkomt. 2 SQL-1 biedt voor het ‘beschermen’ van d e integriteit van de gegevens in een database maar weinig mogelijkheden. SQL-2 (waarvan de standaard is vastgelegd in 1992) biedt ons wat integriteitsbewaking betreft veel meer: concepten als ‘primary key’, ‘foreign key’ en ‘check’-mogelijkheden vormen enkele van de uitbreidingen van SQL1 naar SQL2. Daarom is ter afsluting van dit dictaat een stuk over ‘data-integriteits-bewaking’ toegevoegd; mogelijkheden in dat opzicht van SQL1 en SQL2 worden daarin naast elkaar gezet. Î ‘Top down’-aanpak voor het opstellen van SQL-queries Î Voor een systematisch opstellen van een SQL-query moet je tijdens de analyse van een informatievraag steeds beginnen met het nagaan van de volgende aspecten (in de hierna genoemde volgorde): 1. Uit welke gegevenstabel(len) komt/komen de gegevens? 2. In welke kolommen staan de gegevens die nodig zijn (lees meestal: die getoond moeten worden)? 3. Wat is het selectiecriterium voor de mee-te-tellen tabelregels (eventueel: join- of subquery-criterium)? Later komen hier nog verfijnende vragen bij als: • moet er gegevensgroepering plaatsvinden (zoja: is er een groepsselectiecriterium)? • moeten er extreme waarden (minimum, maximum) bepaald worden? • is er een ‘correlated subquerie’ nodig? • en eventueel nog een paar andere aspecten. Houd deze top down-aanpak steeds in de gaten wanneer je b.v. als studietaak een SQL-query moet formuleren. 2 Wij zullen het RDBMS uit de SQL1-manual (ISQL/DBQ) níet gebruiken, maar wél hetzij MS-Acces, hetzij Interbase (BDE) KUN / Informatica / IS-0-cursus 4