Modelling
Modelling
Voor deze oefeningen maak je gebruik van MongoDB Community Server (bevat MongoDB Compass)
Maak voor elke oefening een nieuwe database aan en zorg hierbinnen ook voor de gepaste collections.
Elke oefening is, naast een opgave ook voorzien van één of meerdere voorbeelden. Gebruik deze gegevens om de validatieregels te definiëren in MongoDB Compass. Zorg voor één validatieschema dat voldoende flexibel is zodat de data van alle voorbeelden geaccepteerd wordt (tenzij anders vermeld in de opgave).
Als je niet weet welk type je aan een bepaalde property moet toekennen, kan je gebruik maken van onderstaande lijst van properties.
https://www.mongodb.com/docs/manual/reference/bson-types/
We raden aan om de validatieregels te schrijven in VS Code in de plaats van in MongoDB Compass.
Opgave 1: E-commerce - product cataloog
Je bouwt een database voor een e-commerce systeem, deze applicatie verkoopt verschillende soorten producten, hieronder zie je twee voorbeelden.
Begin voor deze opgave met voorbeeld 1 en bouw daarna de validatieregels voor voorbeeld 2. Bekijk tenslotte de verschillen tussen de twee voorbeelden en schrijf een nieuw schema dat flexibel genoeg is om de data uit beide voorbeelden en eventuele andere producten te accepteren, maar dat wel zo veel mogelijk properties valideert.
Elk product heeft minimaal:
- Een type
- Een naam
- Een beschrijving
- Een product nummer
- De afmetingen en het gewicht van het pakket
- De prijs, zowel de door de fabrikant aangeraden prijs als de prijs waaraan dit product in de webshop verkocht wordt
- Details die verschillen per product
(Audio album) "A Love Supreme"
"by John Coltrane"
No. B0000A118M
Shipping: Weight 6, 10 x 10 x 1
Prijs: Listing = 1200, Retail = 1100
Title: A Love Supreme [Original Recording Reissued]
By: John Coltrane
Genre: Free Jazz & Modal Jazz
Tracks:
- "A love Supreme, Part I: Acknowledgement" – 2:45
- "A Love Supreme, Part II: Resolution" – 1:30
- "A Love Supreme, Part III: Pursuance"
- "A Love Supreme, Part IV: Psalm"
(Film) "The Matrix"
"A computer hacker learns from mysterious rebels about the true nature of his reality and his role in the war against its controllers."
No. B000P0J0AQ
Shipping: Weight 9, 10 x 17 x 2
Price: List = 2200 Retail = 1800
Title: The Matrix
Directed by: Andy Wachowski & Larry Wachowski
Written by: Andy Wachowski & Larry Wachowski
Aspect Ratio: 1.66.1
Opgave 2: Filmadministratie
Je bouwt een database waarmee je gegevens wilt bewaren over de films die je gekeken hebt. Elke film heeft een titel, een releasedatum, een korte inhoud, een rating (1 tot 5 sterren) en wordt gemaakt door een productiehuis. Bij elke film hoort een lijst met acteurs met naast de naam van elke acteur het personage dat zij in de film speelden. De bedoeling is dat ook de gegevens over de volledige filmcrew bewaard worden. De filmcrew bestaat uit de regisseur, cameramensen, ...
"Titanic"
1998-08-10
"In 1912, the biggest disaster …"
5 stars
Acteurs:
Crew
Opgave 3: Sponserbureau
Je hebt een bureau dat sponsoring zoekt voor projecten van klanten.
Je ontwerpt zelf een database voor het verwerken van je klantengegevens met hun projecten en zorgt ervoor dat je een overzicht kan drukken van alle sponsorgelden die je hebt verzameld.
Alle anonieme giften worden onder de persoon anoniem ondergebracht. Hierdoor kan een persoon (bv "anoniem") meerdere keren sponsorgeld storten. Ook personen waarvan de naam is gekend, kunnen meerdere keren sponsorgeld storten. Van elke storting aan sponsorgeld moet steeds het bedrag en de datum van de storting worden bijgehouden.
Je organiseert in overleg met de klant ook evenementen om aan sponsoring te komen. Er zijn wel kosten verbonden aan dergelijke evenementen. Dus per evenement moet je een overzicht kunnen geven van de gemaakte kosten.
Project: Red het museum
Klant: VZW Poldermuseum
           Dorpstraat 45
           2798 Lilo
Vereist bedrag: 100.000
Sponsors:
| Sponsor | Adres | Bedrag | Datum |
|---|---|---|---|
| Peeters Marc | Namenstraat 34 200 Antwerpen | 100 | 15/01/2006 |
| Bleyens Linda | Kerkstraat 56 2610 Wilrijk | 20 | 16/01/2006 |
| Anoniem | XXXX 0000 XXXX | 1.000 | 16/01/2006 |
| Anoniem | XXXX 0000 XXXX | 150 | 16/01/2006 |
| ... | |||
| Totaal: | 24.500 |
Georganiseerde evenementen:
| Naam | Datum | Uitgave | Bedrag |
|---|---|---|---|
| BBQ | 20/01/2006 | Huur zaal | 150 |
| Aankoop eten | 200 | ||
| Inkomsten | 2.300 | ||
| Verkoop kaartjes | 30/01/2006 | ||
| Drukken kaartjes | 150 | ||
| Geschenk verkopers | 100 | ||
| Inkomsten | 1.800 | ||
| Totaal evenementen | 3.500 |
Netto opbrengst sponsoring: 28.000
Tekort / Winst: -76.100
Opgave 4: Elektronische boekhandel
Een grote boekhandel beslist om een electronic bookshop te creëren via hun website.
Bezoekers van de website krijgen een elektronisch winkelmandje. Telkens zij een boek wensen te kopen, nemen zij dit boek op in hun winkelmandje.
Bij het afsluiten van de aankopen, moet de klant zijn persoonlijke gegevens opgeven. Bestaande klanten vullen hiervoor hun klantnummer in waarna zijn persoonlijke gegevens worden opgehaald. Nieuwe klanten moeten in een apart formulier hun gegevens invullen, waarna een klantnummer wordt aangemaakt.
Elke klant moet het nummer van zijn kredietkaart ingeven voordat de aankoop kan worden bevestigd. Een klant kan in principe bij elke aankoop een verschillende kredietkaart opgeven. Na het bevestigen van de aankoop krijgt de klant volgende overzicht van zijn aankopen:
Caddy: 02/6587
Datum: 25-mrt-02
Klant: Peremans Hugo
           Kapellestraat 45
           2070 Brucht
Credit card: 4605 4593 6587 3687
| ISBN | Titel | Auteurs | Aantal | Prijs | Totaal |
|---|---|---|---|---|---|
| 9024380480 | Kreta wandelgids | Hierner, G. | 1 | 9.95 | 9.95 |
| 9021535947 | De geuren van india | Nayar & Nivola | 1 | 12.95 | 12.95 |
| 9069744198 | Land van sterren | Caulfield | 2 | 17.5 | 35.00 |
| Subtotaal | 57.9 | ||||
| Verzendkosten | 5.2 | ||||
| Totaal | 64.1 |
Opgave 5: Content management system
Content mangement systemen zoals Drupal bieden zeer grote variëteit aan pagina's en modules om een website of webapplicatie op te bouwen. Dit steunt natuurlijk ook op een database. In deze opgave stellen we ons voor dat we MongoDB gebruiken voor een generiek CMS. We willen ondersteuning bieden voor drie soorten pagina's: basic page, blog entry/post & photo.
Elke pagina heeft:
- Een type
- Een titel
- Een slug (laatste gedeelte van de URL)
- Een aanmaakdatum
- Een andere pagina die de "parent" isb
- Een auteur
- Tags om het zoeken te vereenvoudigen
- Verdere details die verschillen per pagina
Type 1: Basic page
- Bijvoorbeeld een About pagina
- De details zijn opgevuld met droge tekst op de pagina
Type 2: Blog post
- Bijvoorbeeld één enkele blog post
- De details zijn opgevuld met de tekst van de blog post, een datum waarop deze post voor het eerste gepubliceerd is, een datum waarop deze het laatst aangepast is, ... De tekst van de blog post wordt bewaard als HTML-string die de gebruiker met behulp van een WYSIWYG editor kan bouwen.
Type 3: Photo
- Bijvoorbeeld een foto van een kat
- De details zijn opgevuld met de filename, de resolutie, het mime type (bijvoorbeeld image/jpeg), ...