Cursussen/Courses Codesnippets     Top 
Software Ontwikkeling - Relationele database


1. Inleiding
Tools: UwAmp, Xampp, WampServer => PhpMyAdmin
IDE database modules (Visual Studio, Netbeans, …)
SQLite Database Browser (portable apps)
SQLite2009 Pro Enterprise Manager
Gegevens in een database kunnen op verschillende manieren geordend worden. Als die ordening gebeurt volgende het wiskundige relationele model (voor het eerst beschreven door Edgar F. Codd in 1970) dan spreekt men van een relationele database. Het programma dat die database beheert noemt men dan een RDBMS of Relationeel Data Base Management Systeem.
Enkele bekende RDBMS programma's zijn: Microsoft Access, Microsoft SQL Server, Oracle, MySQL, DB2, Ingres, PostgreSQL, SQLite, …
Een (relationele) database is opgebouwd uit tabellen met rijen en kolommen die je kan voorstellen in een rooster waarbij de eerste rij de kolomkoppen bevat. In de vakliteratuur gebruikt men ook de benamingen: tabel (relation), record (tuple), veld (attribute).
Tussen de verschillende tabellen kunnen relaties (niet te verwarren met een wiskundige relatie) bestaan. Een sleutelgegeven uit de ene tabel wordt overgenomen in de andere tabel. Deze relaties (relationships) worden bepaalt door de "normalisatie" stappen uit te voeren (zie nog een beetje verder in deze tekst).


2. Schema (database) naam bepalen
De eerste stap in het aanmaken van een database bestaat erin een goede naam voor de database te kiezen. De naam verwijst eventueel naar het project of naar de inhoud van de tabellen.
Je moet een zelfstandig naamwoord kiezen (enkelvoud) of woorden die verbonden zijn met een liggend streepje (underscore). Uiteraard kan je geen namen kiezen van de systeem databases bv. mysql, information_schema, …
In de tool MySQL Workbench kan je de database naam instellen door een naam te kiezen voor het “schema” (rechtermuisklik op het standaard tabblad “mydb” en “Edit Schema” uitvoeren).
Bij het gebruik van MySQL Workbench kan je “Forward Engineering” gebruiken om de database en de tabellen te laten aanmaken op basis van het door jou ontworpen database schema (menu-ingang: Database – Forward Engineer…). Je kan dan met phpMyAdmin de aangemaakte MySQL database controleren.
In de phpMyAdmin tool kan je in het tabblad “Databases” een naam ingeven voor de nieuwe database.
Met de SQLite Database Browser tool kan je ook een nieuwe SQLite database aanmaken en beheren (Android Studio heeft geen database module in de IDE).


3. Tabelnamen bepalen
De tabelnaam beschrijft enigszins de inhoud. De naam wordt meestal in het enkelvoud gebruikt. Soms gebruikt men een voorvoegsel bv. tbl_klant.
Als je MySQL Workbench hebt gebruikt dan zijn de tabelnamen dezelfde als de entiteitsnamen bv. tutorial, pagina, persoon, cursus, …
In de programma code kan je een “tabel”-klasse aanmaken die dezelfde naam heeft als de tabelnaam. Het doorgeven van database gegevens gebeurt dan door gebruik te maken van objecten of object-lijsten. De eigenschappen van het aangemaakte object bevatten dan de informatie uit de velden van de database tabel.


4. Veldnamen bepalen
De regels voor de naamgeving van de velden van een tabel zijn eenvoudig.
• er mogen geen spaties in staan;
• woorden mogen samengevoegd worden met een liggend streepje (underscore);
• je kan woorden samenvoegen en elk woord met een hoofdletter laten beginnen (CamelCase);
• een veldnaam is uniek binnen de tabel maar kan wel opnieuw gebruikt worden in een andere tabel.
Als je steeds veldnamen en andere namen in kleine letters gebruikt zal je in de programma code later minder syntax fouten veroorzaken.


5. Veldeigenschappen bepalen
De mogelijke waarden die in een veld kunnen ingevuld worden kan je instellen door de juiste veldeigenschappen te kiezen.
Elke database ondersteunt de meeste veldtypes (of datatypes). Een MySQL (phpMyAdmin) voorbeeld.


6. Sleutelvelden bepalen
In elke tabel moet een primaire sleutel (primary key) aangeduid worden.
De primaire sleutel indentificeert elke record in de tabel en moet uniek zijn.
Meestal wordt een afzonderlijk “id” veld toegevoegd aan elke tabel. Dit “id”-veld heeft als veldtype “INT” of “INTEGER”, mag niet “NULL” zijn en wordt automatisch verhoogt (auto_increment). Er wordt ook een index aangemaakt voor dit veld.
PK = primary key, NN = not null, AI = auto-increment (MySQL Workbench).


7. Normalisatie
Door gegevens en gegevensgroepen te herschikken komt men tot een goed gestructureerde database waarin geen overtollige informatie zit.
Stap 1: verwijder alle procesgegevens (nulde normaalvorm)
Resultaten van berekeningen met de inhoud van andere velden kunnen steeds met een programmafunctie opnieuw uitgevoerd worden. Deze gegevens moeten niet opgenomen worden in de database.
Stap 2: verwijder herhalende deelverzamelingen (repeterende groepen) (eerste normaalvorm)
Als bv. in een veld “taal” (van de tabel “persoon”) verschillende talen worden ingevuld dan is dit een herhalende deelverzameling.
De herhalende deelverzameling wordt dan een aparte tabel (“taal”) met een refererende sleutel die verwijst naar de primaire sleutel van de oorspronkelijke tabel en een veld waarin de taal wordt vermeld (1 record per persoon/taal).
Een tweede voorbeeld:
lidnummer
naam
adresgegevens
kinderen (naam, leeftijd, gevolgde_lessen)
=> een lid kan meerdere kinderen hebben:
lidnummerlidnummer
naamnaam_kind
adres gegevensleeftijd
 gevolgde_lessen
=> een kind kan meerdere lessen gevolgd hebben:
lid nummerlid nummerlid nummer
naamnaam_kindnaam _kind
adres gegevensleeftijdgevolg de_les

Stap 3: verwijder attributen die functioneel afhankelijk zijn van een deel van de sleutel (tweede normaalvorm)
Sommige velden zijn slechts afhankelijk van een deel van de samengestelde primaire sleutel. Deze velden moeten in een aparte tabel geplaatst worden en het deel van de samengestelde sleutel waarvan ze afhankelijk zijn wordt toegevoegd.
Een voorbeeld:
=> nulde normaalvorm:
personeelsnummer
adresgegevens
uurloon
projecten (projectnummer, projectnaam, klantnaam, werkduur)
=> eerste normaalvorm:
personeels nummerpersoneels nummer
adres gegevensproject nummer
uurloonproject naam
 klant naam
 werkduur
=> tweede normaalvorm:
personeels nummerpersoneels nummerproject nummer
adres gegevensproject nummerproject naam
uurloonwerkduurklant naam

Stap 4: verwijder attributen die functioneel afhankelijk zijn van andere attributen (derde normaalvorm)
Het veld CategorieOms is gekend als de Categoriecode gekend is. De categorie omschrijving is afhankelijk van categoriecode. Het veld CategorieOms wordt in een aparte tabel geplaatst samen met de categoriecode.
Nadat de normalisatie stappen zijn doorlopen worden aan de gegevensgroepen een naam gegeven. Deze naam is tevens de tabelnaam. In het voorbeeld hierboven kan je dus 2 tabellen aanmaken: boek en categorie.