Probeer het zelf
Databases en web-apps kunnen grote zakelijke voordelen opleveren. Een databaseontwerp is essentieel voor het bereiken van uw doelen, of u nu werknemersgegevens wilt beheren, wekelijkse rapporten wilt bijhouden of bestellingen van klanten wilt volgen. Als u de tijd neemt om meer te weten te komen over het ontwerpen van een database, kunt u beter databases bouwen die meteen goed werken en flexibel zijn bij veranderende behoeften.
Belangrijk
Access-web-apps zijn iets anders dan bureaubladdatabases. In dit artikel wordt geen aandacht besteed aan het ontwerpen van web-apps.
Concepten en termen
Laten we beginnen met het leren van enkele basistermen en concepten. Als u een bruikbare database wilt ontwerpen, moet u tabellen maken waarin de nadruk ligt op één onderwerp. U gebruikt velden in uw tabellen om alle gegevens vast te leggen die nodig zijn voor dat onderwerp.
| Relationele databases | Een database waarin gegevens zijn onderverdeeld in tabellen, een beetje zoals spreadsheets. Elke tabel heeft maar één onderwerp, zoals klanten (de ene tabel) of producten (een andere tabel). |
|---|---|
| Records en velden | Opslagruimte voor de discrete gegevens in een tabel. In rijen (of records) worden unieke gegevenspunten opgeslagen, zoals de naam van een klant. Via kolommen (of velden) wordt de informatie die wordt vastgelegd voor elk gegevenspunt, uitgesplitst tot de kleinst mogelijke eenheid: Voornaam kan een kolom zijn en Achternaam kan een andere kolom zijn. |
| Primaire sleutel | Een waarde die ervoor zorgt dat elke record uniek is. Stel dat er twee klanten zijn met dezelfde naam, Hilde Eppink. De record van de ene Hilde Eppink heeft dan bijvoorbeeld het getal 12 als de primaire sleutel, terwijl de andere Hilde Eppink de primaire sleutel 58 heeft. |
| Relaties tussen bovenliggende en onderliggende tabel | Veelvoorkomende relaties tussen tabellen. Eén klant kan bijvoorbeeld meerdere orders hebben. Bovenliggende tabellen hebben primaire sleutels. Onderliggende tabellen hebben refererende sleutels. Dit zijn waarden uit de primaire sleutel die aangeven hoe de records uit de onderliggende tabel zijn gekoppeld aan de bovenliggende tabel. Deze sleutels zijn gekoppeld door een relatie. |
Wat is een goed databaseontwerp?
Twee principes zijn fundamenteel voor een goed databaseontwerp:
- Het vermijden van dubbele gegevens (ook wel redundante gegevens genoemd). Dubbele gegevens betekent niet alleen dat er opslagruimte wordt verspild, maar ook dat de kans op fouten groter wordt.
- Controleren of gegevens juist en volledig zijn. Onvolledige of onjuiste gegevens werken door in query's en rapporten en kunnen uiteindelijk leiden tot verkeerde beslissingen.
U kunt deze problemen als volgt voorkomen:
- Verdeel databasegegevens over tabellen die elk een afgebakend onderwerp vertegenwoordigen en een smalle focus hebben. Voorkom de duplicatie van gegevens in meerdere tabellen. (Neem klantnamen bijvoorbeeld altijd in maar één tabel op.)
- Verbind de tabellen via sleutels en niet door gegevens te dupliceren.
- Voeg processen toe waarmee de nauwkeurigheid en integriteit van databasegegevens kan worden ondersteund en gehandhaafd.
- Houd bij het ontwerpen van de database rekening met de behoeften ten aanzien van de verwerking en rapportage van gegevens.
Volg deze vijf ontwerpstappen om ervoor te zorgen dat een database ook op de lange termijn bruikbaar blijft:
Stap 1: Het doel van uw database bepalen
Begin met het bepalen van het doel van de database.
Meer informatie
Maak een korte samenvatting van het vastgestelde doel en raadpleeg deze samenvatting regelmatig om ervoor te zorgen dat u dicht bij het ontwerp blijft. Als u bijvoorbeeld een kleine database wilt ontwerpen voor een bedrijf aan huis, kunt u misschien een samenvatting schrijven zoals 'De klantendatabase is bedoeld voor het bijhouden van een lijst met klantgegevens om mailings en rapporten te kunnen versturen'. Als het om een database voor een grote onderneming gaat, zijn er misschien wel meerdere alinea's nodig om te beschrijven wanneer en hoe mensen met verschillende rollen de database en de bijbehorende gegevens gaan gebruiken. Schrijf een specifieke en gedetailleerde missieverklaring waarop u gedurende het ontwerpproces kunt terugvallen.
Stap 2: De vereiste gegevens zoeken en organiseren
Verzamel alle typen gegevens die u wilt vastleggen, zoals productnamen en ordernummers.
Meer informatie
Begin met uw bestaande gegevens en registratiemethoden. Het is bijvoorbeeld mogelijk dat u inkooporders momenteel invoert in een grootboek of klantgegevens op papieren formulieren noteert. Gebruik deze bronnen om een overzicht te maken van de gegevens die u op dit moment verzamelt (bijvoorbeeld alle invoervelden op de formulieren). Als u weet dat er in de huidige situatie bepaalde belangrijke informatie niet wordt vastgelegd, omschrijf dan welke unieke gegevens u daarvoor wilt registreren. Elk individueel gegevenstype wordt later een veld in uw database.
Het is niet erg als u niet meteen een perfecte lijst kunt maken, u kunt de lijst altijd nog aanpassen. Maar houd wel rekening met alle mensen die deze informatie gebruiken en vraag naar hun ideeën.
Bedenk vervolgens wat voor gegevens of informatie de database moet opleveren en wat voor rapporten of mailings u wilt produceren. Controleer vervolgens of alle gegevens worden vastgelegd die zijn vereist om te voldoen aan deze doelen. Als u bijvoorbeeld een rapport wilt met verkoopcijfers per regio, moet u verkoopgegevens vastleggen op regioniveau. Het is vaak handig om even een opzet van het rapport te tekenen met de gegevens die u uiteindelijk wilt zien. Noteer vervolgens de gegevens die u nodig hebt om een dergelijk rapport te maken. Ga op dezelfde manier te werk voor mailings of andere uitvoer die de database moet produceren.
Voorbeeld
Stel dat uw klanten zich kunnen aanmelden (of afmelden) voor een periodieke nieuwsbrief die per e-mail wordt verstuurd en dat u een lijst wilt afdrukken met klanten die zich hebben aangemeld. U hebt dan een kolom E-mail versturen nodig in de tabel Klanten, met de toegestane waarden Ja en Nee.
Voor de personen die per e-mail een nieuwsbrief willen ontvangen, hebt u een e-mailadres nodig, waarvoor u ook een veld moet reserveren. Als u de juiste aanhef wilt gebruiken in de e-mail (zoals 'heer' of 'mevrouw'), is een veld Aanhef ook noodzakelijk. Als u gewend bent om uw klanten met hun voornaam aan te spreken in e-mailberichten, kunt u nog het veld Voornaam toevoegen.
Tip
Vergeet niet om elk stukje informatie op te splitsen in de kleinst mogelijke eenheid, zoals voornaam en achternaam voor een klantentabel. Als u weet dat u een bepaald gegevensitem (zoals de achternaam van klanten) zult gaan gebruiken bij sorteren, zoeken, berekeningen uitvoeren of rapporteren, is de vuistregel dat u dat item in een eigen veld moet opnemen.
Stap 3: Gegevens verdelen over tabellen
Verdeel de gegevensitems over hoofdentiteiten of onderwerpen, zoals producten, klanten en orders. Elk onderwerp wordt een tabel.
Meer informatie
Nadat u de lijst met vereiste gegevens hebt samengesteld, bepaalt u de belangrijkste entiteiten (of onderwerpen) die u nodig hebt om uw gegevens te ordenen. Voorkom dubbele gegevens binnen entiteiten. Stel dat de voorlopige lijst voor een database met verkoopgegevens er zo uitziet:
De belangrijkste entiteiten zijn: klanten, leveranciers, producten en orders. Dit betekent dat u begint met vier tabellen: één voor gegevens van klanten, één voor gegevens van leveranciers, enzovoort. Dit hoeft niet het definitieve ontwerp te zijn, maar het is wel een goed uitgangspunt.
Opmerking
De beste databases bevatten meerdere tabellen. Laat u niet in de verleiding brengen om alle gegevens onder te brengen in één tabel. U krijgt dan te maken met dubbele gegevens, een grotere database en meer fouten. Ontwerp de database zo dat elk stukje informatie maar eenmaal wordt vastgelegd. Als u merkt dat gegevens worden herhaald, zoals het adres van een leverancier, past u de structuur van de database aan om die gegevens in een aparte tabel te plaatsen.
Laten we eens naar de onderstaande tabel kijken om erachter te komen waarom voor databasetabellen de regel 'minder is meer' niet opgaat:
Elke rij bevat informatie over zowel het product als de leverancier. Aangezien veel producten afkomstig zijn van dezelfde leverancier, moeten de naam en adresgegevens van de leverancier vaak worden herhaald. Dit is een verspilling van schijfruimte. Het is beter om de leveranciersgegevens eenmaal op te nemen in een aparte tabel Leveranciers en die tabel te koppelen aan de tabel Producten.
Het tweede probleem met dit ontwerp wordt duidelijk wanneer u gegevens van de leverancier moet wijzigen. Stel dat u het adres van een leverancier moet wijzigen. Aangezien het adres op verschillende plaatsen voorkomt, kan het gebeuren dat u het adres op één plaats vergeet te wijzigen. Als het adres van de leverancier maar op één plaats is geregistreerd, is dit probleem niet meer aan de orde.
Stel tot slot dat u slechts één product betrekt bij Coho Winery en dat u dat product wilt verwijderen, maar de naam- en adresgegevens van de leverancier wilt bewaren. Hoe kunt u met dit ontwerp de productrecord verwijderen zonder ook de leveranciersgegevens kwijt te raken? Dat is niet mogelijk. Aangezien elke record naast gegevens over een leverancier ook gegevens over een product bevat, is het onmogelijk de een te verwijderen zonder de ander te verwijderen. Als u deze gegevens gescheiden wilt houden, splitst u deze tabel in tweeën: de eerste voor productgegevens en de tweede voor leveranciersgegevens. Wanneer u vervolgens een productrecord verwijdert, verwijdert u alleen de gegevens over het product, niet de gegevens over de leverancier.
Stap 4: Gegevensitems omzetten in kolommen
Bepaal welke gegevens u in elke tabel moet opslaan. Deze afzonderlijke stukjes informatie worden velden in de tabel. Zo kan een tabel Werknemers velden bevatten als Achternaam, Voornaam en Datum indiensttreding.
Meer informatie
Nadat u het onderwerp voor een databasetabel hebt gekozen, mogen in de kolommen in die tabel alleen gegevens worden opgeslagen over dat onderwerp. Zo mogen in een producttabel alleen gegevens van producten worden opgeslagen, niet van de bijbehorende leveranciers.
Gebruik de lijst die u eerder hebt gemaakt om te bepalen welke gegevens u in de tabel wilt bijhouden. In de tabel Klanten kunt u bijvoorbeeld deze gegevens vastleggen: Voornaam, Achternaam, Adres, E-mail versturen, Aanhef en E-mailadres. Elke record (klant) in de tabel bevat dezelfde set kolommen, zodat voor elke klant exact dezelfde gegevens worden opgeslagen.
Maak uw eerste lijst en bekijk en verfijn deze. Vergeet niet om de gegevens op te splitsen in de kleinst mogelijke velden. Als de oorspronkelijke lijst bijvoorbeeld Adres als veld bevat, splitst u dat veld op in Straat, Plaats, Staat en Postcode. Als u klanten in verschillende landen hebt, kunt u nog het veld toevoegen. Op die manier kunt u bijvoorbeeld mailings in de juiste indeling uitvoeren of verkoopoverzichten per land weergeven.
Nadat u de gegevenskolommen in elke tabel hebt verfijnd, kunt u voor elke tabel een primaire sleutel gaan kiezen.
Stap 5: Primaire sleutels opgeven
Kies voor elke tabel een primaire sleutel. De primaire sleutel, zoals Productnummer of Ordernummer, vormt een unieke aanduiding voor elke record. Als u niet over een duidelijke, unieke id beschikt, kunt u een sleutel laten genereren door Access.
Meer informatie
Er is een methode nodig om elke rij in elke tabel uniek aan te duiden. Hierboven kwam al even de situatie te sprake dat twee klanten dezelfde naam hebben. In dat geval moet er toch een manier zijn om die personen afzonderlijk te identificeren.
Elke tabel moet dus een kolom (of een set kolommen) bevatten waarmee elke rij uniek wordt geïdentificeerd. Dit wordt de primaire sleutel genoemd en is vaak een uniek nummer, zoals een werknemersnummer of een serienummer. Access gebruikt primaire sleutels om gegevens uit meerdere tabellen snel te koppelen en de gegevens voor u samen te voegen.
Soms bestaat de primaire sleutel uit twee of meer velden. Zo kan de primaire sleutel van een tabel Ordergegevens, met regelitems voor orders, bestaan uit een combinatie van deze twee kolommen: Ordernummer en Productnummer. Als een primaire sleutel uit meer dan één kolom bestaat, wordt dit ook wel een samengestelde sleutel genoemd.
Als u al een unieke id hebt voor de gegevens in een tabel, zoals productnummers die een unieke aanduiding vormen van alle producten in de catalogus, kunt u die waarde gebruiken, maar alleen als de waarden voldoen aan deze regels voor primaire sleutels:
- De id is altijd uniek voor elke record. Dubbele waarden zijn niet toegestaan in een primaire sleutel.
- Er is altijd een waarde beschikbaar voor het item. Elke record in de tabel moet een primaire sleutel hebben. Als u meerdere kolommen gebruikt om de sleutel te maken (zoals Onderdeelfamilie en Onderdeelnummer), moeten beide waarden altijd aanwezig zijn.
- De primaire sleutel is een waarde die niet wordt gewijzigd. Aangezien ook door andere tabellen wordt verwezen naar de sleutels, betekent een wijziging van een primaire sleutel in de ene tabel een wijziging op alle plaatsen waar naar de sleutel wordt verwezen. Regelmatige wijzigingen vergroten de kans op fouten.
Als u geen duidelijke id hebt, kunt u een willekeurig, uniek nummer gebruiken als de primaire sleutel. U kunt bijvoorbeeld aan elke order een uniek ordernummer toewijzen, uitsluitend om de order te identificeren.
Tip
Als u een uniek nummer wilt maken als de primaire sleutel, voegt u een kolom toe met het gegevenstype AutoNummering. Het gegevenstype AutoNummering zorgt ervoor dat er automatisch een unieke, numerieke waarde wordt toegewezen aan elke record. Dit type id bevat geen feitelijke informatie over de rij die met de id wordt aangeduid. Een dergelijke id is ideaal als primaire sleutel omdat de getallen hetzelfde blijven, in tegenstelling tot een primaire sleutel met gegevens van een rij, zoals een telefoonnummer of de naam van een klant.
Wilt u meer zien?
Richtlijnen voor het geven van namen aan velden, besturingselementen en objecten