Alle rechten voorbehouden. Behoudens de uitdrukkelijk bij wet bepaalde uitzonderingen mag niets uit deze uitgave worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand of openbaar gemaakt, op welke wijze ook, zonder de uitdrukkelijke voorafgaande en schriftelijke toestemming van het VVKSO. Database-ontwerp Database-ontwerp Ondersteuning Informaticabeheer Ondersteuning Informaticabeheer Marleen Decuyper Ria Van Eysendeyk Marleen Decuyper Ria Van Eysendeyk IB-3008-01 IB-3008-01 2002 2002 D/2002/7841/049 Inhoud 1 Werken met data ..................................................................................................... 5 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.3 1.4 1.5 Databases................................................................................................................. 5 Databasesystemen ................................................................................................... 7 RDBMS ..................................................................................................................... 7 OODBMS .................................................................................................................. 8 ORDBMS .................................................................................................................. 8 Data en MS-Office .................................................................................................... 8 Stappen bij het ontwerpen van een database .......................................................... 9 Datamodel............................................................................................................... 10 Datadictionary ......................................................................................................... 11 2 Het Entiteit-Relatie model .................................................................................... 12 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Entiteiten ................................................................................................................. 12 Relatie..................................................................................................................... 12 Attributen................................................................................................................. 13 Cardinaliteit............................................................................................................. 14 Optionaliteit............................................................................................................. 15 Voorbeeld................................................................................................................ 16 Uitgewerkt voorbeeld .............................................................................................. 16 Oefeningen ............................................................................................................. 20 3 Een relationele databank ..................................................................................... 22 3.1 3.1.1 3.1.2 3.1.3 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Tabellen .................................................................................................................. 22 Primaire sleutel ....................................................................................................... 22 Namen van velden.................................................................................................. 23 Koppelingen tussen tabellen................................................................................... 23 Het normalisatieproces ........................................................................................... 24 Niet genormaliseerde gegevensgroepen................................................................ 25 Repeterende groepen............................................................................................. 25 Partiële functionele afhankelijkheid ........................................................................ 30 Transitieve functionele afhankelijkheid................................................................... 33 Overzicht................................................................................................................. 34 Uitgewerkt voorbeeld .............................................................................................. 34 Oefeningen ............................................................................................................. 37 4 Omzetting datamodel naar databaseontwerp.................................................... 38 4.1 4.1.1 4.2 4.2.1 4.2.2 4.2.3 4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.4 4.5 Entiteiten ................................................................................................................. 38 Zelfstandige entiteiten............................................................................................. 38 Relaties zonder attributen....................................................................................... 38 Één-op-één relatie .................................................................................................. 38 Eén-op-veel relatie.................................................................................................. 39 Veel-op-veel relatie................................................................................................. 40 Relaties met attributen............................................................................................ 40 Eén-op-één relatie .................................................................................................. 40 Een-op-veel relatie.................................................................................................. 41 Veel-op-veel relatie................................................................................................. 41 Overzicht................................................................................................................. 42 Uitgewerkt voorbeeld .............................................................................................. 42 Oefeningen ............................................................................................................. 45 5 Een database implementeren .............................................................................. 46 5.1 5.1.1 5.1.2 5.1.3 Het tabel-ontwerpscherm........................................................................................ 46 Veldnaam................................................................................................................ 47 Gegevenstype......................................................................................................... 47 Beschrijving............................................................................................................. 47 5.1.4 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.3 5.4 5.5 5.5.1 5.5.2 5.5.3 5.5.4 Veldeigenschappen................................................................................................. 48 Zelf een tabel maken............................................................................................... 50 Probleemdefinitie .................................................................................................... 50 Tabelstructuur ......................................................................................................... 50 Indexeren ................................................................................................................ 52 Tabelstructuur wijzigen ........................................................................................... 52 Tabeleigenschappen............................................................................................... 52 Primaire sleutel ....................................................................................................... 53 Een database implementeren ................................................................................. 54 Oefeningen.............................................................................................................. 54 Overzicht ................................................................................................................. 56 Een tabel aanmaken ............................................................................................... 56 Tabelstructuur aanpassen....................................................................................... 62 Tabeleigenschappen............................................................................................... 62 Primaire sleutel ....................................................................................................... 62 1 Werken met data in het domein personeelsadministratie zijn de volgende entiteiten belangrijk: personeelslid, afdeling, functiebeschrijvingen Het begrip database Soorten database managementsystemen Het begrip datamodel Datadictionary 1.1 Som enkele domeinen en betrokken entiteiten op voor de schooladministratie. - Databases Er moet ingeschat worden welke (soorten) vragen in welke frequentie gesteld zullen worden. Als die frequentie zeer hoog is, dan zal dat extra eisen stellen aan de computerimplementatie van de database (hierover later meer). Er moet ingeschat worden of bepaalde combinaties van gegevens opgevraagd zullen worden, of dat er bepaalde zoekfilters gebruikt gaan worden. Wat is een database? Bespreek de bevraging van een database met rekeninginformatie van een bank (frequentie, soort vragen, soort bewerkingen). Meestal speelt het voor langere tijd bewaren van gegevens, een belangrijke rol in informatiesystemen. Denk bijvoorbeeld aan de loonadministratie in een bedrijf. Welke gegevens moeten hiervoor onder andere bijgehouden worden? Als deze gegevens op een gestructureerde, digitale manier bijgehouden worden, is het mogelijk de verwerking van die gegevens tot bijvoorbeeld jaarlijkse loonfiches voor alle werknemers, te automatiseren. Dat bespaart hopen werk! Keerzijde van de medaille: een degelijke structuur opbouwen om de gegevens te bewaren, kost soms de spreekwoordelijke bloed, zweet en tranen. Het is gedeeltelijk een wetenschap en gedeeltelijk kunst. Het wetenschappelijke deel is het onderwerp van de volgende hoofdstukken: je leert hoe je, door het gebruik van bepaalde technieken, tot een werkbare structuur komt. Het verwachte aantal gebruikers van de database. Dit kan variëren van 1 tot zeer veel. Vormen ze een homogene groep? Worden de gebruikers getraind in het werken met de database, of gaat het om incidentele gebruikers? Wat is een acceptabele wachttijd op een antwoord van het databasesysteem? Hoe zit dit voor de database met rekeninginformatie? - Het verwachte aantal externe softwarepakketten dat de database aanspreekt. Als de database rechtstreeks of via internet verbonden is met andere computerprogrammas, dan zal het databasesysteem daardoor belast worden, mogelijk met nadelige gevolgen voor de "gewone" gebruikers. Zijn er externe softwarepakketten die eventueel het databasesysteem van de schooladministratie aanspreken? Geef voorbeelden. Zo'n gestructureerde, digitaal bewaarde verzameling gegevens, opgezet om in een bepaalde informatiebehoefte te voorzien, wordt een database of gegevensbank genoemd. - Wanneer heb je er één nodig? Een database is een hulpmiddel voor de informatievoorziening. Niet alle gegevens die in een organisatie nodig zijn hoeven te worden gestructureerd in een database. In onder andere volgende gevallen heb je een database nodig. - De gegevens worden frequent opgevraagd en gebruikt. - De zoekinspanning van de gebruiker moet minimaal zijn, m.a.w. zoekacties moeten snel resultaat opleveren. In plaats van de gebruiker te laten bladeren door lange lijsten is het gewenst dat het systeem het gevraagde zoekt en aanbiedt. - Er is behoefte aan antwoorden op complexere vragen dan alleen het opvragen van opgeslagen gegevens. Het moet mogelijk zijn om het systeem te laten zoeken naar combinaties van gegevens en om filters te gebruiken. De te verstrekken privileges aan de gebruikers. Het kan de bedoeling zijn dat verschillende (groepen) gebruikers verschillende rechten van toegang tot de gegevens krijgen. De gegevens moeten selectief beveiligd en beschermd kunnen worden. Mag iedereen volledige toegang krijgen tot alle gegevens in het databasesysteem van de schooladministratie? Verduidelijk je antwoord. - Het moet duidelijk zijn welke partijen het recht (of de plicht) hebben gegevens in te voeren in en/of te verwijderen uit de database. Ook hier spelen kwantitatieve aspecten zoals de omvang van de ingevoerde gegevensstroom een rol. Hoe zit dat voor de schooladministratie en de database met rekeninginformatie van de bank? Wat komt er allemaal bij kijken? Er moet ingeschat worden hoe duurzaam de gegevens moeten zijn. Soms zijn alleen actuele gegevens van belang (bijvoorbeeld verkeersinformatie), soms moeten gegevens na 50 jaar nog beschikbaar zijn (bijvoorbeeld bevolkingsregister). Als besloten is om een database op te zetten, dan moet de precieze functie van die database voor de organisatie in kaart gebracht worden. Daarbij komen verschillende aspecten aan bod: het gaat om heel wat meer dan alleen maar 'Welke gegevens moeten bewaard worden?'. - Er moet duidelijkheid komen over de omvang en aard van het domein waarover informatie gevraagd zal worden. Over welke dingen gaat het, welke eigenschappen van die dingen zijn van belang (of kunnen dat in de toekomst worden) en welke niet. Een domein is het relevante deel van de werkelijkheid voor wat betreft de informatiebehoefte. De dingen in het domein worden entiteiten genoemd. Bijvoorbeeld VVKSO Informaticabeheer Databases - pagina 5 Hoe zit dat voor de schooladministratie en de database met rekeninginformatie van de bank? - Er moet ingeschat worden hoe duurzaam de structuur van de gegevens is. Let op het grote verschil van dit punt met het hiervoor genoemde punt. Een DBS (database systeem, zie verder) is ontworpen op (snelle) veranderingen van de inhoud, maar wel binnen steeds dezelfde structuur van de database. Als de informatiebehoefte zou veranderen, dan moet soms de gegevensstructuur van de database her- VVKSO Informaticabeheer Databases - pagina 6 zien worden. Dit kan zeer duur zijn, vandaar dat dit punt extra aandacht verdient. Overigens is het gebruikelijk dat een database meegroeit met een organisatie of met een toepassing. Het moet daarom mogelijk zijn om de gegevensstructuur aan te passen. Aan de hand van een analyse zoals hiervoor beschreven, kunnen beslissingen genomen worden over het systeem (hardware, software) waarin de database zal geïmplementeerd worden, wat de database moet bevatten en wie (wat) en hoe ze zal gebruikt worden. In de volgende hoofdstukken houden we ons voornamelijk bezig met welke gegevens er moeten bewaard worden en hoe. 1.2 Databasesystemen In een database worden gegevens digitaal bijgehouden. Je hebt dus software nodig om de gegevens in te brengen en te beheren. De software die het werken met een database mogelijk maakt is het database managementsysteem (DBMS). Het geheel van database en DBMS is dan het databasesysteem (DBS). De volgende figuur geeft een schematisch overzicht van een databasesysteem en drie partijen die met de DBS te maken hebben: gebruikers, applicatiesoftware en een beheerder. De pijlen geven mogelijke gegevensstromen aan. Beheerder Gebruiker Gebruiker Gebruiker Applicatie meer). In een RDBMS worden gegevens typisch bijgehouden in tabellen (rijen en kolommen). RDBMSen zijn zeer geschikt voor applicaties met eenvoudige data en uitgebreide bevragingsmogelijkheden, de typische administratieve applicaties. Enkel eenvoudige datatypes (numeriek, tekst ) kunnen bijgehouden worden. Een gebruiker kan zelf geen datatypes toevoegen. Een grote troef voor RDBMSen is dat ze allen bevraagd kunnen worden met een standaardtaal: SQL (Structured Query Language). MS-Access, het database managementsysteem waarmee je leert werken is een RDBMS. 1.2.2 OODBMS Een OODBMS of Object-Oriented Database Management System is een DBMS dat volledig beantwoord aan de OO-technologie. Object bases bevatten niet alleen de (statische) toestandsgegevens van reële objecten, maar ook informatie over het gedrag van objecten op externe impulsen (gebeurtenissen). De meeste OODBMSen breiden een bestaande OO-programeertaal uit met database functionaliteit. Prototypen van zulke systemen verschenen in het begin van de jaren tachtig. Tegenwoordig zijn er een aantal ODBMSen commercieel verkrijgbaar, zoals: ObjectStore, O2, GemStone, Objectivity/DB, ONTOS en Versant. Object databases maken het verder mogelijk om data van arbitraire complexiteit op te slaan; de programmeur heeft de vrijheid om nieuwe typen te definiëren. Verder zijn overerving en inkapseling belangrijke concepten binnen OO-talen en dus ook binnen OO-databases. "Echte" OODBMSen zijn nog niet zo lang beschikbaar. Dit betekent dat er nog het nodige te wensen overblijft rond standaardisatie en query-talen. Verder is het programmeren van applicaties met persistente (bewaarde) objecten niet altijd eenvoudig. Applicatie Omdat OODBMSen hun wortels hebben in OOPLs (Object Oriented Programming Language) worden ze ook soms Persistent Programming Languages (PPL) genoemd. databasem enagem ent systeem (DBMS ) 1.2.3 database (DB) databasesysteem (DBS) Er bestaan verschillende types DBMS. Ze worden gecategoriseerd aan de hand van de manier waarop (structuur) de gegevens worden opgeslagen. Relationele gegevensbanken vormen thans het meest verspreide systeem heer van persistente (te bewaren) gegevens. Andere, oudere vormen van heer zijn onder meer: hiërarchische databases en netwerkdatabases. Een wikkeling is de opkomst van objectgeoriënteerde databases, ook wel genoemd. 1.2.1 voor het begegevensberecente ontobject bases RDBMS VVKSO Informaticabeheer Een alternatief scenario dat goed aansluit bij de bestaande investeringen is het opslaan van objecten in relationele databases. Hier zijn weer twee benaderingen mogelijk. De eerste vertrekt van standaard relationele databases, en legt daarboven een "schil" waarin de speciale kenmerken van objecten opgeslagen worden in rijen van tabellen. Voor iedere klasse introduceer je dan een tabel met de corresponderende attributen. Een andere oplossing is dat het relationele model uitgebreid wordt met objectgeoriënteerde kenmerken, zoals overerving, bewaarde methodes (stored methods) en nog een paar andere voorzieningen. Zo'n systeem kan dan SQL-compatible blijven, zolang geen gebruik van de uitbreidingen wordt gemaakt. In beide gevallen spreekt men van een ORDBMS, een Object-Relational DBMS. Voorbeelden hiervan zijn Oracle, Sybase en Informix. 1.2.4 RDBMSen of Relationele Database Managmentsystemen zijn reeds een aantal jaren de meest gebruikte DBMSen. Ze zijn gebaseerd op het Relationeel model (hierover later Databases - pagina 7 ORDBMS Data en MS-Office Als je zelf kunt bepalen in welk formaat de nodige gegevens bewaard worden dan opteer je waarschijnlijk voor een Accesdatabase (mdb), een Excel-werkblad (xls) of een database server zoals MS SQL Server. VVKSO Informaticabeheer Databases - pagina 8 Wanneer kies je best voor een Excel-werkblad en wanneer voor een RDBMS zoals Access of SQL Server? Excel is geschikt voor het bewaren van kleine hoeveelheden data waarmee je berekeningen moet uitvoeren. Voor grotere hoeveelheden is een relationele database beter geschikt. Je kunt dan altijd Excel nog gebruiken voor het rekenwerk en voor de analyse van gegevens. MS-Access is een zuivere RDBMS. Een veld kan wel als datatype OLE-object hebben, maar dit heeft niets te maken met een objectoriëntatie. Velden van het type OLE-object worden gebruikt om gegevens op te slaan die met andere programma's zijn gemaakt, zoals Microsoft Word- of Microsoft Excel-documenten, figuren, geluiden en andere typen binaire gegevens. OLE-objecten kunnen worden gekoppeld aan of ingesloten in een veld in een Microsoft Access-tabel. 1.4 Datamodel Wat is een model? Een model is een abstracte voorstelling van (een deel van) de reële wereld. Dit wil zeggen dat de maker van een model bepaalde essentiële kenmerken van de realiteit isoleert, en alle andere kenmerken als bijkomstig achterwege laat. Een gegevensmodel of datamodel is een abstracte voorstelling van een informatiesysteem, waarbij alle dynamische aspecten (generatie, transformatie en verwerking van gegevens) achterwege blijven en slechts de statische informatiestructuren, hun beperkingen en hun onderlinge verbanden van belang zijn. Data hoeven niet bewaard te worden in een Office component zoals een Excel-werkblad of een Access-database om ze te kunnen benaderen via Office. Office XP kan via de OLEDB of ODBC (Open Database Connectivity) technologie gebruik maken van data bewaard in een ander dan Office-formaat. Dit is nuttig als je geconfronteerd wordt met reeds bestaande data die bijvoorbeeld al door andere applicaties gebruikt worden. Een datamodel gaat over de structuur van gegevens, niet over de inhoudelijke opvulling. Een gegevensmodel kan specifiëren dat een bedrijf de namen en adressen van zijn werknemers opslaat. Het zegt niet dat er een werknemer bestaat met de naam Peeters en evenmin dat de namen en adressen worden verkregen via de personeelsdienst. Het kan wel bepalen dat ieder adres een postnummer moet bevatten. 1.3 Een procesmodel brengt de dynamische aspecten in beeld. Een gegevensstroomdiagram (Data Flow Diagram, DFD) is hiervan een voorbeeld. Het toont op een visuele manier waar de data gegeneerd en verwerkt worden en waarheen ze getransporteerd worden. Stappen bij het ontwerpen van een database Het motto voor het ontwerpen van een database is zeker: 'Bezint voor je begint'. Een slecht ontworpen database kan een firma letterlijk duur te staan komen. Databaseontwerpers voor grote databases is dit teamwerk- worden goed betaald. Maar voor wat, hoort wat natuurlijk! De verantwoordelijkheid is groot en de job niet altijd even gemakkelijk. Het ontwerp van een database verloopt in verschillende stappen die hieronder schematisch weergegeven worden. Analyse van de informatiebehoefte Opstellen en documenteren van het datamodel Een gegevensmodel moet een duidelijke, éénduidige voorstelling geven van de gegevens en hun onderlinge verbanden. Het moet voldoende visueel zijn zodat het kan dienen als communicatiemiddel tussen de verschillende belanghebbenden van het informatiesysteem: ontwerpers, analisten, gebruikers, beheerders, ... Pas als alle betrokken partijen het eens zijn over het model, kan er verder ontwikkeld worden. Welk model gebruiken? Keuze van het DBMS Opstellen, invoeren en documenteren van het dataontwerp Er worden heel wat verschillende datamodellen gebruikt. Het Entiteit-Relatie (EntityRelationschip) Model is een van de bekendste traditionele modellen. Er bestaan verschillende 'dialecten' van, ze verschillen hoofdzakelijk in notatie. Een voordeel van het gebruik van een algemeen bekend model is dat de samenwerking tussen de verschillende mensen die betrokken zijn bij het ontwerp, vlot kan verlopen. Geen extra trainingen nodig: iedereen kan het model interpreteren en er zijn/haar zegje over hebben. Invoer data Aan de hand van de analyse van de informatiebehoefte kan een datamodel (zie verder) opgesteld worden. Als dit gebeurd is, kan de structuur bepaald worden waarin de gegevens zullen bewaard worden: het DBMS waarin gewerkt wordt, wordt gekozen. Het datamodel moet vertaald worden naar een dataontwerp (dataschema) dat kan ingevoerd worden in het DBMS. Als het dataontwerp geïmplementeerd is, kunnen uiteindelijk de data ingevoerd worden. Informaticabeheer Waarom modelleren? - Bepalen van het domein. Benoemen van de entiteiten VVKSO Een gegevensmodel wordt gebruikt voor het structureren van een database terwijl een gegevensstroomschema eerder gebruikt wordt voor het programmeren. Databases - pagina 9 In het volgende hoofdstuk maak je kennis met een vereenvoudigde vorm van het Entiteit-Relatie Model. VVKSO Informaticabeheer Databases - pagina 10 1.5 2 Datadictionary Het Entiteit-Relatie model Bij het ontwikkelen van een database is het belangrijk dat er zoveel mogelijk informatie bestaat over alle gegevens die bijgehouden worden. Hiervoor wordt meestal een datadictionary, een gegevens-woordenlijst, gebruikt. Een datadictionary is een verzameling van eigenschappen van gegevens. Hij bevat dus gegevens over gegevens (metagegevens). Een datadictionary kan vele vormen aannemen. Hij kan afzonderlijk bestaan of toegevoegd worden aan een datamodel. Er zijn softwarepakketten op de markt voor de creatie en het beheer van een datadictionary. Vaak zijn deze gekoppeld aan andere software waarmee de implementatie van de database (gedeeltelijk) geautomatiseerd kan worden. De datadictionary is niet alleen belangrijk voor de ontwikkeling van een database, maar is ook een uitstekend middel om de database te documenteren. Dit is belangrijk voor het onderhoud, het beheer en het latere gebruik van de databank. Een datadictionary kan onder andere volgende gegevens bevatten: - gegevens m.b.t. de identificatie zoals de naam van het gegeven, eventuele synoniemen, een beschrijving waarin de betekenis van het gegeven wordt toegelicht; - gegevens m.b.t. de representatie zoals gegevenstype, lengte, invoerformaat; - gegevens ter ondersteuning van de beveiliging zoals toegestane gebruikers, hun wachtwoorden en toegangsrechten (lezen, wijzigen, toevoegen, verwijderen); - gegevens ter ondersteuning van de integriteit (juistheid van de gegevens) zoals toegestane waarden, validatieregels (waarover later meer); - gegevens ter verbetering van de prestaties zoals statistische gegevens over het gebruik van de gegevens. Entiteiten en relaties Attributen Cardinaliteit Optionaliteit In dit hoofdstuk maak je kennis met een datamodel dat zeer geschikt is voor het ontwerpen van een database: het Entiteit-Relatie Model (Entity Relationship Model), afgekort ER-model. Het is in 1976 in informaticaland héél lang gelden - door P. Chen geïntroduceerd. Sindsdien zijn er verschillende varianten ontwikkeld. In het Entiteit-Relatie model wordt gebruik gemaakt van: - entiteiten, - attributen, - relaties (relationships). 2.1 Entiteiten Een entiteit is simpelweg iets dat je kunt identificeren en waarvan je gegevens wilt bijhouden: auto, persoon, magazijn, bankrekening, computer ... Een entiteit bestaat uit: - een unieke naam; - een definitie die objectief en ondubbelzinnig aangeeft, welke objecten door de entiteit worden gemodelleerd (en soms even belangrijk: welke niet); - een lijst van attributen (zie verder). Voorbeeld: gegevenselementbeschrijving uit een klantenadministratie. Voorbeeld B ENAMING: KredietlimietKlant Naam werknemer B ETEKENIS: Het maximum bedrag dat een klant verschuldigd mag zijn. Definitie TYPE: Numeriek een natuurlijke persoon die in loondienst is van de firma; personen die slechts occasioneel voor de firma werken en personen die via een interimkantoor tewerkgesteld zijn, worden niet als werknemers beschouwd. LENGTE: Max. 7 cijfers Attributen naam, adres, telefoonnummer, geboortedatum, datum-in-dienstname FORMAAT: 9 999 999,00 zowel voor invoer als bij uitvoer M OGELIJKE WAARDEN: Positief geheel getal kleiner dan 2 000 000,00 ENTITEIT: KLANT TOEGANGSBEVEILIGING: Invoer en wijziging enkel toegestaan aan werknemers van de financiële afdeling. Geen toegangsbeveiliging voor consultatie. Voorstelling Een entiteit wordt voorgesteld door een rechthoek. Werknemer In een database voor een uitleenbibliotheek worden onder andere volgende gegevens bijgehouden: Boeknummer, DatumUitlening. Geef van beide een (intuïtieve) beschrijving voor een datadictionary. VVKSO Informaticabeheer Databases - pagina 11 2.2 Relatie Een relatie is een verband tussen twee of meer entiteiten dat model staat voor een overeenkomstige band tussen de reële objecten. Een relatie bestaat uit: - een naam, uniek binnen het beschouwde diagram; - een lijst van betrokken entiteiten; VVKSO Informaticabeheer Databases - pagina 12 - een definitie die objectief en ondubbelzinnig aangeeft, in welke omstandigheden precies het veronderstelde verband aan- of afwezig is tussen de gespecificeerde entiteiten; - een lijst van attributen (zie verder). Voorbeeld Naam Werkt in Een attribuut bestaat uit de volgende elementen: Deelnemende entiteiten werknemer, afdeling Definitie een werknemer werkt in een afdeling als hij verantwoording verschuldigd is aan het hoofd van die afdeling Attributen aantal werkuren Voorstelling Een relatie wordt voorgesteld als een verbindingslijn tussen de betrokken entiteiten. Werknemer Afdeling Werkt in - een naam, uniek binnen de collectie attributen van dezelfde entiteit of relatie; - een entiteit of relatie waarvan het attribuut een kenmerk is; - een domein, dit is de collectie van alle mogelijke waarden die het kenmerk kan aannemen; - een definitie die éénduidig de interpretatie van de gekozen waarde uit het domein aangeeft; - het al dan niet verplichte karakter van het attribuut: moet elke instantie van de gegeven entiteit of relatie over deze eigenschap beschikken, of is dit optioneel, met andere woorden, modelleer je ook instanties waarvoor deze eigenschap irrelevant of onbekend is. Voorbeeld De naam van de relatie kan al dan niet vermeld worden. Het pijltje is hier enkel een hulpmiddel bij het lezen van het diagram van links naar rechts: werknemer werkt in afdeling. 2.3 In een groothandel worden bijvoorbeeld artikelgegevens bijgehouden, o.a. naam, inkoopprijs, en hoeveelheid in voorraad. Bij het interventariseren wil men, per artikel, de waarde van de voorraad kennen. Je zou hiervoor een attribuut WaardeVoorraad kunnen voorzien waarbij WaardeVoorraad = Inkoopprijs * HoeveelheidInVoorraad. Dit betekent echter dat om de integriteit van de database te behouden bij elke verandering van de voorraad of de inkoopprijs ook de waarde van dit attribuut moet aangepast worden. Daarom worden procesgegevens meestal niet opgenomen in de database. Ze worden berekend op het moment dat ze nodig zijn. Attributen Naam personen ten laste Entiteit werknemer Domein de natuurlijke getallen, inclusief 0 Definitie Iedere entiteit en relatie is voorzien van een collectie van nul of meer attributen. Een attribuut is een eigenschap die met de instanties van de entiteit of de relatie geassocieerd wordt. Entiteiten hebben bijna altijd attributen. Relaties kunnen gemakkelijk voorkomen zonder attributen. het aantal personen dat fiscaal ten laste van de medewerker is, gens opgave door de medewerker zelf Verplicht ja Samengestelde gegevens Voorstelling Je wenst bijvoorbeeld gegevens op te slaan van personen zodat deze telefonisch of per brief kunnen gecontacteerd worden. Als attributen van de persoon heb je dan nodig: naam, adres en telefoonnummer. Je zou dus kunnen opteren voor drie attributen. Dit is echter niet handig. Als je bijvoorbeeld een adresetiket wilt samenstellen, heb je straat, postnummer en gemeente apart nodig. De attributen worden bij in de rechthoek geschreven. In diagrammen worden ze meestal weggelaten om de overzichtelijkheid niet te schaden. De gegevens naam, adres en telefoonnummer zijn samengestelde gegevens: naam bevat zowel voor- als familienaam, adres bevat straat, straatnummer, postnummer en gemeente en telefoonnummer bevat zonenummer en eigenlijke nummer. Als je de deelgegevens van een samengesteld gegeven afzonderlijk gebruikt, is het beter ze te beschouwen als afzonderlijke attributen. Zo splits je naam waarschijnlijk best op in de attributen voornaam en familienaam. Adres kan gesplitst worden in straat, postnummer en gemeente. Meestal zal het geen zin hebben om straatnaam en straatnummer afzonderlijk op te splitsen, gewoon omdat ze niet afzonderlijk gebruikt worden. Werknemer naam adres telefoonnummer datum-in-dienst 2.4 Procesgegevens vol- Cardinaliteit Een procesgegeven of berekend gegeven is een gegeven waarvan de waarde bepaald wordt door de waarde van één of meer andere gegevens. De cardinaliteit van een relatie geeft aan, hoeveel elementen van een betrokken entiteittype maximaal in relatie kunnen staan met één instantie van de andere entiteittypes. Daarbij zijn de toegelaten waarden: één of veel. VVKSO VVKSO Informaticabeheer Databases - pagina 13 Informaticabeheer Databases - pagina 14 Voorbeeld - als de instantie van de desbetreffende entiteit optioneel is (d.w.z. minstens nul), plaatsen we een cirkeltje op de lijn. Als je de relatie 'persoon is ondergeschikte van manager' bekijkt, dan gelden waarschijnlijk de volgende twee beschouwingen betreffende de cardinaliteit: contract persoon - iedere werknemer heeft (is ondergeschikt aan) hoogstens één manager; - een manager kan veel ondergeschikten (ondergeschikte werknemers) hebben. In een gegevensstructuurdiagram geven we de cardinaliteit aan door een markering van de lijnen (relaties) op de plaats waar ze de rechthoeken (entiteiten) bereiken: Het verplicht karakter van een relatie is een zeer strenge eis. Als een relatie verplicht is, wil dat zeggen dat je geen enkele situatie kunt modelleren waarin de relatie niet voorkomt, zelfs niet tijdelijk. Om de optionaliteit te bepalen, stel je een vraag in de vorm: - als de instantie van de desbetreffende entiteit uniek is (d.w.z. hoogstens één), plaats je een dwarsstreepje op de lijn vlakbij de entiteit; als de instantie van de desbetreffende entiteit verscheidene malen kan voorkomen (d.w.z. hoogstens veel), plaats je een kraaienpoot op de lijn tegen de entiteit. Werknemer - Moet een persoon minstens één contract hebben? - Moet een contract minstens door één persoon ondertekend zijn? Bij een positief antwoord: optionaliteit één, anders nul. 2.6 Manager Voorbeeld Datamodel van een verkoop Voor een relatie tussen twee entiteiten zijn er dus, wat de cardinaliteit betreft, de volgende mogelijkheden: één-op-één, één-op-veel en veel-op-veel. Een één-op-één-relatie wordt ook 1:1 genoteerd, een één-op-veel-relatie 1:n (lees: één op n) en een veel-opveel-relatie m:n (lees: m op n). Klant Order Verkoper Om de cardinaliteit te bepalen, stel je een vraag in de vorm: - Kan een werknemer meer dan één manager hebben? - Kan een manager meer dan één werknemer hebben? Bij een positief antwoord: cardinaliteit veel, anders één. 2.5 Product Volgens dit datamodel gelden de volgende regels: Optionaliteit De optionaliteit van een relatie geeft aan, hoeveel elementen van een betrokken entiteittype minimaal in relatie moeten staan met één instantie van de andere entiteittypes. Daarbij zijn de toegelaten waarden: nul of één. Voorbeeld - een klant die nog geen order heeft geplaatst, kan bestaan; - een verkoper die nog niets heeft verkocht, kan bestaan; - een product dat nog niet verkocht is kan bestaan; - een order van een bestaand product moet via een bestaande verkoper door een bestaande klant gedaan worden. Als je in een juridische database de entiteiten 'natuurlijke persoon' en 'arbeidscontract' beschouwt, met daartussen de relatie 'persoon werkt onder contract', dan gelden de volgende vaststellingen omtrent de optionaliteit: - een natuurlijke persoon heeft niet noodzakelijk een arbeidscontract ; - ieder arbeidscontract heeft noodzakelijk betrekking op een persoon. In een gegevensstructuurdiagram geven we de optionaliteit aan door het aanbrengen van een symbool op de lijnen (relaties) dichtbij de rechthoeken (entiteiten), naast de tekens voor cardinaliteit: - als de instantie van de desbetreffende entiteit verplicht is (d.w.z. minstens één), plaatsen we een dwarsstreepje op de lijn; VVKSO Informaticabeheer Databases - pagina 15 Welke attributen zou je aan elke entiteit toekennen? 2.7 Uitgewerkt voorbeeld Datamodel voor Computerpark Er zijn 6 belangrijke entiteiten: Computer, Randapparaat, Software, Verbruiksproduct, Licentie en Leverancier. Met randapparaat wordt een uitwendig randapparaat bedoeld, bijvoorbeeld: hub, printer, modem, scanner De relaties tussen de entiteiten Levertx, Heeft, Draait op, Is verbonden met, Connecteert worden getoond in het volgende diagram samen met hun cardinaliteit en optionaliteit. VVKSO Informaticabeheer Databases - pagina 16 (In deze oplossing wordt verondersteld dat de computers in netwerk verbonden zijn via een hub, d.w.z. de computers zijn onderling niet rechtstreeks verbonden.) Bestudeer het volgende diagram aandachtig. Ga, wat de cardinaliteit en de optionaliteit betreft, na wat deze precies betekenen. Waarom is bijvoorbeeld de relatie tussen Leverancier en Verbruiksproduct anders dan tussen Leverancier en Computer of Leverancier en Randapparaat? Diskettestation merk, type (samengesteld gegeven) CD/DVD merk en type van ingebouwd CD of DVD-station (samengesteld gegeven) RAM aanwezige hoeveelheid RAM RAMtype type RAMUitTeBreiden uitbreidingsmogelijkheid Beeldscherm merk, type (samengesteld gegeven) Klavier merk, type (samengesteld gegeven) Muis merk, type (samengesteld gegeven) Geluidskaart merk, type (samengesteld gegeven) Netwerkkaart merk, type (samengesteld gegeven) ISATotaal totaal aantal ISA-uitbreidingsgleuven ISABezet aantal bezette ISA-uitbreidingsgleuven PCITotaal totaal aantal PCI-uitbreidingsgleuven PCIBezet aantal bezette PCI-uitbreidingsgleuven BIOS naam Moederkaart naam Chipset naam Extras soort, merk en type van extra ingebouwde onderdelen, bijvoorbeeld zipdrive (samengesteld gegeven) Opmerkingen algemene opmerkingen i.v.m. het toestel Randapparaat Per entiteit worden volgende attributen bewaard. De domeinen worden niet aangegeven omdat ze vrij evident zijn. Naam Definitie RandapparaatID identificatienummer van het specifieke randapparaat Ja Functie functie, bijvoorbeeld: poort, netwerkkaart, modem, printer Ja Merk naamproducent Ja Type naam van het type zoals gekend bij producent Ja Computer Naam Definitie Verplicht ComputerID identificatie van de computer, naam waaronder de PC gekend is, bijvoorbeeld PC01, Joske ... Ja Serienummer serienummer gegeven door producent Ja Merk merknaam of 'wit product' Ja Type naam van het type zoals gekend bij producent Lokaal locatie waar toestel zich bevindt, bijvoorbeeld: B11, Directiebureel ... Ja Functie bijvoorbeeld: lescomputer, labocomputer, server, internetserver ... Ja Processor type en klokfrequentie Harde schijf merk, type, capaciteit van alle ingebouwde schijven (samengesteld gegeven) VVKSO Informaticabeheer Ja Databases - pagina 17 Verplicht Beschrijving voornaamste karakteristieken Doel waarvoor het randapparaat gebruikt wordt, bijvoorbeeld: randapparaat, reserve, didactisch materiaal Software Naam Definitie NaamSoftware inclusief versienummer, bijvoorbeeld MS Word 9.0 Producent bijvoorbeeld Microsoft AantalCD aantal installatie cd's LocatieCD aanduiding waar de cds bewaard worden VVKSO Informaticabeheer Verplicht Ja Databases - pagina 18 Draait op Licentie Naam Definitie Licentienummer of freeware, gegevens 'shareware' indien dit het geval is Ja schoollicentie, klaslicentie, netwerk ... Ja Soort licentie Verplicht Registratiedatum datum waarop licentie geregistreerd is AantalLicenties aantal toestellen of gebruikers waarvoor licentie geldt Naam Definitie begindatum datum installatie einddatum datum verwijdering opmerking opmerking, bijvoorbeeld Service Release die geïnstalleerd is, optionele componenten 2.8 Oefeningen Ontwerp voor de beschreven omgevingen een datamodel. Volg bij het ontwerpen de volgende stappen: Verbruiksproduct Naam Definitie Soort papier, toner voor HPLaser6 ... Merk naam producent Type type naam zoals gekend door producent Beschrijving voornaamste karakteristieken Voorraad hoeveelheid stuks in voorraad Ja Bestelpunt minimumvoorraad Ja Leveringstermijn gemiddelde leveringstermijn in dagen In bestelling Ja/nee Verplicht Ja - bepaal de entiteiten; - bepaal de relaties; - bepaal de cardinaliteit van de relaties; - bepaal de optionaliteit van de relaties; - bepaal de attributen van de entiteiten en de relaties. 1 Ontwerp een datamodel voor een puntenboek van een leraar. Je moet zowel de punten voor gewone toetsen als voor proefwerken opslaan. Op het einde van de maand moet er op basis van de databank een puntenlijst afgedrukt worden met de punten van dagelijks werk voor het maandrapport en op het einde van het trimester de punten voor dagelijks werk en proefwerk. De leraar kan meerdere vakken geven en kan in meerdere klassen komen. 2 Ontwerp een datamodel voor een databank voor de schoolbibliotheek. Voor elk boek wordt bijgehouden welk type het is (boek, tijdschrift, naslagwerk). Elk werk heeft uiteraard een naam (titel) en is voorzien van een etiket met een uniek nummer. Een gebruiker moet een werk kunnen opzoeken op basis van een trefwoord. Een werk kan aan meerdere trefwoorden voldoen. Boeken kunnen uitgeleend worden. Je moet kunnen zien of het werk nog aanwezig is of uitgeleend. Indien het uitgeleend is, heeft de persoon het recht om het werk te reserveren. Je moet natuurlijk weten aan wie het is uitgeleend vermits de leners het boek maar één maand mogen bijhouden. Op elk moment moet een lijst kunnen afgedrukt worden van de ontleende en gereserveerde boeken. 3 Een sportclub (atletiek) wenst van al zijn leden een aantal gegevens bij te houden zoals hun lidnummer, naam, adres, postnummer, gemeente, telefoonnummer en welke beste tijden ze behaalden op de loopnummers 100 m, 200 m en 400 m en de datum waarop die beste tijden gelopen werden. 4 Een kapper wil voor elk bezoek van zijn klanten bijhouden welke bewerkingen hij heeft uitgevoerd (zoals knippen, wassen & gebruikte producten, kleuren & gebruikte producten) zodat hij later een historiek kan samenstellen per klant. 5 Een huisarts wil een databank met volgende gegevens: patiënten, gezinsgegevens (gezinshoofd, gezinsleden ), adres, telefoon, mutualiteit, bezoeken per gezinslid, diagnose per bezoek, voorgeschreven geneesmiddelen. 6 De firma La Linea werkt met vertegenwoordigers die kleding verkopen in een bepaald verkoopgebied. Een klant bestelt altijd via dezelfde vertegenwoordiger. De databank moet zeker volgende zaken bevatten: Leverancier Naam Definitie Firmanaam naam van de firma Contactpersoon naam van de contactpersoon bij de firma Klantnummer klantnummer zoals gekend bij leverancier Telnr telefoonnummer Faxnr faxnummer E-mailadres e-mailadres van contactpersoon Adres adres van de firma Verplicht Ja De attributen die bij de relaties Levertx en Draait op horen worden in de volgende tabellen weergegeven. De relaties Is verbonden met en Connecteert hebben geen attributen. Levert Naam Definitie Leveringsdatum datum waarop goederen geleverd werden Ja Aankoopprijs prijs per stuk Ja Opmerking opmerking i.v.m. de levering VVKSO Informaticabeheer Verplicht Verplicht - Databases - pagina 19 VVKSO vertegenwoordigers: vertegenwoordigersnummer, naam en adresgegevens, totale verdienste en commissiepercentage; Informaticabeheer Databases - pagina 20 - klanten: klantnummer, naam, adres, saldo, kredietlimiet. Elke klant heeft een vertegenwoordiger maar nooit meer dan één; - kledingsstukken: artikelnummer, omschrijving, prijs, aantal in voorraad; - bestellingen: bestelnummer, artikelen met aantal en prijs. klantgegevens, vertegenwoordiger, 3 Een relationele databank Het relationeel model Primaire en refererende sleutels Het normalisatieproces bestelde Bijkomende vereisten - een bestelling wordt alleen aanvaard indien de klant geregistreerd is; - per bestelling is er hoogstens één klant; - klanten kunnen een korting krijgen: de te betalen prijs kan dus lager zijn dan de prijs in het artikelenbestand; - indien de prijs van een artikel verhoogt, betaalt de klant nooit meer dan afgesproken bij de bestelling. 3.1 Tabellen Gegevens kunnen gegroepeerd worden omdat ze om de een of andere reden bij elkaar horen (cfr. entiteiten in het entiteit-relatie datamodel). Zo'n groep noem je een objecttype. In een relationele databank worden objecttypes geïmplementeerd d.m.v. tabellen met twee dimensies: rijen en kolommen. Per object (instantie van het objecttype) wordt één rij gebruikt en per gegeven (attribuut) één kolom. Deze tabellen worden relaties (relations) genoemd. Dit is een term uit de wiskunde, niet te verwarren met de relaties (relationships) in het datamodel. Voorbeeld: patiëntengegevens Voornaam Jan Piet Joris Corneel Familienaam De Blauwe De Bruyn De Swert De Wit Geboortedatum 1980-12-13 1980-07-11 1979-10-23 1980-03-05 Lengte 174 173 180 175 Gewicht 60 63 58 62 De attributen van een patiënt-objecttype zijn voornaam, familienaam, geboortedatum, lengte en gewicht. Ze vormen de kolommen of velden van de tabel. De verschillende patiënten vormen de verschillende rijen of records in de tabel. Voorwaarden waaraan een tabel moet voldoen in een relationele database Een tabel in een relationele database moet aan bepaalde voorwaarden voldoen. Zo mogen twee rijen nooit helemaal hetzelfde zijn (geen duplicaten) en mag de volgorde van de rijen en kolommen geen intrinsieke betekenis hebben, d.w.z. het verplaatsen van rijen en/of kolommen heeft geen invloed op de betekenis van de bewaarde gegevens. Een derde voorwaarde is dat elke cel atomaire gegevens moet bevatten, d.w.z. er mag maar een waarde van het attribuut in voorkomen. In een cel waarin een lengte aangegeven wordt, mag maar 1 lengte staan en niet bijvoorbeeld de resultaten van opeenvolgende metingen. Een database zal meestal uit meerdere tabellen bestaan die onderling met elkaar in verband staan. 3.1.1 Primaire sleutel Elke rij is uniek en kan bijgevolg geïdentificeerd worden door de waarde in een kolom of een combinatie van kolommen. Het kan voorkomen dat er meerdere kolommen of combinaties van kolommen de rij identificeren. Er zijn dan meerdere kandidaat-sleutels. Eén ervan wordt gekozen tot primaire sleutel (primary key). Als de primaire sleutel uit meerdere kolommen bestaat, spreekt men van een samengestelde sleutel. De primaire sleutel van een tabel speelt een belangrijke rol in een relationele database. Besteed dus steeds voldoende zorg aan de keuze ervan. VVKSO Informaticabeheer Databases - pagina 21 VVKSO Informaticabeheer Databases - pagina 22 In de voorgaande tabel is er eigenlijk geen kandidaat-sleutel. Theoretisch, alhoewel zeer onwaarschijnlijk, is het mogelijk dat er twee personen met dezelfde naam zijn, die op dezelfde dag geboren zijn en dan nog dezelfde lengte en hetzelfde gewicht hebben. In dergelijke gevallen voeg je een veld toe, meestal met een numerieke waarde, dat als primaire sleutel fungeert. Om aan te geven dat een veld als primaire sleutel fungeert, wordt dit veld meestal onderstreept. Surrogaat sleutel 3.2 In de praktijk kies je best een extra kolom als primaire sleutel, d.w.z. een kolom die niet overeenkomt met een eigenschap van een entiteit, maar die enkel dient om de rij te identificeren. Als je een kolom neemt die overeenkomt met een eigenschap van een attribuut, dan kan dit in de loop van de tijd veranderen. Stel dat je als primaire sleutel een telefoonnummer zou nemen. In theorie biedt dit een unieke identificatie van bijvoorbeeld een klant. Als echter de telefoonmaatschappij om een of andere reden de nummers aanpast, bijvoorbeeld zonenummer 089 wordt gesplitst in 089 en 011 zal de applicatie overal waar deze waarde als primaire sleutel en refererende sleutel (zie volgende paragraaf) gebruikt wordt, moeten aangepast worden. Dat vraagt heel wat meer werk dan enkel de gegevens in één kolom aanpassen. Een sleutel die niet overeenkomt met een eigenschap van een entiteit noemt men een surrogaat sleutel. 3.1.2 Namen van velden Ieder veld behoort een duidelijke, binnen de tabel unieke naam te krijgen, waarmee het zich van alle andere gegevens onderscheidt. Hoewel het in de meeste pakketten voor gegevensbeheer, zoals MS-Access mogelijk is om een naam te kiezen die bestaat uit meerdere woorden, is dit geen aanrader. Beter is het om de woorden aan elkaar te schrijven en ieder nieuw woord met een hoofdletter te beginnen. Overdrijf niet in de lengte van de naam: 25 karakters zou ruim voldoende moeten zijn. Voorbeelden van zinvolle naamgeving: WaardeVoorraad, BetalingPerCheck enz. Een tabel kan bijvoorbeeld weergeven worden als: Patiënt(PatiëntID, Voornaam, Familienaam, Geboortedatum, Lengte, Gewicht) 3.1.3 Koppelingen tussen tabellen Ouder Kind OuderID Familienaam Voornaam Straat postnummer Gemeente KindID Voornaam Leeftijd Geslacht OuderID Het normalisatieproces Normalisatie is een bepaalde herschikking van de gegevens en gegevensgroepen, waarbij soms nieuwe groepen worden gevormd door gegevens uit bestaande groepen af te zonderen. Uiteindelijk wil je tot de volgende situatie komen: alle attributen van een groep zijn functioneel afhankelijk van de volledige sleutel, en tussen attributen onderling bestaan geen functionele afhankelijkheden. Een gegeven is functioneel afhankelijk van een ander als dit gegeven gekend is als het andere gegeven gekend is. Bijvoorbeeld in het rijksregister zijn de gegevens naam en woonplaats functioneel afhankelijk van het rijksregisternummer. Als je het rijksregisternummer van iemand kent, dan kun je zijn naam en woonplaats vinden. Door het gebruik in volgende paragrafen wordt het begrip wellicht duidelijker. Het doel van normalisatie is het vermijden van redundantie. Redundantie betekent, dat bepaalde informatie tegelijkertijd op meer dan één plaats wordt voorgesteld. De voornaamste nadelen van redundantie zijn: - risico's van inconsistentie: indien dezelfde soort informatie op meer dan één plaats tegelijk aanwezig is, dan kunnen de verschillende plaatsen van informatieopslag elkaar tegenspreken; - moeilijker gegevensonderhoud: sommige wijzigingen moeten op verschillende plaatsen tegelijk worden doorgevoerd. Nochtans is redundantie soms nuttig. Zo kan een overdreven genormaliseerd gegevensbeheersysteem veel tijd vragen om gegevens op te zoeken, door het grote aantal verschillende gegevensgroepen. Je gaat hoe dan ook de normalisatie steeds volledig doorvoeren, en achteraf bepaalde redundanties eventueel opnieuw invoeren, op voorwaarde dat je daarvoor een goede reden kunnen opgeven. Normalisatie vindt plaats in drie stappen. Verschillende tabellen in een relationele database kunnen gegevens bevatten die onderling gekoppeld zijn, die dus samen een grotere gegevensgroep vormen. Bijvoorbeeld: een tabel bevat gegevens van ouders en een andere tabel bevat gegevens van kinderen. Er moet een mechanisme bestaan om aan te geven welke ouders bij welke kinderen horen. Een dergelijke koppeling wordt in het Nederlands ook een relatie genoemd (Engels: relationship). Dit kan tot verwarring leiden. In hetgeen volgt wordt de term relatie gebruikt om een koppeling tussen tabellen aan te geven. - Verwijder de zich herhalende deelverzamelingen (repeterende groepen). - Verwijder de attributen die functioneel afhankelijk zijn van slechts een deel van de sleutel. - Verwijder de attributen die functioneel afhankelijk zijn van andere attributen. Met 'verwijderen' wordt bedoeld in een afzonderlijke gegevensgroep onderbrengen, niet weglaten uit het gegevensmodel. In een relationeel ontwerp wordt een relatie aangegeven door een lijn tussen de twee tabellen die de koppelende velden verbindt. VVKSO Informaticabeheer Databases - pagina 23 VVKSO Informaticabeheer Databases - pagina 24 3.3 Niet genormaliseerde gegevensgroepen Persnr Onderstaande tabel bevat gegevens over meubelen en de leverancier ervan. Het is eigenlijk niets anders dan een losse verzameling van gegevens. Een dergelijke gegevensgroep is een gegevensgroep in de nulde normaalvorm (0NF). Naam Kleur Prijs TAFEL Wit 445,00 S TOEL Wit TAFEL Aantal Naam Straat Postnummer Gemeente Taal 10051 Devos Dorpsplein 1 8000 Brugge Nederlands Frans Engels 20089 Vandevelde Centrumlaan 5 9000 Gent Nederlands Duits Naam Tel Straat Postc Plaats 2 I DEA 03 156 84 95 Boomsesteenweg 185 2610 WILRIJK 198,00 8 FIEREMANS 054 20 60 80 Assesteenweg 1740 TERNAT Het veld Taal bevat de talen gekend door de personeelsleden. Zwart 495,00 6 J ANSSENS 02 256 15 23 Zeypstraat 15 2800 MECHELEN TAFEL Zwart 495,00 6 J ANSSENS 02 256 15 23 Zeypstraat 15 2800 MECHELEN S TOEL Bruin 124,00 10 JANSENS 02 256 15 32 Zeipstraat 15 2000 MECHELEN K AST Zwart 544,00 5 FIEREMANS 02 132 54 98 Assesteenweg 121 1740 TERNAT 054 20 60 80 Ninoofsesteenweg 156 03 156 84 96 Wit K AST Waarom kan deze gegevensgroep niet als tabel gebruikt worden in een relationele database? ROOSDAAL De talenkennis van de personeelsleden moet op een andere manier bewaard worden. Bruin B ED Wat is de primaire sleutel van deze gegevensgroep? Grijs 397,00 9 LINEA 03 189 78 91 Boomsesteenweg 185 2610 WILRIJK Wit 422,00 1 BRICO 02 563 89 78 Hoogstraat 210 1000 BRUSSEL Bruin 745,00 4 JANSSENS 02 256 15 23 Zeipstraat 15 2800 MECHELEN Welke problemen kun je verwachten als je diverse velden voorziet (Taal1, Taal2, Taal3 ...) om dan in elk veld een gekende taal te noteren? Welke problemen treden op als je per personeelslid zoveel rijen voorziet als er gekende talen zijn? Bekijk de adresgegevens van leverancier Janssens. Wat stel je vast? Een gegeven of een combinatie van gegevens die per entiteit meerdere keren voorkomt noemt men een repeterende groep. Twee rijen zijn volledig identiek. Wat denk je hierover? Sommige artikelen bestaan in meerdere kleuren. Welke? Mag dit in een tabel van een relationele database zo bewaard worden? Verklaar. Wordt er op andere plaatsen nog gezondigd tegen dezelfde regel? Waar? De oplossing van de aangehaalde problemen vereist het verwijderen van de repeterende groep (hier het gegeven Taal) uit de oorspronkelijke gegevensgroep en het creëren van een nieuwe gegevensgroep met de gegevens van de repeterende groep. Er wordt een scheiding gemaakt van gegevens WAARBIJ MEN ER MOET VOOR ZORGEN OM GEEN INFORMATIE TE VERLIEZEN! Een volgende opsplitsing zou dan ook verkeerd zijn: Persnr Het is duidelijk dat deze gegevensgroep niet voldoet om als tabel in een relationele omgeving gebruikt te worden. Herlees nog eens de voorwaarden waaraan een tabel in een relationele databank moet voldoen (paragraaf 3.1). Naam 10051 Devos 20089 Vandevelde Straat Dorpsplein 1 Postnummer Gemeente 8000 Brugge Centrumlaan 5 9000 Gent en Aan welke voorwaarden wordt in deze gegevensgroep niet voldaan? Taal Nederlands Bij een relationele tabel hoort ook een primaire sleutel. Frans Wat zou je in deze tabel als primaire sleutel kunnen gebruiken? Engels Nederlands Duits 3.4 Repeterende groepen Voorbeeld 1 Waarom is dit geen goed voorstel en volgend voorstel wel? In een bedrijf worden de volgende personeelsgegevens bijgehouden: VVKSO Informaticabeheer Databases - pagina 25 VVKSO Informaticabeheer Databases - pagina 26 Persnr Naam Straat Postnummer Gemeente eerste normaalvorm 10051 Devos Dorpsplein 1 8000 Brugge 20089 Vandevelde Centrumlaan 5 9000 Gent personeelsnummer naam adresgegevens (straat, postnummer, gemeente) en Persnr en personeelsnummer taal Taal 10051 Nederlands 10051 Frans 10051 Engels 20089 Nederlands 20089 Duits mondelinge kennis schriftelijke kennis en personeelsnummer diplomanaam Om geen gegevensverlies te hebben moet je dus de repeterende groep uit de oorspronkelijke gegevensgroep verwijderen en in een aparte gegevensgroep zetten, waarbij je de primaire sleutel herhaalt. jaartal Personeelsnummer is de primaire sleutel van de eerste gegevensgroep en de refererende sleutel van de twee andere. Wat is een primaire sleutel voor de tweede gegevensgroep? Voorbeeld 3 Bovenstaande gegevensgroepen staan in de eerste normaalvorm (1NF). nulde normaalvorm Het is mogelijk dat er meerdere repeterende groepen voorkomen. Die moeten allemaal in aparte gegevensgroepen bijgehouden worden. De zo ontstane gegevensgroepen zijn gerelateerd. De relatie wordt gelegd door het primaire sleutelveld van de eerste gegevensgroep dat herhaald wordt in de tweede gegevensgroep. In de tweede gegevensgroep kan dat sleutelveld meerdere keren dezelfde waarde bevatten. Het kan dus zeker geen primair sleutelveld voor de tweede gegevensgroep vormen. Men spreekt van een refererende sleutel of foreign key. In het bovenstaande voorbeeld is Persnr de primaire sleutel van de eerste gegevensgroep en de refererende sleutel van de tweede gegevensgroep. Voorbeeld 2 lidnummer naam adresgegevens (straat, postnummer, gemeente) kinderen (naam, leeftijd, gevolgde lessen) eerste normaalvorm Stap 1 lidnummer naam Bij het normaliseren hoef je niet onmiddellijk de gegevens in tabelvorm weer te geven. Meestal is dit zelfs niet mogelijk omdat er te veel gegevens zijn. Je kunt de gegevens ook onder elkaar weergeven zoals in volgend voorbeeld. (De primaire sleutel wordt onderstreept.) adresgegevens (straat, postnummer, gemeente) en lidnummer naamkind nulde normaalvorm personeelsnummer naam adresgegevens (straat, postnummer, gemeente) leeftijd gevolgde lessen Stap 2 talenkennis (taal, mondelinge kennis, schriftelijke kennis) behaalde diploma's (naam, jaartal) lidnummer naam adresgegevens (straat, postnummer, gemeente) en VVKSO Informaticabeheer Databases - pagina 27 VVKSO Informaticabeheer Databases - pagina 28 Persnum P10 P11 P13 P16 P19 lidnummer naamkind leeftijd en lidnummer naamkind gevolgde les Naam Annie Ria Wim Guy Paul en Persnum P10 P10 P11 P11 P11 P13 Voor de eenvoud kun je aan de tweede gegevensgroep een speciaal sleutelveld toevoegen dat kan dienen als primaire sleutel voor de gegevensgroep. Je krijgt dan iets als het volgende. eerste normaalvorm lidnummer naam adresgegevens (straat, postnummer, gemeente) Software Visio WP Excel Word Access Word Misschien heb je het probleem van het softwaregebruik als volgt opgelost. Persnum P10 P11 P13 P16 P19 en kindnummer lidnummer naamkind leeftijd Naam Annie Ria Wim Guy Paul Visio x Wp Word x x Access Lotus Excel x x x x x x x x x x x Schijnbaar is er hier geen sprake van herhalende groepen. In elke cel staat immers hoogstens één vermelding nl. een x als de persoon het betreffende programma gebruikt. en kindnummer Dergelijke structuur heeft enkele belangrijke nadelen. gevolgde les Voorbeeld 4 Hieronder zie je een tabel met namen van personen en de softwarepakketten die ze gebruiken. Persnum P10 P11 P13 P16 P19 Naam Annie Ria Wim Guy Paul Software Visio, WP Excel, Word, Access Word, Access WP, Word, Lotus Lotus, WP, Visio Informaticabeheer Vele velden zijn leeg, maar nemen toch plaats in op de schijf. - Wanneer een pakket niet meer gebruikt wordt, is het bij alle records leeg maar het is nog aanwezig. Je kunt het slechts verwijderen wanneer je de structuur van de tabel wijzigt. Dit is een activiteit die de gewone gebruiker niet zal uitvoeren. Wanneer er een nieuw pakket bijkomt moet je eveneens de tabelstructuur aanpassen. Wanneer je daarentegen met een gesplitste tabel werkt, dan heb je slechts records te verwijderen of toe te voegen. De tabelstructuur verandert hierdoor niet, wel het aantal rijen in de tabel. 3.5 De repeterende groep wordt gevormd door de gebruikte software. Een omzetting naar de eerste normaalvorm geeft het volgende resultaat. VVKSO - Databases - pagina 29 Partiële functionele afhankelijkheid Voorbeeld 1 In een onderneming waar software op maat van de klant ontwikkeld wordt, wordt elke opdracht gezien als een project dat geïdentificeerd wordt door een projectnummer en naam. Analisten, programmeurs en andere medewerkers worden toegewezen aan één of meerdere projecten. Om de kosten te kunnen bepalen, wordt per medewerker bijgehouden hoelang hij aan een project gewerkt heeft. VVKSO Informaticabeheer Databases - pagina 30 nulde normaalvorm Als deze stap niet gezet wordt, zal de database redundante gegevens bevatten, d.w.z. dezelfde gegevens komen meerdere malen voor (zie voorbeeld 2). Inderdaad zal in bovenstaande voorbeeld, voor elk personeelslid dat aan een bepaald project toegewezen wordt zowel de projectnaam als de klantnaam herhaald worden. personeelsnummer adresgegevens (straat, postnummer, gemeente) uurloon Merk op dat door het afzonderen van de projectgegevens de primaire sleutel van de nieuwe gegevensgroep (projectnummer) aanwezig blijft als refererende sleutel in de oorspronkelijk gegevensgroep. projecten (projectnummer, projectnaam, klantnaam, werkduur) eerste normaalvorm De gegevens van de medewerkers zitten samen in de gegevensgroep. De gegevens van het project zitten samen in een andere gegevensgroep. De koppeling tussen deze gegevensgroepen namelijk welke werknemers werken hoelang voor welk project, zit in een aparte gegevensgroep met een samengestelde sleutel. personeelsnummer adresgegevens (straat, postnummer, gemeente) uurloon Voorbeeld 2 en Een groothandelaar koopt bepaalde artikelen bij meerdere leveranciers. personeelsnummer projectnummer projectnaam klantnaam werkduur nulde normaalvorm artikelnummer artikelnaam Kenmerkend voor een primaire sleutel is dat hij een rij volledig identificeert. Dit wil zeggen: als de primaire sleutel gekend is, dan kun je de waarden van alle andere velden vinden. Men zegt dat alle velden functioneel afhankelijk zijn van de primaire sleutel. artikelcategorie leveranciersnummer aantal levtel Als de primaire sleutel een samengestelde sleutel is, m.a.w. uit meerdere velden bestaat, dan is het mogelijk dat kennis van een deel van de sleutel voldoende is om de waarde van een of meer velden te vinden. In het bovenstaande voorbeeld, tweede tabel, is dit het geval voor de velden projectnaam en klantnaam. Als het projectnummer gekend is, dan kan men de waarde van deze beide velden vinden. Men zegt dat deze velden partieel functioneel afhankelijk zijn van de primaire sleutel. In de tweede stap in de normalisering moeten velden die partieel functioneel afhankelijk zijn uit de oorspronkelijke gegevensgroep verwijderd worden en samen met het deel van de sleutel waarvan ze afhankelijk zijn in een nieuwe gegevensgroep geplaatst worden. tweede normaalvorm eerste normaalvorm artikelnummer artikelnaam artikelcategorie en artikelnummer leveranciersnummer aantal levtel personeelsnummer Als de stap naar de tweede normaalvorm (2NF) niet gedaan wordt, kan de tweede gegevensgroep er als volgt uitzien. adresgegevens (straat, postnummer, gemeente) uurloon Levnum L1 L1 L1 L2 L2 L3 L3 L4 en personeelsnummer projectnummer werkduur en projectnummer projectnaam klantnaam VVKSO Informaticabeheer LevTel 235 235 235 999 999 800 800 600 Artnum A1 A2 A3 A2 A4 A1 A5 A6 Aantal 10 12 14 10 5 13 10 5 Welke gegevens worden nodeloos herhaald? Databases - pagina 31 VVKSO Informaticabeheer Databases - pagina 32 Hoeveel keer moet je het telefoonnummer veranderen als het telefoonnummer van L1 verandert? De werkwijze is dus analoog als bij de tweede normalisatiestap. 3.7 Wat gebeurt er indien artikel A6 gewist wordt (niet aangekocht)? Kun je het telefoonnummer van een leverancier toevoegen als hij nog geen artikel geleverd heeft? Overzicht Om tot een goede structuur van je relationele database te komen maak je volgende stappen. Inventariseer alle elementaire gegevens. Welke velden zijn functioneel afhankelijk van slechts een deel van de sleutel? Breng bovenstaande gegevensgroep in tweede normaalvorm. 3.6 Verwijder alle procesgegevens. Zet de gegevensgroepen in eerste normaalvorm. Doe het volgende totdat er geen nieuwe groepen meer ontstaan. Geef de primaire sleutel van de groep aan. Geef de deelverzameling aan die een herhaald aantal keren voorkomt. Herhaal de sleutelgegevens van de oorspronkelijke groep samen met de gegevens van de zich herhalende deelverzameling als nieuwe groep. Verwijder de zich herhalende deelverzameling uit de oorspronkelijke groep. Transitieve functionele afhankelijkheid Voorbeeld In een boekenwinkel houdt men van alle boeken volgende gegevens bij: Zet de gegevensgroepen in tweede normaalvorm. Boekcode Categoriecode CategorieOms Titel Samson op reis BK1276 K36 Kinderen 3-6 jaar VW0058 K03 Kinderen 0-3 jaar Dieren kijken HJ1000 K36 Kinderen 3-6 jaar Samson is ziek Auteur Verkprijs 14,50 2,45 14,50 Geef de attributen aan die niet functioneel afhankelijk zijn van de volledige sleutel. Vorm een aparte groep voor ieder deel van de sleutel waarvan attributen functioneel afhankelijk zijn. Neem in iedere groep de attributen met het bijbehorende sleuteldeel op. Verwijder deze attributen uit de oorspronkelijke groep. Zet de gegevensgroepen in derde normaalvorm. Wat vind je zelf (intuïtief) van dit voorstel voor de gegevensbestandstructuur? Leg uit met voorbeeld(en) waarom je dit voorstel goed of slecht vindt. In dit voorbeeld is de categorieomschrijving (CategorieOms) gekend als de categoriecode gekend is. Dit veld is dus functioneel afhankelijk van een ander veld dan het primaire sleutelveld. Men spreekt in dat geval van transitieve functionele afhankelijkheid. In de derde stap van de normalisering moeten velden die transitief functioneel afhankelijk zijn uit de oorspronkelijke gegevensgroep verwijderd worden en samen met het veld waarvan ze afhangen in een nieuwe gegevensgroep geplaatst worden. Boekcode CategorieCode Titel BK1276 K36 Samson op reis VW0058 K03 Dieren kijken HJ1000 K36 Samson is ziek Auteur Verkprijs 14,50 2,45 14,50 en CategorieCode CategorieOms K36 Kinderen 3-6 jaar K03 Kinderen 0-3 jaar Merk op: CategorieCode is de primaire sleutel van de nieuwe gegevensgroep en de refererende sleutel in de oorspronkelijke groep. VVKSO Informaticabeheer Databases - pagina 33 Geef de attributen aan die ook functioneel afhankelijk zijn van andere attributen. Vorm een aparte groep voor ieder attribuut of combinatie van attributen, waar andere attributen functioneel afhankelijk van zijn. Neem in iedere groep de attributen met bijbehorende sleutel op. Verwijder de attributen van de nieuwe groep(en) uit de oorspronkelijke groep. 3.8 Uitgewerkt voorbeeld Beschouw als gegevensgroep de attributen behorende bij de entiteit Computer in het voorbeeld Computerpark. Nulde normaalvorm De definities worden weergegeven voor de duidelijkheid. ComputerID fungeert als primaire sleutel. Naam Definitie ComputerID identificatie van de computer, naam waaronder de PC gekend is, bijvoorbeeld PC01, Joske ... Serienummer serienummer gegeven door producent Merk merknaam of 'wit product' Type naam van het type zoals gekend bij producent Lokaal locatie waar toestel zich bevindt, bijvoorbeeld: B11, Directiebureel ... Functie specifieke functie, bijvoorbeeld: lescomputer, labocomputer, server, VVKSO Informaticabeheer Databases - pagina 34 internetserver ... Processor type met klokfrequentie Harde schijf merk, type, capaciteit van alle ingebouwde schijven (samengesteld gegeven) Diskettestation merk, type (samengesteld gegeven) CD/DVD merk en type van ingebouwd CD of DVD-station (samengesteld gegeven) RAM aanwezige hoeveelheid RAM RAMtype type RAMUitTeBreiden uitbreidingsmogelijkheid Beeldscherm merk, type (samengesteld gegeven) Klavier merk, type (samengesteld gegeven) Geluidskaart Netwerkkaart ISATotaal ISABezet PCITotaal PCIBezet BIOS Moederkaart Chipset Opmerkingen Tweede normaalvorm Enkel de nieuwe gegevensgroepen moeten bekeken worden, want zij hebben een samengestelde sleutel. In beide gevallen hangen alle niet sleutelattributen af van het eerste deel van de sleutel. Dit leidt tot volgde splitsingen. Muis merk, type (samengesteld gegeven) Geluidskaart merk, type (samengesteld gegeven) ExtraComputer HardeSchijfComputer Netwerkkaart merk, type (samengesteld gegeven) ISATotaal totaal aantal ISA-uitbreidingsgleuven ExtraID ComputerID HardeSchijfID ComputerID ISABezet aantal bezette ISA-uitbreidingsgleuven PCITotaal totaal aantal PCI-uitbreidingsgleuven PCIBezet aantal bezette PCI-uitbreidingsgleuven BIOS naam Extra HardeSchijf ExtraID Type Beschrijving Merk HardeSchijfID Type Capaciteit Snelheid Merk Moederkaart naam Chipset naam Extras soort, merk en type van extra ingebouwde onderdelen, bijvoorbeeld, zipdrive, cd-writer (samengesteld gegeven) Derde normaalvorm Opmerkingen algemene opmerkingen i.v.m. het toestel Diskettestation, CD/DVD, Beeldscherm, Klavier, Muis, Geluidskaart en Netwerkkaart zijn samengestelde gegevens. Bovendien is het zo dat als het identificerend gegeven bekend is. Dit leidt tot volgde splitsingen. eerste normaalvorm Afhankelijk van het computerpark dat beschreven wordt, bevat de gegevensgroep verschillende repeterende groepen. In sommige computerparken is het bijvoorbeeld mogelijk dat een computer meerdere netwerkkaarten bevat, meerdere diskettestations enz. Hier wordt verondersteld dat een toestel meerdere harde schijven kan hebben en meerdere extra's. Dit leidt tot volgende splitsing. Computer Extra HardeSchijf ComputerID Serienummer Merk Type Lokaal Functie Processor Diskettestation CD/DVD RAM RAMtype RAMUitTeBreiden Beeldscherm Klavier Muis ExtraID ComputerID Type Beschrijving Merk HardeSchijfID ComputerID Type Capaciteit Snelheid Merk VVKSO Informaticabeheer Databases - pagina 35 Computer ComputerID Serienummer Merk Type Lokaal Functie Processor DiskettestationID CD/DVD_ID RAM RAMtype RAMUitTeBreiden BeeldschermID KlavierID MuisID GeluidskaartID NetwerkkaartID ISATotaal ISABezet PCITotaal PCIBezet BIOS Moederkaart VVKSO Informaticabeheer Diskettestation DiskettestationID Merk Type Snelheid ComputerID CD/DVD CD/DVD_ID Merk Type Speed Beeldscherm BeeldschermID Merk Type Energiesparend KlavierID KlavierID Merk Type Ergonomisch Muis MuisID Merk Type Soort Geluidskaart GeluidskaartID Merk Type AantalBit Driver Netwerkkaart NetwerkkaartID Merk Type Driver Databases - pagina 36 4 Chipset Opmerkingen Omzetting datamodel naar databaseontwerp Omzetting van entiteiten De andere gegevensgroepen van Computerpark zijn in de derde normaalvorm. Omzetting van relaties 3.9 1 Oefeningen Een entity-relationship diagram kun je omzetten naar de verschillende soorten DBMS. In dit hoofdstuk wordt de omzetting naar een RDBMS besproken. Het resultaat van de omzetting wordt het databaseontwerp genoemd. Verbind de termen in kolom 1 met de synoniemen in kolom 2. Veld Een relationele database ontwerpen wil zeggen de tabellen en hun onderlinge relaties definiëren en wel zo dat de database geen overtollige noch tegenstrijdige gegevens zal bevatten. Rij Record Kolom Attribuut De gegevens moeten steeds genormaliseerd worden. Je mag dit doen op het niveau van het datamodel, d.w.z. het datamodel verfijnen tot de attributen die bij de entiteiten of de relaties horen, een genormaliseerde groep vormen, of op het niveau van het database ontwerp, d.w.z. eerst een omzetting doen naar gerelateerde tabellen en dan de tabellen normaliseren. Relatie Tabel Instantie van entiteit Kenmerk 2 3 Geef een voorbeeld van een unieke sleutel die door volgende organisaties of instellingen wordt gebruikt om iemand te identificeren. - Verzekeringsmaatschappij - Financiële instelling - Mutualiteit - Jeugdbeweging of sportvereniging NAAM Legrand Legrand De Bolle Vervaet Legrand VOORNAAM Pieter Annemie Annemie Sandra Pieter 5 4.1.1 Zelfstandige entiteiten Als je een Entiteit-Relatie model hebt opgemaakt kun je in eerste instantie de entiteiten vertalen in tabellen. De entiteiten worden tabellen, de attributen worden velden. Indien dit nog niet gebeurd is, moet je nog een normalisatie doorvoeren. GEBOORTEDATUM 1980-11-11 1980-11-11 1981-01-15 1980-10-18 1957-05-20 LENGTE 174 168 172 168 174 GEWICHT 60 56 58 56 80 Kun je ook een kandidaat-sleutel vinden? 4 Entiteiten Zelfstandige entiteiten zijn entiteiten die niet in een supertype/subtype relatie zitten. Onderstreep in de eerste rij (veldnamen) van volgende tabel de primaire sleutel. NUMMER P10 P11 P40 P50 P60 4.1 Bepaal een mogelijke structuur voor personeelsgegevens van een onderneming. In de databank met personeelsgegevens wordt naast de gegevens van de werknemers (naam, datum indiensttreding, afdeling, brutoloon) ook de naam en de geboortedatum van de kinderen bijgehouden. Normaliseer de gegevensgroepen die je hebt gevonden als resultaat van de oefeningen uit het vorige hoofdstuk. 4.2 Relaties zonder attributen 4.2.1 Één-op-één relatie Voorbeeld relatie: Gebruikt entiteiten: Bureautafel(BureautafelID, Locatie, Type ) en Werknemer(WerknemerID, Familienaam, Voornaam ) definitie: Administratieve werknemers krijgen een vaste bureautafel toegewezen op kantoor. Deze bureautafel moet met niemand gedeeld worden en iedereen krijgt slechts één bureautafel. Er kunnen werknemers zijn zonder bureautafel en bureautafels die niet gebruikt worden door werknemers. Werknemer Bureautafel De relatie Gebruikt wordt in het relationele ontwerp gebracht door tussen de tabellen Werknemer en Bureautafel een relatie (koppeling) te leggen. Dit gebeurt door aan de tabel Bureautafel de primaire sleutel (WerknemerID) van de tabel Werknemer toe te voegen of omgekeerd. Het toegevoegde veld is de referende sleutel. VVKSO Informaticabeheer Databases - pagina 37 VVKSO Informaticabeheer Databases - pagina 38 De tabellen in het relationele ontwerp worden dus: 4.2.3 Werknemer Beschouw weer dezelfde relatie maar breid ze verder uit door toe te laten dat eenzelfde bureautafel gedeeld wordt door verschillende werknemers. WerknemerID Familienaam Voornaam Bureautafel 1 BureautafelID Locatie Type 1 WerknemerID Werknemer of Werknemer WerknemerID Familienaam Voornaam BureautafelID Bureautafel Om deze relatie te vertalen naar een relationeel ontwerp, creëer je nog een extra tabel naast de tabellen die de entiteiten voorstellen. Deze derde tabel geef je als attributen de primaire sleutel van beide tabellen. Ze vormen samen de primaire sleutel van de nieuwe tabel en elk apart een refererende sleutel voor een entiteit-tabel. Iedere entiteit-tabel heeft een een-op-veel relatie met de bijkomende derde tabel. Bureautafel 1 Veel-op-veel relatie BureautafelID 1 Locatie Type Werknemer In principe zijn beide oplossingen gelijkwaardig. Welke van de twee uiteindelijk praktisch het beste is, hangt af van de bevraging van de databank. Als daarbij meestal uitgegaan wordt van de werknemers (wat waarschijnlijk het geval is), dan is de eerste oplossing de beste. Opmerking WerknemerBureautafel WerknemerID Familienaam Voornaam 1 WerknemerID BureautafelID Bureautafel 1 BureautafelID Locatie Type 4.3 Relaties met attributen In sommige gevallen kan een één-op-één relatie zonder attributen teruggebracht worden tot één tabel. Dit kan enkel als tenminste in een van de tabellen geen enkel attribuut als primaire sleutel kan fungeren, anders krijg je immers transitieve afhankelijk. 4.3.1 Eén-op-één relatie Het is vooral de optionaliteit die zal bepalen of het werken met één enkele tabel zinvol is. Veel lege velden bijhouden heeft geen zin. relatie: Huwt entiteiten: Man(ManID, Familienaam, Voornaam ) en Vrouw(VrouwID, Familienaam ) definitie: Een man huwt een vrouw. Een man kan maar één vrouw huwen en omgekeerd. Niet elke man en niet elke vrouw huwt. 4.2.2 Eén-op-veel relatie Beschouw dezelfde relatie als hierboven maar waarbij het mogelijk is dat een werknemer meerdere bureautafels toegewezen krijgt. Voorbeeld attributen: Huwelijksdatum, NaamGetuige1, NaamGetuige2 Bureautafel Werknemer Man Vrouw De omzetting gebeurt op dezelfde manier als bij een één-op-één relatie maar nu wordt de primaire sleutel van de tabel langs de een-kant toegevoegd als refererende sleutel aan de tabel aan de veel-kant. De relatie wordt vertaald in een bijkomende tabel. Werknemer ManID Familienaam Voornaam WerknemerID Familienaam Voornaam Bureautafel 1 BureautafelID Locatie Type WerknemerID De één- en de veel-kant worden respectievelijk aangeduid door de symbolen 1 en VVKSO Informaticabeheer . Databases - pagina 39 Man Huwelijk 1 Huwelijksdatum NaamGetuige1 NaamGetuige2 1 VrouwID 1 ManID Vrouw 1 VrouwID Familienaam Voornaam Vanwege de één-op-één relatie kan, als primaire sleutel van de tabel die met de relatie overeenkomt, de primaire sleutel van één van beide andere tabellen gekozen worden. VVKSO Informaticabeheer Databases - pagina 40 4.3.2 Een-op-veel relatie 4.3.4 Voorbeeld Relaties zonder attributen relatie: Schrijft in entiteiten: Persoon(PersoonID, Familienaam, Voornaam ) en Cursus(CursusID, Naam, Lesgever, Klaslokaal ) definitie: Een persoon schrijft in voor een cursus. Een persoon kan maar inschrijven voor één cursus. attributen: Inschrijvingsdatum, Inschrijvingsgeld Persoon Naast de entiteiten, wordt de relatie zelf ook vertaald in een tabel. Deze tabel krijgt als attributen de attributen van de relatie en de primaire sleutels van de entiteit-tabellen. Persoon Inschrijving PersoonID Familienaam Voornaam 1 Inschrijvingsdatum 1 Inschrijvingsgeld PersoonID CursusID Cursus 1 CursusID Naam Lesgever Beschouw dezelfde relatie waarbij het nu toegestaan is dat een persoon zich inschrijft voor meerdere cursussen. Cursus PersoonID Familienaam Voornaam Inschrijving 1 Inschrijvingsdatum Inschrijvingsgeld PersoonID CursusID Cursus 1 CursusID Naam Lesgever Klaslokaal Welke verschillen zijn er met de een-op-veel relatie? VVKSO Informaticabeheer - 3 tabellen (1: ; 1: ) - refererende sleutels in relatie-tabel: primaire sleutels entiteiten - primaire sleutel relatie: primaire sleutels entiteiten Uitgewerkt voorbeeld De gegevensgroepen behorende bij de entiteiten in het datamodel voor Computerpark zijn reeds genormaliseerd in vorig hoofdstuk. Alle resulterende gegevensgroepen zullen omgezet worden in een tabel. Dit leidt tot de volgende tabellen: Randapparaat, Software, Licentie, Verbruiksproduct, Leverancier, Computer, HardeSchijf, Extra, HardeSchijfComputer, ExtraComputer, Diskettestation, CD_DVD, Beeldscherm, Klavier, Muis, Geluidskaart, Netwerkkaart. De relaties tussen deze tabellen zijn af te leiden uit het datamodel of volgen uit de normalisering. De oplossing is analoog maar nu is een bijkomende tabel verplicht. Persoon Een-op-een relatie - 3 tabellen (1:1; 1:1) - refererende sleutels in relatie-tabel: primaire sleutels entiteiten - primaire sleutel relatie: een van primaire sleutels entiteiten Een-op-veel relatie - 3 tabellen (1:1; 1: ) - refererende sleutels in relatie-tabel: primaire sleutels entiteiten - primaire sleutel relatie: primaire sleutel entiteit van de veel-kant Veel-op-veel relatie 4.4 Veel-op-veel relatie Persoon Een-op-een relatie - 2 tabellen (1:1) - primaire sleutel ene refererende andere - in sommige gevallen terug te brengen tot één tabel Een-op-veel relatie - 2 tabellen (1: ) - primaire van een-kant: refererende veel-kant Veel-op-veel relatie - 3 tabellen (1: ; 1: ) - 3 de tabel bevat primaire sleutels als refererende sleutel Relaties met attributen Cursus Verklaar de optionaliteit van deze relatie. 4.3.3 Overzicht Databases - pagina 41 Het datamodel bevat drie veel-op-veel relaties en vijf relaties met attributen nl. Levertx en Draait op. Deze moeten nog omgezet worden naar tabellen en relaties voor het relationeel model. Is verbonden met Veel-op-veel relatie zonder attributen. Computer Verbinding Randapparaat ComputerID ComputerID RandapparaatID RandapparaatID VVKSO 1 Informaticabeheer 1 Databases - pagina 42 Levertx Levert3: levering software (één-op-veel) Het gaat hier om 4 verschillende relaties die verschillende entiteiten verbinden. Drie van de relaties zijn één-op-veel en de vierde is veel-op-veel. De relatie wordt vertaald in een tabel LeveringSoftware. Software Elke relatie heeft dezelfde attributen. Naam Definitie Leveringsdatum datum waarop goederen geleverd werden Verplicht Ja Aankoopprijs prijs per stuk Ja Opmerking opmerking i.v.m. de levering SoftwareID LeveringSoftware 1 Leveringsdatum Aankoopprijs 1 Opmerking LeverancierID SoftwareID Leverancier LeverancierID 1 Tussen de tabellen Software en LeveringSoftware bestaat een één-op-één relatie. Deze kan in sommige gevallen teruggebracht worden tot één tabel. Levert1, levering computers (één-op-veel) Omdat een bepaald softwarepakket (installatie cd's) slechts in één exemplaar en door één leverancier geleverd wordt, plaatsen we de attributen van de levering bij in de tabel Software. De relatie wordt vertaald in een tabel: LeveringComputer. Computer ComputerID LeveringComputer 1 Leveringsdatum Aankoopprijs 1 Opmerking LeverancierID ComputerID Leverancier LeverancierID 1 Als meerdere computers bij dezelfde levering aan dezelfde prijs geleverd worden, krijg je dikwijls dezelfde waarden voor de attributen en de tabel LeveringComputer. In dat geval kun je aan de levering een identificatie toekennen en pas je de tabellen aan. Computer ComputerID LeveringID LeveringComputer 1 LeveringID Leveringsdatum Aankoopprijs Opmerking LeverancierID Is dit een goed idee als er veel freeware gebruikt wordt? Verklaar je antwoord. Software SoftwareID LeveranciersID Leveringsdatum Aankoopprijs Opmerking Leverancier LeverancierID 1 Leverancier LeverancierID 1 Hoe voorzie je deze situatie in het datamodel? Levert4: levering verbruiksproducten Hier moet er met een aparte tabel gewerkt worden omdat het om een veel-op-veel relatie gaat. Verbruiksproduct LeveringVerbruiksProd VerbruiksproductID 1 LeveringID Leveringsdatum Aankoopprijs Opmerking LeverancierID VerbruiksproductID Vertaal het aangepaste datamodel naar een databaseontwerp. Bekom je hetzelfde resultaat? Levert2: levering randapparaten (één-op-veel) Leverancier LeverancierID 1 In principe vormen LeverancierID, VerbruikproductID en Leveringsdatum samen een samengestelde primaire sleutel. Hier is de voorkeur gegeven aan een surrogaatsleutel LeveringsID. Idem. Draait op Deze relatie is een veel-op-veel relatie. Er zal dus met een bijkomende tabel moeten gewerkt worden. De attributen van Draait op zijn: VVKSO Informaticabeheer Databases - pagina 43 VVKSO Informaticabeheer Databases - pagina 44 5 Naam Definitie Begindatum datum installatie Einddatum datum verwijdering Opmerking opmerking, bijvoorbeeld Service Release die geïnstalleerd is, optionele componenten Computer DraaitOp ComputerID LeveringID 1 ComputerID SoftwareID Begindatum Einddatum Opmerking Software SoftwareID 1 Een database implementeren Het tabel-ontwerpscherm in MS-Access Gegevenstypes Veldeigenschappen 5.1 Het tabel-ontwerpscherm Je maakt een tabel aan in twee stappen: eerst leg je de tabeldefinitie vast en daarna voer je de gegevens in. Bij het vastleggen van de tabeldefinitie bepaal je de veldnamen, gegevenstypes, beschrijvingen en veldeigenschappen van de velden. Opmerking: mogelijk bevatten alle computers in hetzelfde lokaal ook dezelfde software. Het is zeer belangrijk dat je goed nadenkt voor je de structuur vastlegt. Later wijzigingen aanbrengen, kan behoorlijk ingewikkeld zijn en bovendien soms leiden tot gegevensverlies! Open de database Artemis. Selecteer de tabel tblWerknemers en kies in het databasevenster. Is in dit geval deze oplossing een goede oplossing? Verklaar je antwoord. Je komt in de ontwerpweergave van de tabel. Het scherm voor ontwerpweergave bestaat uit twee delen. In het bovenste venster staan de velden met hun veldnamen, gegevenstype en beschrijving. In het onderste gedeelte zie je een aantal specifieke veldeigenschappen van het geselecteerde veld. Pas het datamodel en het dataontwerp aan aan deze situatie. Connecteert Connecteert is een speciale relatie omdat ze een entiteit verbindt met zichzelf. Ook hier is een supplementaire tabel nodig. Randapparaat RandapparaatID Connectie 1 RandapparaatID1 RandapparaatID2 Vanwege het speciale karakter van tabel Connectie zal er steeds bijzondere aandacht moeten besteed worden aan query's en filters die hiermee gemaakt worden. 4.5 Oefeningen Zet de datamodellen van de oefeningen uit het vorige hoofdstuk om naar databaseontwerpen voor een RDBMS. VVKSO Informaticabeheer Databases - pagina 45 VVKSO Informaticabeheer Databases - pagina 46 Met deze knoppen schakel je tussen de ontwerpweergave en de gegevensbladweergave van de tabel. Wanneer is zo een beschrijving nuttig? 5.1.4 5.1.1 Correct en efficiënt werken met een database betekent dat je een bepaald gegeven slechts één keer invoert en steeds opnieuw gebruikt. Daarom is het zeer belangrijk dat een gegeven zonder fouten en in de juiste vorm in een tabel wordt weggeschreven. Aangepaste veldeigenschappen helpen hierbij. Veldnaam Gebruik de Helpfunctie om de eigenschappen van veldnamen op te zoeken. (Druk op F1 terwijl de muisaanwijzer in de kolom van de veldnaam staat.) Open de tabel tblWerknemers in ontwerpweergave. Regels voor de naamgeving van objecten Vul onderstaande tabel in. Zoek welke veldeigenschappen worden gebruikt om de opgegeven doelen te realiseren. Welke waarden worden toegekend aan de verschillende veldeigenschappen? Gebruik de Helpfunctie om bijkomende informatie op te vragen. In MS-Access kunnen veldnamen maximaal 64 tekens lang zijn en uit elke combinatie van letters, getallen, spaties en speciale tekens bestaan, met uitzondering van een punt (.), uitroepteken (!), accent grave (`) en vierkante haakjes ([ ]). Het is niet mogelijk om dezelfde veldnamen aan meerdere velden toe te wijzen. Let steeds op het volgende. veldnamen Gebruik betekenisvolle veldnamen. Uit de naam van een veld moet je de inhoud ervan kunnen afleiden. Vermijd te lange veldnamen en gebruik zo weinig mogelijk spaties. Dit laatste is vooral van belang als je vaak in expressies of Visual Basic-code naar objecten verwijst. 5.1.2 Veldeigenschappen Hoofdletters Voornaam Kleine letters Adres In gegevensbladweergave Straat en nummer als aangepaste titel Gemeente Vlot sorteren en/of zoeken op gemeente Vul voor de onderstaande velden het gekozen gegevenstype in en ga na waarom die keuze gemaakt werd. Gebruik eventueel de Helpfunctie voor meer uitleg over de verschillende types. Postcode Maximum vier tekens veldnaam gegevenstype Telefoonnummer Maximum 13 posities Functie Bij het invoeren van gegevens moet de gebruiker de functie kunnen kiezen uit een vooraf gedefinieerde lijst (bedrijfsleider of vertegenwoordiger of manager verkoop of ). BrutoWedde Wedden moeten in EUR uitgedrukt worden. Familienaam BrutoWedde InDienst Twee decimale cijfers weergeven Foto Bijzonderheden Gebruik steeds het gepaste gegevenstype. Een postnummer is bijvoorbeeld van het tekentype, ook al bevat het enkel cijfers, omdat je er niet mee rekent. 5.1.3 Beschrijving In de kolom Beschrijving is plaats voor een korte beschrijving van het veld. Deze beschrijving is ook te zien in de statusbalk als het veld geselecteerd is in de gegevensbladweergave. VVKSO Informaticabeheer waarde Precies vier cijfers Werknemer-ID Auto veldeigenschap Moet steeds worden ingevuld. Gegevenstype Zoek in de kolom Gegevenstype welke types mogelijk zijn. doel Familienaam Databases - pagina 47 Toestelnummer Precies twee cijfers Auto De meeste werknemers beschikken over een auto. InDienst Weergave zoals bijvoorbeeld 15-dec-98 Weergave Standaard is de systeemdatum ingevuld. Geslacht VVKSO Wordt weergegeven aan de hand van een cijfer: 1 = Manne- Informaticabeheer Databases - pagina 48 veldnamen doel veldeigenschap waarde Hoeveel kolommen worden opgenomen in de keuzelijst? Waaruit kun je dat afleiden? lijk; 2 = Vrouwelijk Waaruit bestaat de eerste kolom? En de tweede? Waaruit kun je dat afleiden? Open de tabel tblProducten in gegevensbladweergave. Welke kolom wordt in feite bewaard in het veld? Waaruit kun je afleiden? Tot welke categorie behoort productnummer 10? De kolom met het categorienummer is onzichtbaar in gegevensbladweergave. Waaruit kun je dit afleiden? Schakel over naar de ontwerpweergave. Zorg ervoor dat het categorienummer nu wel te zien is in gegevensbladweergave. Vind je in deze tabel een veld terug waarin de categorienaam wordt bijgehouden? Is dat een goed idee? Welk veld zorgt ervoor dat er informatie in deze tabel wordt bijgehouden over de categorie waartoe het product behoort? Door gebruik te maken van het tabblad Opzoeken in het veldeigenschappengedeelte van de ontwerpweergave van de tabel, maak je een veld dat een keuzelijst weergeeft. De waarden in de lijst zijn gegevens uit een bestaande tabel of query of vaste waarden die je invoert bij het maken van het veld. In de tabel tblProducten is het veld categorienummer omgevormd tot een veld met een keuzelijst waarin de categorienamen worden weergegeven. De lijst bevat in feite de kolommen Categorienummer en Categorienaam van de tabel tblCategorieën, maar het categorienummer wordt niet getoond. Heel belangrijk is dat tussen de tabellen tblProducten en tblCategorieën de juiste relatie aanwezig is. Dat leer je in het volgende hoofdstuk. Selecteer het veld Categorienummer en bestudeer het tabblad Opzoeken. Zorg opnieuw voor een gebruiksvriendelijker voorstelling. Wat is het voordeel van de eigenschap Alleen lijst op Ja te zetten? 5.2 Zelf een tabel maken 5.2.1 Probleemdefinitie Juli, augustus en september zijn altijd drukke maanden voor Artemis. Het extra werk wordt opgevangen door aanwerving van jobstudenten. Jij moet de gegevens hiervan bijhouden in een nieuwe tabel 5.2.2 Tabelstructuur Bepaal welke informatie je per jobstudent moet hebben. De tabelstructuur wordt ingevoerd in het Tabelontwerpvenster. Selecteer in het databasevenster het tabblad Tabel en klik op . Kies Ontwerpweergave. Maak gebruik van F1 om uitleg op te vragen over de verschillende onderdelen. VVKSO Informaticabeheer Databases - pagina 49 Het ontwerpscherm heeft een aangepaste werkbalk: VVKSO Informaticabeheer Databases - pagina 50 Beantwoord de nevenstaande vraag voorlopig met Nee. (zie verder) Gebruik Knopinfo om de betekenis van de knoppen te kennen. Vul het Tabelontwerpvenster correct in, rekening houdend met de onderstaande tabel: veldnaam 5.2.3 gegevenstype Familienaam Indexeren Met de veldeigenschap Geïndexeerd kun je het sorteren en zoeken naar gegevens versnellen. Opzoeken en/of sorteren volgens familienaam komt vrij vaak voor en moet dus vlot verlopen. Straat Postnummer Gemeente Open het tabelontwerpvenster opnieuw voor tblJobstudenten. Telefoon Geboortedatum Kies uit het lijstje naast Geïndexeerd Ja (Duplicaten OK). Afdeling Uurloon Waarom kies je voor Duplicaten OK en niet voor Geen duplicaten? Rekeningnummer DatumEersteContract Sla het gewijzigde ontwerp op. Rijbewijs Indexen versnellen het zoekproces. Komt de naam van de jobstudent niet voor dan zal dit vlugger ontdekt worden met een index. Geslacht Opmerkingen Bij het toevoegen, verwijderen en aanpassen van de gegevens van een jobstudent zal MS-Access automatisch alle bestaande indexen aanpassen. Verfijn vervolgens het tabelontwerp. De familienaam (verplicht in te vullen) moet steeds in hoofdletters worden getoond. 5.2.4 Voor het postnummer geef je steeds precies vier cijfers in. Tabelstructuur wijzigen Voeg het veld Voornaam toe na het veld Familienaam. De gemeente wens je steeds in hoofdletters weer te geven. Let op: Wijzigingen aan de tabelstructuur kunnen leiden tot gegevensverlies! Het uurloon kan waarden krijgen tussen 8,00 EUR en 12,00 EUR; de meeste jobstudenten verdienen 10,00 EUR per uur. Voor het rekeningnummer moet je een gepast masker voorzien (enkel cijfers typen en bewaren). De datum waarop het eerste contract met de jobstudent wordt afgesloten kan nooit plaatsvinden na vandaag. Welke problemen kun je verwachten in volgende gevallen: wijzigen van de validatieregel bij het veld Uurloon in: Between 10 And 15? veldlengte bij het veld Familienaam wijzigen in 25. Kun je problemen verwachten als je de veldlengte bij het veld Gemeente wijzigt in 55? Voor de afdeling moet de gebruiker kunnen kiezen uit een lijst (Verkoop, Personeelsdienst, Productie of Marketing). Gebruik voor het maken van een keuzelijst de Wizard Opzoeken bij het kiezen van het Veldtype. De meeste jobstudenten hebben geen rijbewijs. 5.2.5 Bij Geslacht moet je 1 (voor mannelijk) of 2 (voor vrouwelijk) invullen. Met de veldeigenschap Validatieregel kun je de waarden die ingevoerd mogen worden beperken. Een validatieregel van een veld mag echter nooit een veldnaam bevatten. Test de veldeigenschappen aan de hand van vijf goed gekozen voorbeeldrecords. Sluit het ontwerpscherm. Kies wijzigingen opslaan en bewaar de structuur als tblJobstudenten. VVKSO Informaticabeheer Databases - pagina 51 Tabeleigenschappen De jobstudenten van Artemis moeten minstens 18 jaar zijn bij aanwerving. Deze voorwaarde controleren voor elke record vereist de kennis van de Geboortedatum en van DatumEersteContract. Daarom kun je deze eis niet vertalen naar een validatieregel bij een bepaald veld. Via de tabeleigenschappen kan dit wel. VVKSO Informaticabeheer Databases - pagina 52 Klik op de knop Eigenschappen ster als volgt in: of kies Beeld, Eigenschappen .... Vul het dialoogven- 5.3 Een database implementeren Als je een database-ontwerp hebt gemaakt, kun je de database implementeren in MSAccess. Iedere tabel uit het ontwerp wordt geïmplementeerd als een MS-Access tabel. Bij het ontwerp heb je ook al voor elke tabel een primaire sleutel gedefinieerd en heb je relaties tussen de tabellen gelegd. Bij het implementeren van de database moet je dus: - tabellen definiëren; - relaties tussen de tabellen leggen. Bij het definiëren van de tabellen moet je aandacht besteden aan het invoeren van goede veldeigenschappen. De rechte haken ([ ]) duiden aan dat het niet om de woorden DatumEersteContract en Geboortedatum gaat, maar om de velden met die naam. Ga na met de Helpfunctie wat de betekenis is van de functie Year(). Je kunt meerdere voorwaarden aanbrengen in de validatieregel door ze te verbinden met de logische operatoren en en of. Nadat alle gegevens van een record ingevoerd zijn, zal MS-Access controleren of er aan de tabeleigenschappen is voldaan. 5.2.6 Een nieuwe database maken in MS-Access Wanneer je Microsoft Access start, wordt automatisch een dialoogvenster weergegeven waarin je kunt kiezen of je een nieuwe database wilt maken of een bestaande database wilt openen. Als dit dialoogvenster wordt weergegeven, kies je Op basis van een lege database en klik je vervolgens op OK. Als je al een database hebt geopend of het dialoogvenster hebt gesloten dat verschijnt wanneer Microsoft Access wordt gestart, klik je op de knop Nieuw en kies je Lege Database in het taakvenster Nieuw bestand. op de werkbalk Primaire sleutel Voor elke tabel in MS-Access wordt best een primaire sleutel gedefinieerd. Het kiezen van een primaire sleutel heeft volgende voordelen: je kunt nooit twee records met dezelfde waarde voor dat veld (of combinatie van velden) tegenkomen; het sorteren en opzoeken volgens dit veld gaat aanzienlijk sneller; de tabel wordt gerangschikt volgens de waarde van de primaire sleutel. Ga na in de ontwerpweergave van de tabel tblWerknemers welk veld als primaire sleutel werd ingesteld. Hoe herken je de primaire sleutel? Open de tabel tblJobstudenten . Geef een naam en een locatie op voor de database en klik op Maken. Welk(e) veld(en) kunnen hier in aanmerking komen als primaire sleutel? Verklaar je antwoord. 5.4 Voeg een veld JobstudentID toe als primaire sleutel. Welk gegevenstype kies je hiervoor en waarom? VVKSO Informaticabeheer Databases - pagina 53 Oefeningen 1 Hoeveel primaire sleutels kan een tabel hebben. Hoe ken je een primaire sleutel toe aan een veld? 2 Wat is de betekenis van de knoppen VVKSO Informaticabeheer ? Databases - pagina 54 4 Een primaire sleutel bestaat uit meerdere velden. Hoe kun je die primaire sleutel toekennen in MS-Access? Hoe ga je praktisch te werk als deze velden niet naast elkaar liggen? 5.5 Overzicht 5.5.1 Een tabel aanmaken 5 Zoek in de Helpfunctie de specifieke codes op die je per veldtype kunt gebruiken bij het definiëren van een notatie. - structuur (veldnamen met gegevenstype en eventueel beschrijving), veldeigenschappen en tabeleigenschappen vastleggen in het ontwerpscherm; 6 Open de tabel tblKlanten en zorg dat de velden aan volgende voorwaarden voldoen: - gegevens invoeren in de gegevensbladweergave of een formulier. veldnamen Veldnaam doel Naam Hoofdletters Moet steeds ingevuld zijn. Postnr Precies vier cijfers invoeren Veldnamen kunnen maximaal 64 tekens lang zijn en uit elke combinatie van letters, getallen, spaties en speciale tekens bestaan, met uitzondering van een punt (.), uitroepteken (!), accent grave (`) en vierkante haakjes ([ ]). Het is niet mogelijk om dezelfde veldnamen aan meerdere velden toe te wijzen. Gemeente Hoofdletters BTWNR Gepast masker. Enkel cijfers invoeren en bewaren. Bijvoorbeeld: BE 123 123 123 Type Verplicht in te vullen. Keuze maken tussen R(estaurant) Saldo 7 P(articulier), W(inkelier), Gegevenstype T(raiteur) Tekst alfanumeriek gegeven: zowel letters, cijfers als tekens zijn toegestaan maximale lengte: 255 karakters Memo uitgebreid alfanumeriek gegeven maximale lengte: 64 000 karakters memovelden kun je raadplegen, maar je kunt er geen zoekacties of sorteeracties op doen. of Kan nooit negatief zijn. Twee decimalen en valutaweergave. Vele klanten beschikken over een fax. Voeg een veld toe aan de tabel tblKlanten voor het faxnummer. Voorzie het veld van een gepast masker. 8 Mag je de veldlengte van een numeriek veld van lange integer wijzigen in integer als er reeds gegevens in de tabel staan? En omgekeerd? Verklaar je antwoord. 9 Implementeer de database Computerpark. Numeriek Numeriek gegeven (getal). Gebruik dit gegevenstype alleen voor getallen waarmee je wilt rekenen. Voor een postnummer b.v. kies je als gegevenstype tekst omdat je er niet mee moet rekenen. Datum/tijd voor het bewaren van een datum en tijd. Valuta voor het bewaren van monetaire bedragen. De munteenheid stel je in MS-Windows95/98 in (Start, Instellingen, Configuratiescherm, Landinstellingen). Autonummering een getal dat automatisch verhoogt als je een nieuwe record aan de tabel toevoegt. MS-Access vult een veld van dit type zelf in, je kunt het niet bijwerken. Ja/nee Veldtype waarvan de inhoud een logische waarde is: ja/nee, waar/onwaar, aan/uit of 1/0 OLE-object voor het opslaan van gegevens verbonden met een andere toepassing, b.v. een foto, een tekening . geluiden, een Worddocument, een Excel-rekenblad,... Hyperlink Een veld waarin tekst of combinaties van tekst en cijfers opgeslagen worden als tekst en gebruikt worden als hyperlinkadres Wizard Opzoeken Maakt een veld waarmee je door middel van een keuzelijst een waarde kunt kiezen uit een lijst met waarden of uit een andere tabel. Volg stapsgewijs de wizard. Beschrijving Een beschrijving is facultatief. De beschrijving verschijnt op de statusbalk als je het veld selecteert in de gegevensbladweergave of in een formulier. VVKSO Informaticabeheer Databases - pagina 55 VVKSO Informaticabeheer Databases - pagina 56 voor numerieke velden Veldeigenschappen De veldeigenschappen zijn afhankelijk van het gegevenstype. Veldlengte Tekstvelden: maximaal aantal tekens dat het veld kan bevatten, standaard 50 karakters en maximaal 255 karakters. Numerieke velden: de veldlengte verwijst naar de nauwkeurigheid waarmee de getallen bewaard worden (byte,decimal, integer, lange integer, enkele precisie, dubbele precisie). Notatie Specificeert de manier van weergeven en afdrukken van tekst, getallen, tijden en datums. B.v. voor tekstvelden- invoer omzetten in hoofdletters (>) of kleine letters (<); voor numerieke velden: aantal decimalen, met munteenheid, procentnotatie... Invoermasker Een indeling die de invoer van gegevens vergemakkelijkt. Het bevat tekens die letterlijk worden weergegeven (ronde haakjes, punten, koppeltekens... ) en maskertekens die aangeven waar er tekens moeten worden ingevoerd. Bijschrift Tekst die in formulieren en rapporten i.p.v. de veldnaam gebruikt wordt. Standaardwaarde Mogelijkheden Voorbeeld Standaard getalnotatie 71412,5 Afdruk 714123,5 Valuta 1230,6 1 230,60 EUR Euro 1230,6 1 230,60 Vast 1727,7 1728 Standaard 1230,6 1 230,60 Percentage 0,5 50 % Wetenschappelijk 1000 1E+03 voor datum- en tijdvelden Mogelijkheden Afdruk Standaard datumnotatie 96-31-01 16:30:00 Lange datumnotatie Woensdag 31 januari 1996. Middellange datumnotatie 31-jan-96 Vaste waarde die automatisch ingevuld wordt, je kunt deze waarde steeds wijzigen. Korte datumnotatie 96-01-31 Lange tijdsnotatie 16:30:00 Validatieregel Voorwaarde waaraan invoer moet voldoen (b.v. tussen 1 en 6). Middellange tijdsnotatie 04:30 PM Validatietekst Tekst die op het scherm verschijnt wanneer de invoer niet aan de voorwaarde voldoet. Korte tijdsnotatie 16:30 Vereist Bij Ja moet je voor dit veld steeds gegevens invoeren. Het mag niet leeg blijven. Lengte Nul toegestaan Enkel bij tekstvelden. Bij Ja kun je de nulstring ("") invoeren als de gegevens nog niet gekend zijn en je toch iets moet invoeren. Het scheidingsteken van de duizendtallen, het teken voor de munteenheid en de datum en tijdnotatie bepaal je in MS-Windows (Start, Instellingen, Configuratiescherm, Landinstellingen). Geïndexeerd Als een veld geïndexeerd is, verloopt het opzoeken van gegevens sneller. Invoeren en wijzigen verloopt echter trager. Ook als een veld dikwijls dezelfde inhoud bevat is het gebruik van indices geen voordeel. Indexeer je, dan moet je ook nog invoeren: duplicaten OK (2 velden met identieke inhoud zijn mogelijk) of geen duplicaten (2 velden met identieke inhoud zijn niet mogelijk). Veldlengte voor numerieke velden mogelijkheden waarde tussen decimalen aantal bytes Byte 0 en 255 0 1 Integer -32768 en +32767 0 2 Lange integer -2 147 483 648 en 2147 483 647 0 4 Enkele precisie -3,4x10 en +3,4 7 4 Dubbele precisie 1-1,797x10308 en +1,797x1 15 8 Codes Als je niet tevreden bent met één van de voorgedefinieerde notaties, kun je je eigen notatie samenstellen m.b.v. codes. De opbouw van de notatie en de codes zijn afhankelijk van het gegevenstype van het veld waarvoor je een notatie definieert. Codes voor tekst- en memoveld Code Beschrijving @ Een tekstteken (teken of spatie) is vereist & Een tekstteken (teken of spatie) is niet vereist > Alle invoer wordt in hoofdletters weergegeven < Alle invoer wordt in kleine letters weergegeven Aangepaste notaties voor tekst- en memovelden kunnen maximaal twee secties bevatten: Sectie Beschrijving 1 Notatie voor velden die tekst bevatten 2 Notatie voor velden die tekenreeksen met lengte nul en Null-waarden bevatten Notaties Bij numerieke velden en datum en tijd-velden kun je kiezen tussen onderstaande ongedefinieerde notaties. VVKSO Informaticabeheer Databases - pagina 57 VVKSO Informaticabeheer Databases - pagina 58 De belangrijkste codes voor een numerieke veld Code Invoermaskers Beschrijving Met een invoermasker kun je de invoer van gegevens vereenvoudigen en bepaal je welke waarden de gebruikers kunnen invoeren. , Decimale scheidingsteken Spatie Scheidingsteken voor duizendtallen 0 Tijdelijke aanduiding voor een cijfer. Als op deze positie een cijfer staat, wordt het weergeven. Als er geen cijfer staat, wordt er een 0 weergegeven. # Tijdelijke aanduiding voor een cijfer. Als op deze positie een cijfer staat, wordt het weergegeven. Staat er geen cijfer, dan wordt er niets weergegeven. EUR Valutateken % Percentage. De waarde wordt vermenigvuldigd met 100 en er wordt een procentteken toegevoegd. De definitie van het invoermasker kan een tot drie secties bevatten, gescheiden door puntkomma's. Sectie Beschrijving 1 Het eigenlijke invoermasker 2 Hiermee bepaal je of de letterlijke weergaventekens worden opgeslagen. 0 = de letterlijke tekens worden samen met de ingevoerde waarde opgeslagen 1 of leeg = alleen de ingevoerde tekens in de invulruimten worden opgeslagen 3 Het teken dat wordt weergegeven om de invulruimten aan te duiden. Als deze sectie leeg is, wordt het onderstrepingsteken ( _ ) gebruikt. Aangepaste notaties voor numerieke velden kunnen maximaal vier secties bevatten: Sectie Beschrijving 1 Notatie voor positieve getallen 2 Notatie voor negatieve getallen Code Beschrijving 3 Notatie voor nulwaarden 0 Cijfer (0-9), plus- en minteken niet toegestaan, invoer vereist 4 Notatie voor Null-waarden 9 Cijfer (0-9) of spatie, plus- en minteken niet toegestaan, optioneel # Cijfer (0-9) of spatie, plus- en minteken toegestaan, optioneel In de onderstaande tabel vind je de codes terug voor invoermaskers. De belangrijkste codes voor datum- en tijdveld L Letter (A-Z), vereist Code Beschrijving ? Letter (A-Z), optioneel : Tijdscheidingsteken A Letter (A-Z) of cijfer (0-9) , vereist / Datumscheidingsteken. A Letter (A-Z) of cijfer (0-9) optioneel D Dag van de maand in één of twee cijfers, afhankelijk van wat nodig is (van 1 tot en met 31). & Willekeurig teken of spatie, vereist C Willekeurig teken of spatie, optioneel dd Dag van de maand in twee cijfers (van 01 tot en met 31). .,:;-/ Scheidingstekens voor decimalen, duizendtallen, datum, tijd en speciale tekens ddd Eerste twee letters van de dag (ma, di, wo, do, vr, za, zo) > Alle tekens rechts van > worden in hoofdletters weergegeven dddd Volledige naam van de dag (van maandag tot en met zondag) < Alle tekens rechts van < worden in kleine letters weergeven M Maand van het jaar in één of twee cijfers, afhankelijk van wat nodig is (van 1 tot en met 12) ! Masker van rechts naar links opvullen \ Het teken dat hierop volgt, wordt letterlijk weergegeven - meer dan 1 teken: wachtwoord Er wordt een tekstvak gemaakt voor het invoeren van een wachtwoord. Elk teken dat wordt getypt wordt bewaard maar wordt als een sterretje (*) weergegeven;- mm Maand van het jaar in twee cijfers (van 01 tot en met 12) mmm Eerste drie letters van de maand (van jan tot en met dec) mmmm Volledige naam van de maand (van januari tot en met december) W Dag van de week (van 1 tot en met 7). ww Week van het jaar (van 1 tot en met 53). K Datum weergegeven als kwartaal van het jaar (van 1 tot en met 4). J Dag van het jaar (van 1 tot en met 366). Jj Laatste twee cijfers van het jaar (van 01 tot en met 99). jjjj Volledig jaartal (van 0100 tot en met 9999). Validatieregel en validatietekst In de validatieregel kun je de volgende operatoren gebruiken: U Uren in één of twee cijfers, afhankelijk van wat nodig is (van 0 tot en met 23). uu Uren in twee cijfers (van 00 tot en met 23). N Minuten in één of twee cijfers, afhankelijk van wat nodig is (van 0 tot en met 59). nn Minuten in twee cijfers (van 00 tot en met 59). S Seconden in één of twee cijfers, afhankelijk van wat nodig is (van 0 tot en met 59). ss Seconden in twee cijfers (van 00 tot en met 59). VVKSO Informaticabeheer Met een validatieregel kun je bepaalde vereisten opgeven waaraan de ingevoerde waarde van een veld moeten voldoen. Is er niet voldaan aan de voorwaarde, verschijnt de ingevoerde validatietekst. Databases - pagina 59 = > < >= <= <> VVKSO Informaticabeheer gelijk aan groter dan kleiner dan groter dan of gelijk aan kleiner dan of gelijk aan Verschillend van Databases - pagina 60 5.5.2 Opzoeken Als je de Wizard Opzoeken gebruikt voor het maken van een lijst met vaste waarden, worden bepaalde veldeigenschappen ingesteld op basis van de keuzen die je in de wizard hebt gemaakt. Tabelstructuur aanpassen Velden of rijen verwijderen Selecteer de rij en Type rijbron Hier geef je op of de gegevens uit een tabel/query komen of uit een lijst met waarden die wordt aangegeven door de eigenschap Rijbron. - druk op de Delete-toets menuoptie Bewerken, Verwijderen snelmenu - werkbalkknop Velden of rijen verplaatsen Rijbron Als de eigenschap Type Rijbron ingesteld werd op Tabel/query, zal hier de naam van de tabel of query vermeld worden. Selecteer de rij met de rijknop. Sleep dan de geselecteerde rij naar de gewenste positie. Velden of rijen invoegen Afhankelijke kolom In geval van een afhankelijke keuzelijst of een keuzelijst met invoervak met meerdere kolommen geef je hier aan welke kolom afhankelijk is van het onderliggende veld dat is opgegeven bij de eigenschap Rijbron. De gegevens in een afhankelijke kolom worden in het veld opgeslagen. Selecteer de rij waarvoor je een veld wenst in te voegen en - werkbalkknop menuoptie Invoegen, Rijen snelmenu Aantal Kolommen Het ingegeven getal bepaalt het aantal kolommen dat in de keuzelijst staat. Met behulp van de eigenschap Kolombreedte kun je een kolom opnemen zonder dat deze in de lijst wordt weergegeven. 5.5.3 Open het dialoogvenster Tabeleigenschappen met: - Kolomkoppen Als je de veldnamen van de onderliggende rijbron als kolomkoppen wilt gebruiken vul je hier Ja in. Kolombreedte Je moet de waarde die je opgeeft als breedte van elke kolom scheiden door puntkomma. Typ 0 als je een kolom wilt verbergen. Typ een puntkomma zonder getal als je de standaardinstelling wilt gebruiken (ongeveer 2,5 cm). Aantal rijen Hier geef je het maximale aantal rijen op dat in het keuzelijstgedeelte van de keuzelijst met invoervak wordt weergegeven. Lijstbreedte Tabeleigenschappen de knop Eigenschappen menuoptie Beeld, Eigenschappen..., optie Tabeleigenschappen... van het snelmenu van de titelbalk van het ontwerpvenster. Je kunt een beschrijving geven van de tabel en een validatieregel met behorende validatietekst. Gebruik de validatieregel om (een) voorwaarde(n) op te leggen waarbij meerdere velden betrokken zijn. 5.5.4 Primaire sleutel Een primaire sleutel is een veld (of een combinatie van velden) dat kan dienen als unieke identificatie van een record uit de tabel. Het is daarom heel belangrijk dat het sleutelveld wordt ingevuld (null-waarden niet toegelaten) en dat het een unieke waarde bevat. Eén veld of meerdere velden als primaire sleutel instellen: Hier geef je de breedte op van het keuzelijstgedeelte van een keuzelijst met invoervak. - selecteer het veld of de meerdere velden Alleen in lijst - klik op de knop in de werkbalk Hier bepaal je of een keuzelijst met invoervak elke ingevoerde waarde accepteert of alleen tekst die overeenkomt met de waarden in de lijst. VVKSO Informaticabeheer Databases - pagina 61 VVKSO Informaticabeheer Databases - pagina 62