Zum Inhalt springen

Aufgabe 08 - Mongoose und Datenmodell-Vergleich (Fuhrpark)

Zu Zen-Modus wechseln

Aufgabe 08 - Mongoose und Datenmodell-Vergleich (Fuhrpark)

Abschnitt betitelt „Aufgabe 08 - Mongoose und Datenmodell-Vergleich (Fuhrpark)“

Diese Übung bringt mit Mongoose eine Schema- und Validierungsschicht über die schemalose MongoDB und stellt die Datenmodelle einander gegenüber (siehe Kapitel 4 - NoSQL und alternative Datenmodelle). Szenario ist der Fuhrpark eines Lieferdienstes mit Fahrzeugen und Fahrten. Im Expertenteil wird eine begründete Wahl zwischen relationalem und dokumentenorientiertem Modell getroffen.

  • Sie ordnen einem Anwendungsfall das passende Datenmodell zu.
  • Sie definieren ein Mongoose-Schema mit Typen, Pflichtfeldern und erlaubten Werten.
  • Sie bilden Beziehungen mit ref und populate ab.
  • Sie treffen und begründen eine Entscheidung zwischen relational und NoSQL.
  • Reproduktion: Datenmodelle zuordnen (Teil A).
  • Reorganisation und Transfer: ein Schema definieren und validieren (Teile B und C).
  • Reflexion, Problemlösung und Urteilsbildung: relational gegen NoSQL abwägen (Teil D).

Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.

Ordnen Sie jedem Anwendungsfall das am besten passende Datenmodell zu (relational, Dokument, Key-Value, Graph) und begründen Sie in einem Satz:

  1. Ein Zwischenspeicher (Cache) für Sitzungsdaten, der extrem schnell antworten muss.
  2. Ein soziales Netzwerk mit „Freund-von-Freund”-Beziehungen.
  3. Die Buchhaltung mit strengen, verknüpften Konten und Transaktionen.
  4. Ein Produktkatalog, bei dem jedes Produkt andere Eigenschaften hat.

Definieren Sie ein Schema fahrzeugSchema mit:

  1. kennzeichen (String, Pflicht, eindeutig),
  2. typ (String, nur erlaubt: PKW, Transporter, LKW),
  3. baujahr (Number, nicht kleiner als 1990),
  4. sitze (Number, Standardwert 5),
  5. aktiv (Boolean, Standardwert true).

Erzeugen Sie daraus ein Model Fahrzeug und speichern Sie ein gültiges Dokument.

  1. Versuchen Sie, ein Fahrzeug mit typ: 'Fahrrad' und baujahr: 1980 zu speichern. Notieren Sie die Fehlermeldungen und erklären Sie, welche Datenbank hier prüft — MongoDB oder Mongoose.
  2. Definieren Sie ein zweites Schema fahrtSchema mit einem Feld fahrzeug als Referenz (Schema.Types.ObjectId, ref: 'Fahrzeug').
  3. Legen Sie eine Fahrt an und lesen Sie sie einmal ohne und einmal mit populate('fahrzeug'). Beschreiben Sie den Unterschied im Ergebnis.

Der Lieferdienst wächst. Es kommen Anforderungen dazu: monatliche Abrechnungen mit strengen Summen, Auswertungen über viele Beziehungen (Fahrer, Fahrzeug, Kunde, Route) und ein Berichtswesen.

  1. Stellen Sie in einer Tabelle gegenüber, welche dieser Anforderungen eher für ein relationales und welche eher für ein dokumentenorientiertes Modell sprechen.
  2. Erklären Sie am Beispiel populate, warum viele Beziehungen über viele Dokumente in MongoDB spürbar langsamer werden als ein JOIN im relationalen System.
  3. Geben Sie eine begründete Empfehlung ab: ein Modell, eine Kombination aus beiden — und warum. Beziehen Sie den Satz „Die Wahl folgt der Aufgabe, nicht der Mode” ein.
  1. Was ist ein ODM, und welche Rolle spielt Mongoose?
  2. Welche Prüfungen kann ein Mongoose-Schema erzwingen, die MongoDB von sich aus nicht macht?
  3. Wozu dient populate, und warum ist es kein echter Join?
  4. Für welche Art von Daten ist ein Graphmodell besonders geeignet?
  5. Nennen Sie je einen typischen Fall für relational und für dokumentenorientiert.
  • Die Datei aufgabe08_mongoose.js mit Schema, Model und den Beispielen aus Teil B und C.
  • Die Gegenüberstellung und Empfehlung aus Teil D als kurzer Text.

HTL Villach, Schuljahr 2026-2027,
https://www.htl-villach.at