Modul 321 Alle Aufgaben

Aufgabe 7: Datenbanken im Umfeld verteilter Systeme

Ausgangslage

In Woche 4 haben Sie mit TrackZilla das Muster Database per Service kennengelernt: Jeder Microservice besitzt seine eigene Datenbank, und es gibt keine Fremdschlüssel über Service-Grenzen hinweg. Offen geblieben ist die Frage: Welche Datenbank passt zu welchem Service?

In dieser Aufgabe vergleichen Sie beide Systeme praktisch:

  1. Eine relationale Datenbank mit festem Schema, Transaktionen und Fremdschlüsseln (PostgreSQL).
  2. Eine dokumentorientierte NoSQL-Datenbank mit flexiblem Schema (MongoDB).

Sie modellieren denselben Domänenausschnitt in beiden Systemen, vergleichen das Verhalten und treffen danach einen begründeten Entscheid. Die Datenhaltung gehört zum Stoff der schriftlichen Prüfung 1 in Woche 9; Woche 8 ist für die Vorbereitung reserviert.


Kompetenzbezug (Kompetenzmatrix Modul 321, Band B)


Material & Werkzeuge


Vorgehen

Teil 1: Beide Datenbanken starten

# Relationale Datenbank (PostgreSQL)
docker run --name pg-tickets -e POSTGRES_PASSWORD=secret -e POSTGRES_DB=tickets -p 5432:5432 -d postgres:16
docker exec -it pg-tickets psql -U postgres -d tickets

# Dokument-Datenbank (MongoDB)
docker run --name mongo-tickets -p 27017:27017 -d mongo:7
docker exec -it mongo-tickets mongosh

Teil 2: Denselben Domänenausschnitt modellieren

Domäne: ein Ticket-Service mit Tickets und Kommentaren.

Relational (PostgreSQL):

CREATE TABLE tickets (
  id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  status TEXT NOT NULL
);

CREATE TABLE comments (
  id SERIAL PRIMARY KEY,
  ticket_id INT NOT NULL REFERENCES tickets(id) ON DELETE CASCADE,
  body TEXT NOT NULL
);

Dokumentorientiert (MongoDB):

db.tickets.insertOne({
  title: "Login schlägt fehl",
  status: "open",
  comments: [ { body: "Tritt nur mit SSO auf", author: "anna" } ]
})

Teil 3: Abfragen und Verhalten vergleichen

  1. Fügen Sie in beiden Systemen Daten ein und lesen Sie sie wieder aus.
  2. Testen Sie in PostgreSQL die Fremdschlüssel-Regel: ein Kommentar ohne gültiges Ticket wird abgewiesen.
  3. Schreiben Sie eine JOIN-Abfrage, die Tickets mit ihren Kommentaren ausgibt.
  4. Schreiben Sie in MongoDB eine Abfrage auf ein verschachteltes Feld: db.tickets.find({ "comments.author": "anna" }).
  5. Service-Grenze: Der users-Service besitzt eine eigene Datenbank. Versuchen Sie, in Ihrer Ticket-Datenbank einen Fremdschlüssel auf dessen users-Tabelle zu setzen, und erklären Sie, warum das im verteilten System nicht funktioniert.

Teil 4: Vergleichsmatrix

Kriterium Relational (PostgreSQL) Dokument (MongoDB)
Datenmodell
Schema-Änderungen
Konsistenz & Transaktionen
Beziehungen
Skalierung
Abfragesprache
Betrieb & Tooling

Teil 5: Entscheid und Begründung

Wählen Sie für den Ticket-Service ein System und begründen Sie Ihre Wahl in 3 bis 5 Sätzen anhand der Matrix. Nennen Sie mindestens zwei Gründe und einen Nachteil Ihrer Wahl.


Abgabe

  1. Code: SQL-Skript und MongoDB-Befehle (oder Screenshots der Ausführung).
  2. Matrix: die ausgefüllte Vergleichsmatrix.
  3. Entscheid: die begründete Wahl für den Ticket-Service.
  4. Prüfungsfrage: Wann relational, wann NoSQL? Notieren Sie fünf Stichpunkte.

Checkliste