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¶
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.