1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
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.
|