diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rwxr-xr-x | opdracht-1/build | 6 | ||||
-rw-r--r-- | opdracht-1/opdracht-1.m4 | 110 | ||||
-rw-r--r-- | opdracht-1/q2.sql | 38 | ||||
-rw-r--r-- | opdracht-1/q3.sql | 35 | ||||
-rw-r--r-- | opdracht-1/q4.sql | 20 | ||||
-rw-r--r-- | opdracht-1/q5.sql | 36 | ||||
-rw-r--r-- | opdracht-1/q6.sql | 2 | ||||
-rw-r--r-- | opdracht-1/reset.sql | 5 | ||||
-rw-r--r-- | opdracht-1/t3.sql | 1 | ||||
-rw-r--r-- | opdracht-1/t4.sql | 1 | ||||
-rw-r--r-- | opdracht-1/t5.sql | 14 | ||||
-rw-r--r-- | opdracht-1/t6.sql | 1 | ||||
-rw-r--r-- | opdracht-1/t7.sql | 3 |
14 files changed, 275 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3756c5e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +opdracht-*/*.html +opdracht-*/opdracht.pdf +opdracht-*/opdracht-*.md diff --git a/opdracht-1/build b/opdracht-1/build new file mode 100755 index 0000000..17e3379 --- /dev/null +++ b/opdracht-1/build @@ -0,0 +1,6 @@ +#!/bin/bash +cat reset.sql q*.sql | mysql -u root mysql +for file in t*.sql; do + mysql -Hu root mysql < "$file" &> "${file/%.sql}.html" +done +m4 opdracht-1.m4 > opdracht-1.md diff --git a/opdracht-1/opdracht-1.m4 b/opdracht-1/opdracht-1.m4 new file mode 100644 index 0000000..efe4d96 --- /dev/null +++ b/opdracht-1/opdracht-1.m4 @@ -0,0 +1,110 @@ +changequote(`{{', `}}') + +define({{q_norm}}, {{ +## Opdracht $1 + +```sql +include({{q$1.sql}}) +``` +}}) + +define({{q_with_output}}, {{ +## Opdracht $1 + +```sql +include({{t$1.sql}}) +``` + +include({{t$1.html}}) +}}) + +define({{q_with_test}}, {{ +q_norm({{$1}}) + +```sql +include({{t$1.sql}}) +``` + +include({{t$1.html}}) +}}) + +# Practicum 1 + +## Opdracht 1 + +Is geinstalleerd + +q_norm(2) +q_with_test(3) +q_with_test(4) +q_with_test(5) +q_with_test(6) +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 + +> Wat is single point of definition, en wat levert dit op? + +## Opdracht 11 + +> Welke kolommen van de tabel ‘tblKlant’ voldoen aan de ‘verplichte- waarderegel’ + +## Opdracht 12 + +> Op welke tabel of tabellen is de ‘referentiele- integriteitsregel’ van toepassing en waarom? + +## Opdracht 13 + +> Indien een ‘veel op veel’ relatie ontstaat, hoe wordt dit dan opgelost? + +## Opdracht 14 + +> Wat zijn in het gegeven ERD de ‘eigenschappen’ van tabel ‘tblProduct’ + +## Opdracht 15 + +> Wat zijn de twee belangrijkste transacties en wat betekenen deze? + +## Opdracht 16 + +> Wat is het verschil tussen ‘0’ en ‘NULL’? + +## Opdracht 17 + +> Wat betekent ‘normaliseren’ en wat is het doel hiervan? + +## Opdracht 18 + +> In de tabel ‘tblOrder’ wordt de status bijgehouden per order. Enkele statussen zouden kunnen zijn: +> +> - Geleverd +> - In bestelling +> - Niet meer leverbaar +> +> Hoe zou je de databasestructuur kunnen verbeteren op basis van de tabel +> ‘tblOrder’ met het oog op onderhoud van de statussen? + +## Opdracht 19 + +> In de tabel ‘product’ is iets dergelijks van toepassing als bij vraag 18. +> +> - Wat is hier aan de hand? +> - Hoe kun je dit verbeteren? + +## Opdracht 20 + +> Stel dat je de wijzigingen van vraag 18 en 19 bij alle afnemers van je software gelijktijdig wilt doorvoeren. +> +> Hoe zou je dit het beste op afstand kunnen uitvoeren? diff --git a/opdracht-1/q2.sql b/opdracht-1/q2.sql new file mode 100644 index 0000000..fda5f53 --- /dev/null +++ b/opdracht-1/q2.sql @@ -0,0 +1,38 @@ +create table if not exists Klant ( + ID int unsigned not null auto_increment, + Naam varchar(45) null, + Postcode varchar(45) not null, + Huisnummer int not null, + Telefoonnummer int null, + primary key (ID) +); + +create table if not exists `Order` ( + ID int unsigned not null auto_increment, + KlantID int unsigned not null, + Besteldatum date not null, + Status varchar(45) not null, + primary key (ID), + foreign key (KlantID) references Klant(ID) +); + +create table if not exists Product ( + ID int unsigned not null auto_increment, + Naam varchar(45) not null unique, + Eenheid varchar(45) not null, + Prijs FLOAT(24) not null, + Beschrijving varchar(500) not null, + primary key (ID) +); + +create table if not exists OrderProduct ( + ID int unsigned not null auto_increment, + OrderID int unsigned not null, + ProductID int unsigned not null, + Aantal int unsigned not null, + primary key (ID), + foreign key (OrderID) references `Order`(ID), + foreign key (ProductID) references Product(ID), + unique(OrderID, ProductID) +); + diff --git a/opdracht-1/q3.sql b/opdracht-1/q3.sql new file mode 100644 index 0000000..4eb247b --- /dev/null +++ b/opdracht-1/q3.sql @@ -0,0 +1,35 @@ +insert into Product ( Naam, Eenheid, Prijs, Beschrijving ) values ( + "Komkommer", + "Kg", + 0.95, + "Lekker fris en knapperig, veels te duur tegenwoordig!" +); + +insert into Product ( Naam, Eenheid, Prijs, Beschrijving ) values ( + "Donut", + "Stuk", + 0.95, + "Rond, met gat" +); + +insert into Product ( Naam, Eenheid, Prijs, Beschrijving ) values ( + "Dreft", + "Liter", + 4.49, + "Goed soppen met dit groene goedje" +); + +insert into Product ( Naam, Eenheid, Prijs, Beschrijving ) values ( + "Vim schuurpoeder", + "Kg", + 1.35, + "Niet te verwarren met de tekstverwerker" +); + +insert into Product ( Naam, Eenheid, Prijs, Beschrijving ) values ( + "Spons", + "Stuk", + 0.95, + "Misschien kun je deze met vim gebruiken" +); + diff --git a/opdracht-1/q4.sql b/opdracht-1/q4.sql new file mode 100644 index 0000000..4f2727f --- /dev/null +++ b/opdracht-1/q4.sql @@ -0,0 +1,20 @@ +insert into Klant ( Naam, Postcode, Huisnummer, Telefoonnummer ) values ( + "Hennie", + "2134SD", + 192, + 264765234 +); + +insert into Klant ( Naam, Postcode, Huisnummer, Telefoonnummer ) values ( + "Bert", + "2174DF", + 156, + 263564070 +); + +insert into Klant ( Naam, Postcode, Huisnummer, Telefoonnummer ) values ( + "Bernard", + "1270IC", + 120, + 918437957 +); diff --git a/opdracht-1/q5.sql b/opdracht-1/q5.sql new file mode 100644 index 0000000..88fd2a3 --- /dev/null +++ b/opdracht-1/q5.sql @@ -0,0 +1,36 @@ +insert into `Order` (KlantID, Besteldatum, Status) values ( + 1, + '2022-09-29', + "Besteld" +); + +insert into `Order` (KlantID, Besteldatum, Status) values ( + 2, + '2014-03-10', + "Geleverd" +); + +insert into `Order` (KlantID, Besteldatum, Status) values ( + 2, + '2018-12-29', + "Geleverd" +); + +insert into `Order` (KlantID, Besteldatum, Status) values ( + 3, + '2023-07-25', + "Besteld" +); + +insert into `Order` (KlantID, Besteldatum, Status) values ( + 3, + '2018-02-20', + "Geleverd" +); + +insert into OrderProduct (OrderID, ProductID, Aantal) values (1, 1, 20); +insert into OrderProduct (OrderID, ProductID, Aantal) values (2, 2, 12); +insert into OrderProduct (OrderID, ProductID, Aantal) values (3, 3, 6); +insert into OrderProduct (OrderID, ProductID, Aantal) values (4, 4, 11); +insert into OrderProduct (OrderID, ProductID, Aantal) values (5, 5, 3); + diff --git a/opdracht-1/q6.sql b/opdracht-1/q6.sql new file mode 100644 index 0000000..e8d43ff --- /dev/null +++ b/opdracht-1/q6.sql @@ -0,0 +1,2 @@ +alter table `Order` drop foreign key KlantID; +alter table `Order` add constraint KlantID foreign key (KlantID) references Klant(ID) on update cascade; diff --git a/opdracht-1/reset.sql b/opdracht-1/reset.sql new file mode 100644 index 0000000..c2f5ee9 --- /dev/null +++ b/opdracht-1/reset.sql @@ -0,0 +1,5 @@ +drop table OrderProduct; +drop table `Order`; +drop table Product; +drop table Klant; + diff --git a/opdracht-1/t3.sql b/opdracht-1/t3.sql new file mode 100644 index 0000000..a04cef1 --- /dev/null +++ b/opdracht-1/t3.sql @@ -0,0 +1 @@ +select * from Product; diff --git a/opdracht-1/t4.sql b/opdracht-1/t4.sql new file mode 100644 index 0000000..4d92133 --- /dev/null +++ b/opdracht-1/t4.sql @@ -0,0 +1 @@ +select * from Klant; diff --git a/opdracht-1/t5.sql b/opdracht-1/t5.sql new file mode 100644 index 0000000..7d97b92 --- /dev/null +++ b/opdracht-1/t5.sql @@ -0,0 +1,14 @@ +select + Klant.ID as Klantnr, + Klant.Naam, + `Order`.ID as Ordernr, + `Order`.Besteldatum as dtBesteldatum, + `Order`.Status, + Product.Naam as Product, + Product.Eenheid, + Product.Beschrijving, + OrderProduct.Aantal +from Klant +join `Order` on `Order`.KlantID = Klant.ID +join OrderProduct on OrderProduct.OrderID = `Order`.ID +join Product on Product.ID = OrderProduct.ProductID; diff --git a/opdracht-1/t6.sql b/opdracht-1/t6.sql new file mode 100644 index 0000000..7abcc17 --- /dev/null +++ b/opdracht-1/t6.sql @@ -0,0 +1 @@ +update Klant set ID=4 where ID=3; diff --git a/opdracht-1/t7.sql b/opdracht-1/t7.sql new file mode 100644 index 0000000..133cff5 --- /dev/null +++ b/opdracht-1/t7.sql @@ -0,0 +1,3 @@ +select * from `Order`; +select * from `Order` where KlantID = 1; +select * from Product where Prijs < 100; |