Informatieanalyse en databaseontwerp Practicum 3 Lieve Mona, dus: Relatiemanagement
Inhoud Workshop 3 Relationele Databases Zelf werken aan RD’s Voorbereiden op de opdracht, de casus
Wat kun je nu? Je kunt een eenvoudige platte database maken: Tabellen met gegevens maken Formulier voor het toevoegen van nieuwe gegevens Queries gebruiken om informatie te selecteren Rapporten om schriftelijk overzicht te bieden Je beheerst de basis van de diverse design views om formulieren, rapporten etc aan te kunnen passen naar jouw wensen. Lukt dit nog niet (goed) dan: Herhaal sheets college 1 en 2 (2 is aangepast!) Gebruik de help-functie Kijk je buurman/vrouw lief aan Deze vaardigheden zijn essentieel voor eindwerk!
Demo Theorie Relaties op Whiteboard Als je dit mist, mis je een heleboel informatie die je nodig hebt voor de informatie-analyse van de eindopdracht!
Beschrijving van de context voor de opdracht De firma Teleprom heeft zijn verkoop in een database gezet. Deze database is in het beginstadium van ontwikkeling (nog niet af). Teleprom levert artikelen en diensten Bij elke levering hoort een factuur De factuur wordt gemaakt op basis van verschillende tabellen: Een tabel met klantgegevens Een tabel met artikelgegevens Dit kan alleen goed gaan met relaties!
Aan de slag! Download op www.accessworkshop.tk onder het kopje Workshop 3 de volgende database: “verkoop”, sla die op op je eigen schijf en open hem. Je ziet een aantal losse tabellen: Database Verkoop Tabel Inhoud Contactpersonen contactpersonen Klanten klantgegevens Artikelen en Diensten artikelgegevens Orders ordergegevens
De te leggen relaties: Tussen Contactpersonen en Klanten Tussen Orders en Klanten Tussen Orders en “Artikelen en diensten” Denkvraag: Waarom hebben we deze relaties nodig? (denk er eerst over na, klik dan pas door)
De te leggen relaties: Tussen Contactpersonen en Klanten Elke klant heeft een contactpersoon binnen het bedrijf. Tussen Orders en Klanten Bij elke order moeten gegevens van de klant vermeld worden. Tussen Orders en “Artikelen en diensten” Bij elke order moeten de gegevens van de artikelen vermeld worden.
Definities Primaire Sleutel Om relaties te kunnen leggen, moet er in elke tabel een primair sleutelveld (primairy key) staan, waarbij de gegevens in dat veld per record verschillen. Vaak heeft zo’n veld het gegevenstype AutoNummering (AutoNumber) zodat Access een uniek nummer toekent (zie het als BV je Sofi Nummer, ieder mens heeft zijn eigen nummer)
Definities Relaties Een relatie is een verbinding tussen overeenkomstige velden in twee tabellen. Als gevolg van een relatie kunnen gegevens uit verschillende tabellen gecombineerd worden in bijvoorbeeld een factuur. Vaak zijn de overeenkomstige velden sleutelvelden (primairy keys!), die meestal in beide tabellen dezelfde veldnaam hebben. Dat laatste hoeft echter niet perse (maar het is wel handig!)
De Een op Een relatie De Een op Een relatie komt niet vaak voor. Meestal combineer je beide tabellen tot één tabel Soms is het handig om één grote tabel in een aantal kleinere te splitsen. In ons voorbeeld heeft elk bedrijf binnen de tabel Klanten zijn contactpersoon, waarvan de gegevens in Contactpersoon staan:
Opdracht 1: De Een op Een relatie Zorg dat je in het databasevenster bent Druk op de knop Relationships van de werkbalk Database Het lege venster Relationships verschijnt Staat het dialoogvenster Show Table niet op het scherm, klik dan op de knop Show Table:
Selecteer de tabel Contactpersonen en klik op Add (toevoegen) De tabel verschijnt in het venster Relationships Voeg ook de tabel klanten toe Misschien komt deze achter het dialoogvenster terecht. Sluit het dialoogvenster Show Table
Dialoogvenster Edit Relationships Sleep het veld Debiteurnr uit de tabel Contactpersoon naar het veld Debiteurnr in de tabel Klanten
Nu verschijnt het dialoogvenster Je ziet dat onderin bij het Relationship Type het type ‘one to one’ staat Klik op Create
De relatie geeft Access nu weer met een lijntje: Één op één relaties werken we niet verder uit. Dit type komt zeer weinig voor namelijk. We gaan nu verder met één op veel relaties.
Een op Veel relaties: achtergrond Een klant kan meerdere orders aanmaken Een artikel kan meerdere keren verkocht worden (nou ja, verschillende exemplaren uit de voorraad natuurlijk) Een SLB’er heeft meerdere studenten in zijn groep Een student heeft meerdere cijfers in zijn boom Hiervoor hebben we de Een op Veel relatie
Opdracht 2: De Een op Veel relatie Ga weer naar het relationship overzicht. Klik op tabel weergeven Voeg de tabel Orders toe Sluit het venster Add Table Sleep het veld Debiteurnr uit de tabel Klanten naar het veld Debnr in de tabel Orders Het venster Relaties Bewerken verschijnt. Zet de optie ‘Enforce Referential Integrety’ aan. Klik op Create. Het moet er ongeveer zo uit zien:
Definitie: Referentiele integriteit Dit dient om fouten te voorkomen. Dit checkt of je gebruik maakt van bestaande gegevens (dus een order aan een klant koppelen die daadwerkelijk bestaat) Je kunt zien of het actief is door de dikkere lijnen. Extra opties: Cascade Update Related Fields Stel de primairy key van een artikel wijzigt. Als deze optie aanstaat, dan wijzigt het in je order meteen mee (raak je niks kwijt). Zo niet, dan kan je ineens sokken ipv een dvd speler toegestuurd krijgen. Cascade Delete Related Records Stel je wist je klant, dan wist dit ook de orders (let op! Dit wil je niet altijd laten gebeuren!)
Tip om foutjes te corrigeren Relaties kun je bewerken door er op te dubbelklikken (op de lijn dus) Je kunt relaties wissen door er één keer op te klikken (dan wordt de lijn dik en is hij geselecteerd) en op Delete te drukken. Er zijn nog wel meer mogelijkheden, die kun je zelf wel ontdekken.
Opdracht 3: Nog een Een op Veel relatie Leg een relatie tussen de tabel Artikelen en Orders: We willen dat we altijd bestaande artikelen kunnen bestellen Referentiele integriteit moet dan ……..??? (zie voorgaande stof) We willen niet dat als we een artikel uit het assortiment halen, dat het dan op oude orders verdwijnt Cascade Delete Related Records moet dan ….. ???? (zie voorgaande stof)
De Veel op Veel relatie Bestaat wel, heb je niet nodig nu. Hij is handig voor oa Een order met meerdere items Komt niet voor op de eindopdracht. Gelukkig maar, want hij is verdraaid lastig om goed uit te leggen ;-)
Iets doen met al dat werk We gaan een aantal formulieren maken Maak met de wizard voor elk van de volgende tabellen een standaard formulier (dus 3 formulieren!), gewoon alles er op zoals je gewent bent: Artikelen en Diensten Contactpersonen Klanten Check de werking van deze formulieren door bij elk een nieuw record in te voegen.
Dat was een makkie, nu het lastige deel Maak een formulier met de Wizard voor de table Orders Open dit formulier in de Design View Vergroot het formulier aan de rechterkant zodat je de ruimte hebt om meer velden te plaatsen. (let op dat de toverstaf/Wizard aan staat!) Voeg een Combo Box toe naast het DebNr veld Kies: “I want .. Look up in a table or query” Kies voor de Table Klanten Kies Debiteurnummer en Bedrijf (naar rechts dus klikken!) Zorg dat het vinkje om de key column te verbergen aan staat Kies Store the value… in het veld DebNr Noem het veld Bedrijf en druk op Finish Schakel naar de Weergave (knopje Linksboven), werkt het? (je ziet in het lijstje als het goed is een aantal bedrijfsnamen
Wat kun je daar nou mee? Stel je voor, je hebt 1000 cliënten. Weet jij van allen nog het klantnummer? Je kunt ze nu op naam kiezen, en de computer doet de rest. Of is het onthouden van je 10 personeelsleden hun nummers al vervelend? Klik, opzoeken en klaar. Dat scheelt trouwens ook de nodige tikfouten.
Meer denkwerk van hetzelfde Maak ook een combobox op het formulier Orders om makkelijk artikelen te kunnen kiezen. (kies dus om de informatie uit de tabel Artikelen te halen): Je wilt het ArtikelID gebruiken en de ArtikelBeschrijving. En je slaat het op onder … van de tabel orders. Werkt dit? Goed Zo!
Opdrachten/Huiswerk Verbreek de relatie tussen klanten en contact-personen Maak in de tabel Contactpersonen een nieuw veld, ContactID, en zet die op AutoNumber Wis de oude Primairy key van die tabel en maak een nieuwe op ContactID Leg een één op veel relatie tussen ContactID uit de tabel Contactpersonen en Contactpersoon uit de tabel Klanten. Dwing natuurlijk Referentiele Integriteit af. Pas het formulier Klanten aan zodat je makkelijk een contactpersoon kan kiezen. Maak een Rapport waaruit blijkt welke klant wat wanneer heeft besteld, tegen welke prijs. (meerdere tables toevoegen in je report). Maak een Query om klant 1 uit te kiezen, en maak dan eenzelfde rapport als hierboven, maar dan alléén met klant 1 er dus op!
Casus/Eindwerk Een advocatenkantoor wil graag een op maat gemaakt administratieve database Casus staat op www.accessworkshop.tk Voor deze Casus moet je beheersen: Begrijpend lezen/InformatieAnalyse Tabellen maken, aanpassen en het nut van datatypen begrijpen Formulieren maken, aanpassen Query’s maken, begrijpen hoe criteria werken en wat je er mee kunt doen Rapporten maken, begrijpen hoe je ze aan kunt passen Relaties tussen tabellen kunnen leggen. Gebruik de oude sheets! Koop/leen een boek! Zorg voor een slimme(re) buurman/vrouw!
Inleveren Casus Je werkt alleen, of in tweetallen (aanrader!) Elk tweetal levert EIGEN werk in. Niet aanwezig = onvoldoende! Maak je het tijdens de workshopuren? Heel goed! Dan kan ik je helpen als het misgaat!
Beoordeling Casus Schaal 1 tot 14, 6 is voldoende (5.5 dus niet!) Database structuur: Tabellen Relaties Invoermethodes: Werking formulieren Uitvoermethodes: Werking Queries Werking Rapporten Kwaliteit (bonus/malus-punt): Bruikbaarheid product (informatie via rapporten bv) Professionele lay-out Correct taalgebruik
Herkansing/Problemen Workshoppers die het niet afkrijgen hebben op dezelfde dag de mogelijkheid bij andere uren (indien plaats beschikbaar!) het af te maken. Als je dit niet red (onwaarschijnlijk) ga je helaas door naar de volgende ronde (half jaar later)
Boekentips Werkboek Access 2003 (of 2002) Maya Bunschoten ISBN: 9789059061286 The Access (versienummer) Bible Access for Dummies?