Groepswerk Technieken voor Datamodellering Verbinnen M. & Vanhuysse R. 2013-2014
Overzicht project management Logboek 2/4/14 team gevormd, onderwerp vastgelegd; 7/4/14 Inzending definitiestudie; 23/4/14 opstellen en normaliseren van conceptueel ERD 30/4/14 opstellen CREATE en INSERT statements 7/5/14 afwerken INSERT statements, opstellen queries en verslag Zelfevaluatie team De samenwerking verliep vlot. We twijfelden in het begin over een geschikt onderwerp, maar Maxime kwam al snel met het simpele idee om een database voor een restaurant te maken. Samen bepaalden we een eenvoudige inhoud in de definitiestudie. Het normaliseren on opstellen van het ERD verliep vlot door de keuze van dit onderwerp. In de oefenzittingen splitsten we onze aandacht: Robrecht schreef de CREATE statements en het verslag en Maxime schreef de INSERT en SELECT statements. We zijn beiden tevreden over het resultaat en appreciëren de wederzijdse input in het project. We denken dat we door dit project voldoende hebben bijgeleerd om de leerstof onder de knie te krijgen. We zijn overeengekomen dat onze inspanning gelijk liggen en hebben daarom de verdeling van de punten gedaan door te tossen. Maxime krijgt 5 punten en Robrecht 6.
Definitiestudie Restaurant case study Probleemstelling Definitie studie Het doel van dit project is het opzetten van een restaurant. Ons doel is het uiteenzetten van het beheer om de werking van het restaurant zo efficiënt mogelijk te maken en het restaurant zo winstgevend mogelijk. Interviews Wat is de richting die u uit wilt met het restaurant (sterrenzaak of brasserie, etc.)? Wij willen een eenvoudig restaurant opzetten zoals er velen zijn in de Muntstraat in Leuven. Dit zijn gezellige niet al te grote restaurants met een hele goede prijs/kwaliteit verhouding die zeer budgetvriendelijke is zodat alle soorten groepen van mensen bij ons kunnen komen tafelen. Studenten en werkende mensen zijn onze doelgroep. Hoe gaat de bediening geregeld worden? Ons opzet is het restaurant opdelen in verschillende zones van tafels. Per zone van tafels worden er dan 1 of meerdere obers aangewezen zodat de bediening heel vlot gaat en de wachttijden miniem zijn. Werken jullie met een reservatie systeem? Wij hebben besloten om te werken met een systeem waarin het mogelijk is om te reserveren maar waar het ook mogelijk is om binnen te stappen en te vragen voor een tafel. Dit is heel flexibel en zorgt voor een lage drempel om bij ons te komen dineren. Studenten leven in een hels tempo waarbij reserveren voor een restaurant meestal niet past. Zij stappen een restaurant naar keuze binnen en wij staan open voor hun komst. Hoe wordt er afgerekend? De rekening wordt opgemaakt per tafel op het einde van het diner. Hier zijn de maaltijden en de bestelde dranken inbegrepen.
Situatieschets Dit restaurant is een zaak die staat op zichzelf. De situering is de Muntstraat in Leuven, waar tevens nog andere restaurants gevestigd zijn. Op dit moment is de gehele boekhouding nog op papier: reservaties worden locaal of telefonisch doorgegeven en bijgehouden in een agenda, bestellingen worden per tafel neergeschreven door het personeel en de rekeningen worden bij het verlaten van het restaurant opgesteld. De menu s zijn opgebouwd als volgt: er is een ruime keuze tussen voorgerechten, hoofdgerechten, desserts en dranken. Probleemomschrijving De restauranthouder beseft dat het huidige systeem niet mee is met de tijd. Dit blijkt uit de trage bediening en kleine fouten die gemaakt worden bij het opdienen. Om de situatie te verbeteren wil hij een digitaal systeem met bijhorende database opstellen. Per voorgerecht, hoofdgerecht of dessert worden een ID, een prijs, al dan niet seizoensmaaltijd, aantal personen en al dan niet behorende tot een menu bij gehouden. Voor de dranken wordt er een ID, een prijs, een hoeveelheid van de drank(cl of l) en een eventueel alcohol percentage bijgehouden. De dranken, voorgerechten, gerechten en desserts worden dan via hun ID gekoppeld tot 1 bestelling. De bestelling bestaat uit een bestelnummer, een totaal prijs, een tafelnummer, een klantnummer (in dien dat bestaat voor de klant; dit staat de restauranthouder toe om trouwe klanten te belonen met korting op volgende rekeningen). Er wordt ook bijgehouden welke ober welke bediening verzorgt, om bij de verloning de fooi te berekenen.
Conceptueel Ontwerp
Logisch Ontwerp
Technisch Ontwerp CREATE statements CREATE TABLE groepswerk_vanhuysse_verbinnen.bestellingen (bestellingsid int not null, klantid tafelid int, int, aantal_personen_bediend int not null, CONSTRAINT bestellingen_pkey PRIMARY KEY (bestellingsid) ) ---------------------------------------------- CREATE TABLE groepswerk_vanhuysse_verbinnen.tafels (tafelid int not null REFERENCES groepswerk_vanhuysse_verbinnen.bestellingen, aantal_personen int not null, reservatie boolean not null, CONSTRAINT tafels_pkey PRIMARY KEY (tafelid) ) ---------------------------------------------- CREATE TABLE klanten (klantid int not null REFERENCES groepswerk_vanhuysse_verbinnen.bestellingen, naam char(45) not null, voornaam char(45) not null, korting int, CONSTRAINT klanten_pkey PRIMARY KEY (klantid) )
---------------------------------------------- CREATE TABLE bestellingen_has_consumpties (bestellingsid int consumptieid int not null REFERENCES groepswerk_vanhuysse_verbinnen.bestellingen, not null REFERENCES groepswerk_vanhuysse_verbinnen.consumpties, CONSTRAINT bestellingen_has_consumpties_pkey PRIMARY KEY (bestellingsid, consumptieid) ) ------------------------------------------ CREATE TABLE consumpties (consumptieid INT not null, naam VARCHAR(45), prijs FLOAT not null, voor_aantal_personen INT, CONSTRAINT consumpties_pkey PRIMARY KEY(consumptieID) ) ---------------------------------------------- CREATE TABLE dranken (consumptieid INT not null REFERENCES groepswerk_vanhuysse_verbinnen.consumpties, hoeveelheid_drank FLOAT not null, alcoholpercentage INT, CONSTRAINT dranken_pkey PRIMARY KEY(consumptieID) ) ------------------------------------------ CREATE TABLE voorgerechten
(consumptieid INT not null REFERENCES groepswerk_vanhuysse_verbinnen.consumpties, seizoen VARCHAR(45), menu VARCHAR(45), CONSTRAINT voorgerechten_pkey PRIMARY KEY(consumptieID) ) ------------------------------------------ CREATE TABLE hoofdgerechten (consumptieid INT not null REFERENCES groepswerk_vanhuysse_verbinnen.consumpties, seizoen VARCHAR(45), menu VARCHAR(45), CONSTRAINT hoofdgerechten_pkey PRIMARY KEY(consumptieID) ) ------------------------------------------ CREATE TABLE desserten (consumptieid INT not null REFERENCES groepswerk_vanhuysse_verbinnen.consumpties, seizoen VARCHAR(45), menu VARCHAR(45), CONSTRAINT deserten_pkey PRIMARY KEY(consumptieID) ) INSERT statements INSERT INTO CONSUMPTIES (consumptieid,naam,prijs,voor_aantal_personen) VALUES (0001,'plat_water',2,1),
(0002,'bruis_water',2,1), (0003,'cola',2,1), (0004,'sprite',2,1), (0005,'rode_wijn',3,1), (0006,'witte_wijn',3,1), (0007,'champagne',3,1), (0008,'wisky',7,1), (0009,'wodka',7,1), (0011,'kaaskroketten',8,1), (0012,'garnaalkroketten',8,1), (0013,'tapas',12,2), (0014,'scampi_met_look',9,1), (0015,'noorse_schotel',10,1), (0016,'bruschetta',13,2), (0017,'kippensoep',7,1), (0018,'tomaat_garnaal',14,2), (0021,'garnaalkroketten_met_frietjes',15,1), (0022,'entrecôte_met_peperroomsaus',18,1), (0023,'kaaskroketten_met_frietjes',14,1), (0024,'kabeljauwhaasje_met_prei_en_kroketten',19,1), (0025,'varkenskarbonade_met_frietjes',15,1), (0026,'pasta_al_carbonara',15,1), (0027,'pad_thai_kip',11,1), (0028,'babi_pangang',13,1), (0031,'dame_blanche',5,1), (0032,'damme_noire',5,1),
(0033,'suikertaart',4,1), (0034,'moelleux',6,1), (0035,'chocolademousse',4,1), (0036,'tiramisu',5,1), (0037,'créme_brulé',4,1), (0038,'fruitsalade',3,1), (0039,'chocoladebrownie',3,1); INSERT INTO DRANKEN (consumptieid,hoeveelheid_drank,alcoholpercentage) VALUES (0001,25,DEFAULT), (0002,25,DEFAULT), (0003,25,DEFAULT), (0004,25,DEFAULT), (0005,10,12), (0006,10,12), (0007,10,12), (0008,4,40), (0009,4,40); INSERT INTO VOORGERECHTEN (consumptieid,seizoen,menu) VALUES (0011,'winter',null), (0012,'zomer',null), (0013,null,null), (0014,'zomer',null),
(0015,'lente',null), (0016,'lente',null), (0017,'herfst',null), (0018,'zomer',null); INSERT INTO HOOFDGERECHTEN (consumptieid,seizoen,menu) VALUES (0021,'zomer','zeevruchten'), (0022,null,'genieter'), (0023,null,null), (0024,'zomer','vis'), (0025,'winter',null), (0026,null,'italiaans'), (0027,null,'oosters'), (0028,null,'chinees'); INSERT INTO desserten (consumptieid,seizoen,menu) VALUES (0031,null,null), (0032,null,null), (0033,null,'belgische keuken'), (0034,null,'franse keuken'), (0035,null,null),
(0036,null,'italiaans'), (0037,null,null), (0038,'zomer',null), (0039,'zomer',null); INSERT INTO bestellingen (bestellingsid, klantid, tafelid, aantal_personen_bediend) VALUES (1, null, 1, 1), (2, null, 1, 2), (3, 1, 2, 2), (4, null, 3, 3), (5, null, 4,4); INSERT INTO tafels (tafelid,aantal_personen,reservatie) VALUES (1,2,FALSE), (2,2,FALSE), (3,4,TRUE), (4,4,FALSE), (5,8,FALSE), (6,8,FALSE); INSERT INTO klanten (klantid, naam, voornaam, korting) VALUES (1, 'Verbinnen', 'Maxime', 10), (2, 'Vanhuysse', 'Robrecht', 10),
(3, 'Willis', 'Bruce', 90), (4, 'Van Pee', 'Jo', null); Queries Query 1: selecteer alle hoofdgerechten voor tafel 3 SELECT * FROM ((((groepswerk_vanhuysse_verbinnen.tafels INNER JOIN groepswerk_vanhuysse_verbinnen.bestellingen ON groepswerk_vanhuysse_verbinnen.bestellingen.tafelid = groepswerk_vanhuysse_verbinnen.tafels.tafelid) INNER JOIN groepswerk_vanhuysse_verbinnen.bestellingen_has_consumpties ON groepswerk_vanhuysse_verbinnen.bestellingen.bestellingsid = groepswerk_vanhuysse_verbinnen.bestellingen_has_consumpties.bestellingsid) INNER JOIN groepswerk_vanhuysse_verbinnen.consumpties ON groepswerk_vanhuysse_verbinnen.consumpties.consumptieid = groepswerk_vanhuysse_verbinnen.bestellingen_has_consumpties.consumptieid) INNER JOIN groepswerk_vanhuysse_verbinnen.hoofdgerechten ON groepswerk_vanhuysse_verbinnen.hoofdgerechten.consumptieid = groepswerk_vanhuysse_verbinnen.consumpties.consumptieid) WHERE tafels.tafelid = 3 Query 2: selecteer alle bestellingids voor tafel 1 SELECT bestellingen.bestellingsid FROM (groepswerk_vanhuysse_verbinnen.tafels INNER JOIN groepswerk_vanhuysse_verbinnen.bestellingen ON groepswerk_vanhuysse_verbinnen.bestellingen.tafelid = groepswerk_vanhuysse_verbinnen.tafels.tafelid) WHERE tafels.tafelid = 1 Query 3: bereken de korting voor klant 1 SELECT klanten.korting*(sum(consumpties.prijs)/100) FROM ((((groepswerk_vanhuysse_verbinnen.tafels INNER JOIN groepswerk_vanhuysse_verbinnen.bestellingen ON
groepswerk_vanhuysse_verbinnen.bestellingen.tafelid = groepswerk_vanhuysse_verbinnen.tafels.tafelid) INNER JOIN groepswerk_vanhuysse_verbinnen.klanten ON groepswerk_vanhuysse_verbinnen.bestellingen.klantid = groepswerk_vanhuysse_verbinnen.klanten.klantid) INNER JOIN groepswerk_vanhuysse_verbinnen.bestellingen_has_consumpties ON groepswerk_vanhuysse_verbinnen.bestellingen.bestellingsid = groepswerk_vanhuysse_verbinnen.bestellingen_has_consumpties.bestellingsid) INNER JOIN groepswerk_vanhuysse_verbinnen.consumpties ON groepswerk_vanhuysse_verbinnen.consumpties.consumptieid = groepswerk_vanhuysse_verbinnen.bestellingen_has_consumpties.consumptieid) WHERE bestellingen.bestellingsid = 3 GROUP BY klanten.korting, consumpties.prijs