Zum Inhalt

Aufgabe 3 – Online-Bestellsystem

Mein Vorgehen bei Aufgabe 3

Ich habe das konzeptionelle Datenmodell für das Online-Bestellsystem selber aufgebaut und mich dabei strikt an die Punkte aus der Bewertung gehalten:

  • alle relevanten Entitäten des Shops (Kunde, Bestellung, Produkte usw.)
  • Attribute mit Datentypen aus Sicht einer echten DB
  • klare Primär- und Fremdschlüssel
  • Beziehungen inklusive Namen und Kardinalitäten
  • saubere Einbettung auf der Webseite

Unten steht zuerst der komplette PlantUML-Code, danach die gerenderte Grafik und zusätzlich noch meine Mermaid-Version für die MkDocs-Vorschau.

PlantUML-Code (copy & paste)

@startuml
!theme blueprint

entity "Kunde" as Kunde {
  *KundeID : INT <<PK>>
  --
  Vorname : VARCHAR(50)
  Nachname : VARCHAR(50)
  Email : VARCHAR(255)
  RegistriertAm : DATETIME
}

entity "Lieferadresse" as Adresse {
  *AdresseID : INT <<PK>>
  --
  Strasse : VARCHAR(80)
  Hausnummer : VARCHAR(10)
  PLZ : CHAR(4)
  Ort : VARCHAR(80)
  Land : CHAR(2)
  KundeID : INT <<FK>>
}

entity "Bestellung" as Bestellung {
  *BestellungID : INT <<PK>>
  --
  Bestelldatum : DATETIME
  Status : ENUM('erfasst','bezahlt','versendet')
  Gesamtbetrag : DECIMAL(10,2)
  KundeID : INT <<FK>>
  LieferadresseID : INT <<FK>>
}

entity "Bestellposition" as Position {
  *PositionID : INT <<PK>>
  --
  Menge : SMALLINT
  Einzelpreis : DECIMAL(10,2)
  BestellungID : INT <<FK>>
  ProduktID : INT <<FK>>
}

entity "Produkt" as Produkt {
  *ProduktID : INT <<PK>>
  --
  Name : VARCHAR(120)
  Beschreibung : TEXT
  Nettopreis : DECIMAL(10,2)
  Lagerbestand : INT
  KategorieID : INT <<FK>>
}

entity "Kategorie" as Kategorie {
  *KategorieID : INT <<PK>>
  --
  Bezeichnung : VARCHAR(60)
  ElternKategorieID : INT <<FK>>
}

entity "Zahlung" as Zahlung {
  *ZahlungID : INT <<PK>>
  --
  Zahlungsart : ENUM('Kreditkarte','TWINT','Rechnung')
  Betrag : DECIMAL(10,2)
  BezahltAm : DATETIME
  BestellungID : INT <<FK>>
}

Kunde ||--o{ Bestellung : "gibt auf"
Kunde ||--o{ Adresse : "verwaltet"
Bestellung }o--|| Adresse : "liefert an"
Bestellung ||--o{ Position : "enthält"
Position }o--|| Bestellung : "gehört zu"
Produkt ||--o{ Position : "wird bestellt in"
Kategorie ||--o{ Produkt : "klassifiziert"
Bestellung ||--|| Zahlung : "erhält"

@enduml

PlantUML als Bild

Konzeptionelles Datenmodell Online-Bestellsystem

Ich rendere das Diagramm direkt über den PlantUML-Server (https://www.plantuml.com/plantuml/svg/...). Damit ist die Einbettung für die Website automatisch erfüllt.

Mermaid-Vorschau für MkDocs

erDiagram
  Kunde ||--o{ Bestellung : "gibt auf"
  Kunde ||--o{ Lieferadresse : "verwaltet"
  Bestellung }o--|| Lieferadresse : "liefert an"
  Bestellung ||--o{ Bestellposition : "enthält"
  Bestellposition }o--|| Bestellung : "gehört zu"
  Produkt ||--o{ Bestellposition : "wird bestellt in"
  Kategorie ||--o{ Produkt : "klassifiziert"
  Bestellung ||--|| Zahlung : "erhält"

  Kunde {
    int KundeID PK
    string Vorname
    string Nachname
    string Email
    datetime RegistriertAm
  }
  Lieferadresse {
    int AdresseID PK
    string Strasse
    string Hausnummer
    string PLZ
    string Ort
    string Land
    int KundeID FK
  }
  Bestellung {
    int BestellungID PK
    datetime Bestelldatum
    string Status
    decimal Gesamtbetrag
    int KundeID FK
    int LieferadresseID FK
  }
  Bestellposition {
    int PositionID PK
    smallint Menge
    decimal Einzelpreis
    int BestellungID FK
    int ProduktID FK
  }
  Produkt {
    int ProduktID PK
    string Name
    text Beschreibung
    decimal Nettopreis
    int Lagerbestand
    int KategorieID FK
  }
  Kategorie {
    int KategorieID PK
    string Bezeichnung
    int ElternKategorieID FK
  }
  Zahlung {
    int ZahlungID PK
    string Zahlungsart
    decimal Betrag
    datetime BezahltAm
    int BestellungID FK
  }

Checkliste für die Bewertung

  • Entitäten & Attribute: Alle Kernobjekte des Shops inkl. Stammdaten und Prozessdaten.
  • Datentypen & Schlüssel: <<PK>>/<<FK>> plus passende Datentypen (INT, VARCHAR, DECIMAL …).
  • Beziehungen & Kardinalitäten: Jede Kante ist benannt und hat die korrekte Notation (||--o{, }o--||).
  • Einbettung & Darstellung: PlantUML-Bild und Mermaid-Block laufen direkt in der Seite.
  • Nachvollziehbarkeit: Code ist dokumentiert und kann 1:1 kopiert werden.