changequote(`{{', `}}') include({{../common.m4}}) # Practicum 1 ## Opdracht 1 Is geïnstalleerd q_norm(2) q_with_test(3) q_with_test(4) q_with_test(5) q_with_test(6) (Er is geen output want deze query draait zonder foutmelding nu) q_with_output(7) ## Opdracht 8 Deze oplossing biedt geen volledige redundantie omdat de kolom `Eenheid` in de `Product` tabel herhaalde waarden bevat. Ook kunnen er meerdere klanten zijn die op één adres wonen, maar momenteel zouden de kolommen `Postcode` en `Huisnummer` van tabel `Klant` herhaald worden. ## Opdracht 9 Een strokendiagram bevat alleen informatie over de kolomnamen en relaties van een tabel. Een populatiediagram laat ook de inhoud zien voor elke tabel. ## Opdracht 10 Single point of definition houdt in dat je geen herhaalde of hard-coded waardes in je query hebt staan. Door deze waardes op een plaats te definiëren is de code beter onderhoudbaar. ## Opdracht 11 `ID`, `Postcode` en `Huisnummer` moeten ingevuld zijn omdat deze de `not null` constraint hebben. Query: include_sql({{t11}}) Output: include({{t11.md}}) ## Opdracht 12 Alle tabellen behalve `OrderProduct` hebben referentiële integriteit omdat ze allemaal een primary key hebben, en deze gebruikt wordt om tussen de tabellen naar elkaar te refereren. OrderProduct heeft wel een primary key, maar binnen deze database zijn er geen tabellen die de primary key van `OrderProduct` als foreign key gebruiken. ## Opdracht 13 Dit zou je op kunnen lossen door de veel-op-veel relatie op te delen in meerdere een-op-meer relaties. ## Opdracht 14 Een klant kan nul of meer orders plaatsen, die elk één of meer producten bevatten. ## Opdracht 15 `commit` en `rollback`. Na het starten van een transactie kun je `commit` gebruiken om je gemaakte wijzigingen toe te passen, of `rollback` om ze te annuleren. ## Opdracht 16 0 refereert naar het letterlijke getall 0, terwijl NULL refereert naar een lege/niet ingevulde waarde. ## Opdracht 17 Normaliseren is een techniek die je kunt gebruiken om een databasestructuur te maken die informatie niet dubbel opslaat, en tabellen klein en overzichtelijk houdt. Dit zorgt er voor dat je geen redundante data opslaat, en dat je minder risico loopt op dataverlies doordat je kleinere tabellen aanpast met de `insert`, `update` en `delete` commando's. ## Opdracht 18 Je zou de statussen een numerieke waarde kunnen maken, en deze omzetten naar een string in het programma die de query ontvangt, of door een losse tabel te maken die voor elk getal een string bevat die de status beschrijft als tekst. ## Opdracht 19 In de tabel `Product` worden de eenheden herhaald. Ook deze zou je om kunnen zetten naar numerieke waardes die de eenheden representeren. ## Opdracht 20 Ik zou een transactie maken die deze veranderingen alvast uitrekent van tevoren, en deze pas committen tijdens een gepland onderhoudsmoment. Omdat dit gegarandeerde veranderingen aan de gebruikte query's en/of software die de data uit de database ontvangt vereist, zou het zo fijn mogelijk zijn als alles van tevoren wordt getest in een ontwikkelomgeving, zodat de klanten van de software zo min mogelijk uitvaltijd ervaren.