Inleiding in databases Wat is een database? Een database kan gedefinieerd worden als een verzameling gegevens over één onderwerp. Deze is zo georganiseerd dat men gemakkelijk naar informatie kan zoeken, wijzigingen kan maken en nieuwe items toe kan voegen. Bekijk het onderstaande diagram voor één van de bovenstaande voorbeelden: een telefoonboek. Een diagram van een database met telefoonnummers Een diagram van een database met telefoonnummers In de bovenstaande afbeelding ziet u de gegevens van twee contactpersonen, elk op een aparte kaart. Een kaart kan ook een enkele rij in een tabel voorstellen. De tabel Contacten Naam Tel. nr. Joan 699 23 43 12 Adam 711 19 77 21 Termen en definities: Een enkel gegeven dat deel uitmaakt van een grotere verzameling kan een rij of een record genoemd worden. De verzameling wordt gewoonlijk een tabel genoemd. Een logische naam voor de tabel beschrijft de gegevens die erin opgeslagen zijn, in dit geval is dat Contacten. Verder bestaat elke rij in de tabel uit kolommen, ook wel velden genoemd. In de tabel Contacten zijn er twee kolommen (velden): Naam en Tel. nr.. Voor eenvoudig gebruik kan een database uit een enkele tabel bestaan. Vaak worden deze twee ook als gelijkwaardig gezien. zoals u zult zien, gebruiken we voor echte databases gewoonlijk meer dan één tabel. Kortom, u hebt al een eenvoudige database met één tabel Contacten. Database en spreadsheet Hoogstwaarschijnlijk hebt u al spreadsheet-toepassingen gebruikt, zoals KSpread, OpenOffice.org Calc of Microsoft Excel. In dat geval vraagt u zich misschien af: spreadsheets en databases hebben allebei tabellen, waarom zou ik de laatste gebruiken? Bij het vergelijken van spreadsheets en databases kunt u de volgende punten tegenkomen die later gedetailleerder ter sprake komen: Integriteit van referentiegegevens Overtollige gegevens Integriteit en geldigheid van gegevens Beperking van gegevensweergave Prestatie en capaciteit Gemakkelijke gegevensinvoer Rapporten Programmeren Gebruik door meer personen tegelijk Veiligheid Waarin verschilt een database van een spreadsheet? Om de capaciteit groter dan die van een mobiele telefoon te maken, voegt u een kolom (veld) Adres aan de tabel Contacten toe. Voeg voor iedere persoon meer telefoonnummers (werk, thuis) toe en voeg achternamen aan namen toe. Om het eenvoudiger te maken nemen we het volgende aan: de tabel is beperkt tot twee personen (in een echte database kunnen dat er honderden of duizenden zijn) er zijn geen twee personen met dezelfde naam en achternaam De tabel "Contacten" Naam en achternaam Tel Adres Joan Smith 699 23 43 12 Western Gate 1, Warsaw Adam Willson 711 19 77 21 London, Frogs Drive 5 Joan Smith 110 98 98 00 Western Gate 1 Smith Joan 312 43 42 22 Warsaw, Western Gate 1 ADAM Willson 231 83 02 04 Frogs Drive 5, London Zo'n tabel kan zowel in een spreadsheet als in een database gemaakt worden. In een spreadsheet is dat natuurlijk gemakkelijk te doen. Welk probleem komen we op dit punt tegen? Integriteit van referentiegegevens Veronderstel dat u een spreadsheet gebruikt en dat u het adres van ten minste één persoon moet veranderen. Er is een klein probleem: u moet het adres vaak in veel rijen veranderen. Joan staat bijvoorbeeld op drie rijen. Er ontstaat een echt probleem als u vergeet om het adres in één van de rijen te veranderen - het adres dat bij deze persoon hoort, is dubbelzinnig, hierdoor verliezen uw gegevens hun integriteit. Bovendien is er geen eenvoudige manier om een persoon uit de tabel te verwijderen, omdat u eraan moet denken dat alle rijen met betrekking tot die persoon verwijderd moeten worden. Overtollige gegevens Dit houdt direct verband met het vorige probleem. In de velden Naam en achternaam en Adres zijn dezelfde gegevens meerdere keren ingevoerd. Dit is typerend voor de manier waarop spreadsheets gegevens opslaan, de database wordt onnodig groot en vereist daardoor meer van de computer (meer te verwerken gegevens vereisen meer tijd). Hoe kunt u deze problemen met behulp van een database oplossen? U kunt de informatie in kleinere stukken opsplitsen door een aanvullende tabel Personen te creëren, deze tabel heeft slechts twee kolommen: Naam en achternaam en Adres: De tabel Personen Naam en achternaam Adres Joan Smith Western Gate 1, Warsaw Adam Willson Frogs Drive 5, London Elke rij in de tabel Personen komt overeen met een enkele persoon. De tabel Contacten is vanaf nu een relatie naar de tabel Personen. Integriteit en geldigheid van gegevens Let op de manier waarop gegevens in de velden Naam en achternaam en Adres zijn ingevuld. Mensen die gegevens intypen kunnen fouten maken en soms slordig zijn. In ons voorbeeld hebben we namen in verschillende volgordes en vormen (Joan Smith en Smith Joan; Adam en ADAM) en ook verschillende manieren om hetzelfde adres in te typen. Er zijn vast nog meer verschillende manieren te bedenken. Het bovenstaande laat zien dat, wanneer u ⪚ het telefoonnummer van een persoon met het adres "Western Gate 1, Warsaw" zoekt, u niet alle resultaten ziet. U krijgt slechts één rij te zien in plaats van drie. Ook vindt u niet alle telefoonnummers voor "Joan Smith" in het veld Naam en achternaam, omdat "Smith Joan" niet hetzelfde is als "Joan Smith". Hoe kunt u deze problemen oplossen door een database te gebruiken? U kunt dit doen door het ontwerp van de tabel Personen te veranderen: Splits de gegevens in het veld Naam en achternaam in twee aparte velden: Naam en Achternaam. Splits de gegevens in het veld Adres in drie aparte velden: Straat, Huisnummer en Plaats. Geldigheid van gegevens garanderen: door er zeker van te zijn dat er geen lege velden zijn, u moet ⪚ altijd een huisnummer invullen. Een gewijzigde tabel ziet er ongeveer zo uit: De tabel "Personen" Naam Achternaam Straat Huisnummer Plaats Joan Smith Western Gate 1 Warsaw Adam Willson Frogs Drive 5 London Voorwaarden vereist veld vereist veld vereist veld vereist veld vereist veld Dankzij het introduceren van de voorwaarde vereist veld kunnen we er zeker van zijn dat ingevulde gegevens compleet zijn. Bij andere tabellen kunt u natuurlijk toestaan dat bepaalde velden leeg blijven. Beperking van gegevensweergave Een spreadsheet geeft alle rijen en kolommen van de tabel weer, wat lastig kan zijn als er veel gegevens zijn. U kunt in spreadsheets natuurlijk rijen filteren en sorteren, maar dat vereist extra voorzichtigheid. Wanneer u een spreadsheet gebruikt, loopt u het risico dat u vergeet dat de gegevens gefilterd zijn, wat tot vergissingen kan leiden. Bij het berekenen van totalen kunt u denken dat u 100 rijen met gegevens hebt, terwijl er nog 20 extra rijen verborgen zijn. Als u met een klein gedeelte van de gegevens wilt werken, ⪚ om deze gegevens door een ander te laten bewerken, kunt u deze naar een ander spreadsheet kopiëren en, nadat ze bewerkt zijn weer terugkopiëren. Deze "handmatige " bewerking kan echter de oorzaak zijn van gegevensverlies of van onjuiste berekeningen. Om de zichtbare gegevens te beperken, kunnen database-toepassingen query's, formulieren en rapporten maken. Een praktische manier om de gegevens te beperken is de volgende uitgebreide versie van de eerder beschreven tabel Personen: De tabel "Personen" Naam Achternaam Straat Huisnummer Plaats Inkomen Joan Smith Western Gate 1 Warsaw 2300 Adam Willson Frogs Drive 5 London 1900 We nemen aan dat de nieuwe kolom Inkomen vertrouwelijke gegevens bevat. Hoe kunt u informatie over de personen door uw medewerkers laten inzien, zonder de inkomens bekend te maken? Dit is mogelijk als u ze alleen een query en niet de gehele tabel geeft. De query kan alle kolommen behalve Inkomen selecteren. In de wereld van de database staat zo'n query ook bekend als weergave. Prestatie en capaciteit U werkt waarschijnlijk met een vrij snelle computer, maar u zult ook inzien dat dat bij grote, logge spreadsheets niet echt helpt. Het gebrek aan efficiëntie wordt ten eerst veroorzaakt door het ontbreken van indexen die het zoekproces versnellen (databases hebben die wel). Ook het gebruik van een klembord om gegevens te kopiëren kan na verloop van tijd lastig worden. Het duurt lang om spreadsheets die veel gegevens bevatten te openen. Een spreadsheet laadt heel veel gegevens in het computergeheugen. De meeste van deze gegevens hebt u waarschijnlijk niet direct nodig. Databases laden, in tegenstelling tot spreadsheets, de gegevens alleen wanneer ze nodig zijn. In de meeste gevallen hoeft u er niet om te denken hoe de database de gegevens opslaat. Dit betekent dat het volgende voor databases, in tegenstelling tot spreadsheets, niet uitmaakt: De volgorde van de rijen, u kunt deze immers veranderen als dat nodig is. Bovendien kunt u dezelfde gegevens in andere volgorden in meer weergaven tegelijk zien. Hetzelfde geldt voor de kolommen (velden) in de tabel. Samen met Beperking van gegevensweergave in het vorige gedeelte, bepalen deze eigenschappen het voordeel van databases. Gegevensinvoer De nieuwere versies van toepassingen om spreadsheets te creëren bieden de mogelijkheid om formulieren voor gegevensinvoer te ontwerpen. Zulke formulieren zijn nuttig als de gegevens niet gemakkelijk in een tabel getoond kunnen worden, ⪚ omdat de tekst te lang is of omdat niet alle kolommen op het scherm passen. In dit geval is de manier waarop de spreadsheet werkt problematisch. Velden voor gegevensinvoer worden her en der in de spreadsheet geplaatst en zijn vaak niet beschermd tegen (bedoelde of onbedoelde) bewerking door andere gebruikers. Rapporten In databases kunnen gegevens gegroepeerd, beperkt en verzameld worden in de vorm van een rapport. Spreadsheets worden gewoonlijk in de vorm van kleine tabellen afgedrukt zonder volledige automatische controle over de verdeling van de pagina's en de indeling van de velden. Programmeren Toepassingen voor het creëren van databases beschikken vaak over volwaardige programmeertalen. Nieuwere spreadsheets hebben deze mogelijk ook, maar berekeningen worden nog steeds gedaan door het wijzigen van de velden en het kopiëren van gegevens, zonder rekening te houden met de eerder genoemde regels voor relevantie en integriteit. In een spreadsheet worden de gegevens gewoonlijk in een grafische gebruikersinterface verwerkt, waardoor de snelheid achteruit kan gaan. Databases kunnen in de achtergrond werken, buiten de grafische interface om. Gebruik door meer personen tegelijk Het is moeilijk om met meer personen tegelijk aan een spreadsheet te werken. Zelfs als het technisch mogelijk is, zoals bij de nieuwste toepassingen, dan vereist het nog een hoge mate van discipline, aandacht en kennis van de gebruikers; en deze eigenschappen kunnen niet gegarandeerd worden. Een klassieke manier om gegevens in een spreadsheet met anderen te delen is: het gehele bestand versturen (gewoonlijk per email) of het bestand op een netwerk opslaan. Deze manier van werken is niet effectief voor grote groepen - gegevens die op een bepaalde tijd nodig zijn, kunnen geblokkeerd zijn doordat iemand anders eraan werkt. Databases zijn juist ontworpen om de gegevens voor meer personen tegelijk toegankelijk te maken. Zelfs in de eenvoudigste versies kunnen rijen in een bepaalde tabel geblokkeerd worden, waardoor de tabelgegevens gemakkelijk gedeeld kunnen worden. Veiligheid Het beveiligen van een spreadsheet of bepaalde delen ervan met een wachtwoord is vaak niet meer dan symbolisch. Nadat een spreadsheet op een computernetwerk opgeslagen is, kan iedereen die het bestand kan kopiëren ook proberen het wachtwoord te achterhalen. Dit is vaak niet eens moeilijk als het wachtwoord in hetzelfde bestand als de spreadsheet opgeslagen is. Functies om het bewerken of het kopiëren van een spreadsheet (of een deel ervan) te blokkeren, zijn eveneens gemakkelijk te kraken. Databases (behalve die in een bestand opgeslagen zijn in plaats van op een server) hoeven niet als een enkel bestand beschikbaar te zijn. U krijgt toegang tot een database via een computernetwerk, gewoonlijk moet u een gebruikersnaam een een wachtwoord opgeven. U krijgt alleen toegang tot de delen (tabellen, formulieren of zelfs alleen bepaalde rijen en kolommen) die aan u toegewezen zijn door het instellen van toegangsrechten. Toegangsrechten bepalen of gegevens bewerkt of alleen gelezen kunnen worden. Als bepaalde gegevens niet voor u beschikbaar zijn, worden die ook niet naar uw computer gestuurd, er is dan ook geen mogelijkheid om de gegevens zo gemakkelijk te kopiëren, zoals dat wel bij spreadsheets kan. Database-ontwerp Over het ontwerpen van een database moet zorgvuldig nagedacht worden. U kunt waarschijnlijk wel inzien dat het wijzigen van de tabel Contacten, zoals voorgesteld werd in hoofdstuk 1.2, problemen kan opleveren als de tabel veel gegevens bevat. Bijvoorbeeld: een veld hernoemen is gemakkelijk, maar het splitsen van het veld Adres in aparte velden is lastig werk en vereist veel aandacht. Om zulke situaties te vermijden moet u nadenken over uw databaseproject voordat u het daadwerkelijk op de computer creëert en voordat anderen het gaan gebruiken. Door in het begin wat meer tijd te investeren, kunt u later vrijwel zeker veel tijd bij uw dagelijks werk besparen. Wie heeft een database nodig? Gebruik een spreadsheet als: u de uitgebreide mogelijkheden niet nodig hebt en als de hoeveelheid gegevens niet steeds groter wordt (maar kunt u dat met zekerheid voorspellen?) u niet in staat bent om de methodes om een database te maken te leren. U zou er dan over kunnen denken om deze taak uit te besteden of om eenvoudigere hulpmiddelen te gebruiken. u ingewikkelde spreadsheets gebruikt en het ontbreekt u aan tijd of geld om over te schakelen naar databases. Bedenk of dit geen doodlopende weg is. Reken niet op magische hulpmiddelen die uw spreadsheet (hoe goed ontworpen ook) in een database veranderen. Overweeg om databases te gebruiken als: uw verzameling gegevens met de week groeit. u vaak nieuwe spreadsheets maakt, tussen spreadsheets heen en weer kopieert, en het gevoel krijgt dat het werk steeds lastiger wordt. In dit geval wordt de moeite van het overschakelen snel terugverdiend. u rapporten en overzichten maakt waarvoor de tabelweergave van een spreadsheet niet geschikt is. U kunt overwegen om over te schakelen naar een database met formulierweergaven. Software voor het maken van databases Tot nu toe hebt u iets geleerd over de algemene eigenschappen van databases zonder details over specifieke toepassingen om ze te ontwerpen. De eerste databases zijn tegelijk met grote mainframes in de jaren 60 gebouwd, ⪚ IBM System/360. Dat was voordat de pc's hun intrede deden. Deze databases werden onderhouden door gespecialiseerd personeel. Hoewel de hardware van die computers onberekenbaar was, ze erg langzaam waren en weinig opslagruimte hadden, blijft één van de eigenschappen van de databases ook nu nog een aantrekkelijk voordeel: veel gebruikers kunnen tegelijkertijd toegang tot de gegevens hebben via een netwerk. In de jaren 70 ontwikkelden wetenschappers de theorie van relationele databases (termen zoals: tabel, record, veld, relationeel en vele anderen). Op basis van deze theorie zijn de IBM DB2 en Oracle-databases gecreëerd, die verder ontwikkeld werden en nog steeds gebruikt worden. Aan het einde van de jaren 70 kwamen de eerste pc's op de markt. Hun gebruikers konden langzaamaan steeds meer verschillende toepassingen gebruiken, ook die voor het creëren van databases. Voor grote databases van bedrijven is de situatie niet veranderd: ze hebben nog steeds krachtige computers of aan elkaar geschakelde computers, clusters genoemd, nodig. Dit valt echter buiten het bereik van dit handboek. Op het gebied van "toegankelijke" databases met een grafische gebruikersinterface voor pc's kunt u kiezen uit de volgende mogelijkheden: DBase - een hulpmiddel om databases te beheren voor DOS, populair in de jaren 80. Bestanden in DBase-formaat worden nog steeds in speciale gevallen gebruikt omdat hun structuur zo eenvoudig is. FoxPro - een toepassing die op DBase lijkt (begin jaren 90). Na de overname door Microsoft werd er een grafische gebruikersinterface aan toegevoegd, sinds die tijd werd het gebruikt om databases op pc's te creëren. Het product is nog steeds op de markt, hoewel het een beetje verouderd lijkt. Microsoft Access - een toepassing voor databases (gegevens en ontwerpen van grafische interfaces) met veel vereenvoudigingen en daarom geschikt voor beginners, ontworpen eind jaren 80, gebaseerd op 16-bits architectuur. Dit is ook nu nog op de markt en wordt nog veel gebruikt, vooral door kleine bedrijven waar efficiëntie en de toegang van meer gebruikers tegelijk niet zo belangrijk zijn. FileMaker - een populaire toepassing die wel wat op MS Access lijkt wat betreft eenvoud, draait op Windows en Macintosh platforms, op de markt sinds 1985. &kexi; - een toepassing voor verscheidene platforms (Unix/Linux, Windows, Mac OS X), ontworpen in 2003, ontwikkeld volgend de "OpenSource" principes, maakt deel uit van het K Desktop Environment-project, dit is een grafische omgeving voor Unix/Linux-systemen. Een belangrijke bijdrage aan de ontwikkeling van &kexi; wordt geleverd door de "OpenOffice Poland company".