💡 Hinweis: Alle Diagramme werden in PlantUML Format bereitgestellt. Sie können sie sofort mithilfe von Visual Paradigm Diagramm als Code.
🔹 Einführung in UML
Was ist UML?
„Die Unified Modeling Language (UML) ist eine allgemein verwendbare visuelle Modellierungssprache, die verwendet wird, um Spezifikationen, Visualisierungen, Konstruktionen und Dokumentationen der Artefakte eines Software-Systems zu erstellen.“ — Rumbaugh usw., 1999
Wichtige Merkmale:
-
🎨 Visuelle Notation: Grafische Syntax zur Modellierung von Systemen
-
📐 Standardisiert: OMG-Standard seit 1997
-
🔧 Sprache, keine Methode: Definiert Notation, nicht Prozess
-
🌐 Breites Spektrum: Modelliert Geschäftsprozesse, Systemfunktionen, Code-Strukturen und Datenbank-Schemata
Was UML NICHT ist
| Fehlvorstellung | Wirklichkeit |
|---|---|
| Eine Entwicklungs-Methode | Nur eine Modellierungsnotation |
| Eine Programmiersprache | Abstrakte Spezifikationssprache |
| Nur für objektorientierte Programmierung | Anwendbar auf Datenbanken, Geschäftsmodellierung usw. |
| Genau in allen Aspekten definiert | Einige semantische Unklarheiten bleiben in frühen Versionen bestehen |
🔹 Geschichte und Standardisierung
Entwicklungszeitlinie

1965–1970: Simula-67 (erste objektorientierte Sprache)
↓
1970er–1980er Jahre: Smalltalk am Xerox PARC
↓
1984: C++ von Bjarne Stroustrup vorgestellt
↓
1988–1992: Verbreitung objektorientierter Methoden (Booch, OMT, OOSE usw.)
↓
1994: Rumbaugh tritt bei Rational bei Booch an → Beginn der Vereinheitlichung
↓
1995: Entwurf von UML 0.8 veröffentlicht
↓
1996: OMG veröffentlicht RFP für eine Standard-Modellierungssprache
↓
1997: UML 1.1 wird von der OMG übernommen (14. November)
↓
2000: UML 1.3 formell veröffentlicht
↓
2003: UML 1.5 veröffentlicht; UML 2.0-Superstruktur angenommen
Warum UML den „Methodenkrieg“ gewann
-
Konsolidierte über 50 konkurrierende objektorientierte Methoden zu einer einzigen Standardisierung
-
Unterstützt von großen Branchenakteuren (IBM, Microsoft, Oracle, HP)
-
Bietet Erweiterungsmöglichkeiten zur Anpassung
-
Wurde der de-facto-Standard für objektorientierte Modellierung
⚠️ Kritischer Blick: Einige argumentieren, dass UML „eine Monster-Sprache ist, die von einem Gremium entworfen wurde“ und in frühen Versionen ungenaue Semantik aufweist.
🔹 Klassen und Attribute
Klassenstruktur
Eine UML-Klasse wird als Rechteck mit bis zu drei Feldern dargestellt.

@startuml
class Student {
firstName: String
lastName: String
email[0..1]: String
encryptedPW: String
+ totalPoints(): Integer
+ setPassword(pw: String)
+ checkPW(pw: String): Boolean
}
@enduml
Syntax zur Attributdeklaration
[Sichtbarkeit] name[Mehrfachheit]: Typ [= Standardwert] {Eigenschaften}
PlantUML-Beispiele:

@startuml
class Student {
+ ProgramOfStudy[0..2]: String = "MIS"
- encryptedPW: String {frozen}
# internalID: Integer
~ packagePrivateData: String
}
@enduml
Attributbereich
-
Instanzbereich (Standard): Jedes Objekt hat seinen eigenen Wert
-
Klassenbereich (statisch): Ein einziger Wert, der von allen Instanzen geteilt wird

@startuml
class Student {
name: String
{static} count: Integer
}
@enduml
Schlüssel in UML ⚠️
Wichtige Einschränkung: UML verfügt nicht über eine eingebaute Vorstellung von Schlüsseln. Verwenden Sie Stereotypen oder markierte Werte als Workarounds.

@startuml
class Student {
{pk} id: Integer
{ak1} email: String
- name: String
}
@enduml
🔹 Assoziationen und Beziehungen
Grundlegende Assoziation und Vielzahl
@startuml
class Exercise
class Chapter
Exercise "0..*" -- "1..1" Chapter : BelongsTo
@enduml
Interpretation: Jede Übung gehört genau einem Kapitel an; ein Kapitel kann null oder mehr Übungen enthalten.
Rollenbezeichnungen
Verwenden Sie anstelle (oder zusätzlich) von Assoziationsnamen Rollenbezeichnungen an den Enden der Assoziation:
@startuml
class Person
class Company
Person "0..*" --> "0..1" Company : Employee/Employer
@enduml
Implementierung: Die Person Tabelle hätte einen Fremdschlüssel Arbeitgeber verweisend auf Firma.
Navigierbarkeit
Richtung der Durchquerung mit Pfeilen angeben:

@startuml
class Exercise
class Chapter
Exercise "0..*" --> "1" Chapter
@enduml
-
Pfeil zeigt Richtung der effizienten Durchquerung an
-
In OODBs: implementiert als Zeiger in nur eine Richtung
-
In RDBMS: Joins funktionieren unabhängig in beide Richtungen
Sammlungstypen mit {geordnet}

@startuml
class Chapter
class Exercise
Chapter "1" -- "0..*" Exercise : {geordnet}
@enduml
-
{geordnet}: Reihenfolge beibehalten (Liste, nicht Menge verwenden) -
Implementierung in RDBMS: Attribut für Reihenfolgenummer hinzufügen
AUFGABEN (
id PRIMARY KEY,
kapitel_id VERWEIST AUF KAPITEL,
sort_reihenfolge INTEGER,
EINDEUTIG (kapitel_id, sort_reihenfolge)
)
Qualifizierer
Qualifizierer teilen verwandte Objekte mithilfe eines schlüsselähnlichen Mechanismus:

@startuml
class Chapter
class Exercise
Chapter "1" --> "0..1" Exercise : <<Qualifizierer>> no: Integer
@enduml
Bedeutung: Gegeben ein Kapitel und eine Übungsnummer, wird höchstens eine Übung zurückgegeben.
Assoziationsklassen
Wenn eine Assoziation Attribute oder Operationen hat:
@startuml
class Student
class Exercise
class Solution {
date: Datum
points: Integer
}
Student "0..*" -- "0..*" Exercise : hat gelöst
Solution .. Student
Solution .. Exercise
@enduml
-
Eine
LösungObjekt pro (Student, Übung)-Paar -
Erfordert: Derselbe Student kann nicht zwei Lösungen für dieselbe Übung einreichen
Komposition vs. Aggregation
| Merkmale | Komposition (*--) |
Aggregation (o--) |
|---|---|---|
| Symbol | Schwarzes Diamant-Symbol | Weißes Diamant-Symbol |
| Beziehung | Ganzes-Teil, starke Eigentumsbeziehung | Ganzes-Teil, schwache Referenz |
| Lebenszyklus | Teile werden gemeinsam mit dem Ganzen gelöscht | Teile unabhängig |
| Vielfachheit | 1 oder 0..1 auf der Ganzen-Seite | Beliebig |
| RDBMS-Zuordnung | ON DELETE CASCADE |
Standard-Fremdschlüssel |
@startuml
class Chapter
class Exercise
Chapter *-- "0..*" Exercise : Zusammensetzung
Chapter o-- "0..*" Exercise : Aggregation
@enduml
🔹 Operationen und Methoden
Syntax für Operationsdeklaration
@startuml
class Calculator {
+ getTotal(studID: Integer, inclExtra: Boolean = true): Float {isQuery=true}
+ {static} getInstance(): Calculator
+ {constructor} Calculator(initialValue: Float)
- recalculate(): void
}
@enduml
Parameterangabe:
[Richtung] name: Typ [= Standardwert]
-
Richtungen:
in(Standard),out,inout -
Standardwerte ermöglichen optionale Parameter
Spezielle Operations-Stereotypen
| Stereotyp | Zweck |
|---|---|
{isQuery=true} |
Garantiert keine Zustandsänderung |
{Konstruktor} |
Erstellt und initialisiert neue Instanzen |
{statisch} |
Klassenlevel-Operation, keine implizite selbst |
Operationen im Datenbankkontext
Der kulturelle Konflikt: OO betont Kapselung; relationale Systeme betonen direkten Datenzugriff.
Implementierungsstrategien:
| Operationsart | RDBMS-Implementierung |
|---|---|
| Einfacher Attributzugriff | Direkter SELECT/UPDATE |
| Abgeleiteter Attribut (keine Parameter) | Datenbankansicht |
| Abgeleiteter Attribut (mit Parametern) | Gespeicherte Prozedur oder Anwendungslogik |
| Komplexe Einschränkungsdurchsetzung | Trigger oder Anwendungsprozeduren |
🔹 Verallgemeinerung und Vererbung
Grundlegende Verallgemeinerung
@startuml
class Person
class Student
class Professor
Person <|-- Student
Person <|-- Professor
@enduml
Abstrakte Klassen und Operationen
@startuml
abstrakte Klasse Account {
- balance: Float
+ deposit(amount: Float): void
+ {abstrakt} withdraw(amount: Float): void
}
@enduml
Verallgemeinerungsbeschränkungen
@startuml
class Person
class Student
class Professor
class OtherPerson
Person <|-- Student : <<{disjunkt, vollständig}>>
Person <|-- Professor : <<{disjunkt, vollständig}>>
Person <|-- OtherPerson : <<{disjunkt, vollständig}>>
@enduml
Mehrfachklassifikation / Diskriminatoren
@startuml
class Employee
class Staff
class Faculty
class HMO
class NonHMO
Employee <|-- Staff : <<Art>>
Employee <|-- Faculty : <<Art>>
Employee <|-- HMO : <<Versicherung>>
Employee <|-- NonHMO : <<Versicherung>>
@enduml
-
Diskriminatoren gruppieren wechselseitig ausschließliche Spezialisierungen
-
Objekte können je Diskriminatordimension einen Wert haben
🔹 Erweiterungsmechanismen
UML bietet drei Erweiterbarkeitsmechanismen:
1. Stereotypen<< >>
Erweitern Sie die UML-Semantik, indem Sie neue „Untertypen“ von Metamodell-Elementen erstellen.
@startuml
class Customer <<Entität>> {
- id: Integer
- name: String
}
class MathLibrary <<Hilfsklasse>> {
+ sin(x: Float): Float
+ cos(x: Float): Float
}
@enduml
2. Tag-Werte{Schlüssel=Wert}
Fügen Sie benutzerdefinierte Eigenschaften zu Modell-Elementen hinzu.
@startuml
class Student {
{author=sb, version=1.0, persistence=beständig}
- id: Integer
}
@enduml
3. Einschränkungen {...}
Fügen Sie semantische Einschränkungen mithilfe von freier Textform, OCL oder vordefinierten Abkürzungen hinzu.
@startuml
class Exercise {
- no: Integer
- points: Integer {value >= 0}
{points <= maxPoints}
}
@enduml
🔹 UML für die Datenbankgestaltung: Wichtige Überlegungen
UML in relationales Schema übersetzen
| UML-Element | Relationale Implementierung |
|---|---|
| Klasse | Tabelle |
| Attribut | Spalte |
Primärschlüssel {pk} |
PRIMARY KEY-Einschränkung |
| Assoziation (1:*) | Fremdschlüssel auf der „vielen“-Seite |
| Assoziation (:) | Verknüpfungs-/Schnittstellentabelle |
| Komposition | Fremdschlüssel + ON DELETE CASCADE |
| Assoziationsklasse | Tabelle mit zusammengesetzten Fremdschlüsseln + Attributen |
| Generalisierung | Trennung von Tabellen (mit Fremdschlüssel) oder einzelne Tabelle mit Typ-Diskriminanten |
{geordnet} Assoziation |
Sequenzspalte hinzufügen + eindeutige Beschränkung |
| Qualifizierer | Teil eines zusammengesetzten Schlüssels oder indizierten Spalte |
Kritische Unterschiede: OO vs. relational
| Aspekt | Objektorientiert | Relational |
|---|---|---|
| Identität | Objektverweis (Surrogat) | Primärschlüssel (Geschäfts- oder Surrogatschlüssel) |
| Operationen | Zentral für die Gestaltung, gekapselt | Extern (SQL, Prozeduren) |
| Kapselung | Private Attribute, öffentliche Schnittstelle | Direkter Tabellenzugriff standardmäßig |
| Vererbung | Native Sprachunterstützung | Komplexe Abbildungsstrategien |
| Beziehungen | Zeiger/Verweise | Fremdschlüssel und Joins |
Praktische Empfehlungen für Datenbankdesigner
-
Schlüssel explizit modellieren: Verwenden Sie
{pk},{ak1}Stereotypen, da UML keine native Schlüsselunterstützung bietet -
Persistenz markieren: Verwenden Sie
{persistent}gekennzeichneten Wert, um Datenbankklassen von transienten Anwendungsklassen zu unterscheiden -
Operationen vereinfachen: Abbilden von Abfrageoperationen auf Ansichten; komplexe Operationen auf gespeicherte Prozeduren
-
Vererbung sorgfältig behandeln: Mapping-Strategie basierend auf Abfragemustern wählen
-
Einschränkungen dokumentieren: OCL oder klare Texteinschränkungen für Geschäftsregeln verwenden
-
Assoziationsklassen maßvoll verwenden: Nur wenn die Beziehung bedeutende Attribute hat
🎯 Schnellreferenz-Übersicht
PlantUML-Klassendiagramm-Notation Zusammenfassung
@startuml
class <<Stereotyp>> KlassenName {
{gekennzeichnet=Wert}
[+/-/#/~] name[mult]: Typ [= val] {Eigenschaften}
[+/-/#/~] name(Parameter): Rückgabe {Eigenschaften}
}
@enduml
Assoziationsnotation
@startuml
KlasseA "multA" -- "multB" KlasseB : AssoziationsName
KlasseA *-- KlasseB ' Zusammensetzung
KlasseA o-- KlasseB ' Aggregation
KlasseA --> KlasseB ' Navigierbar
@enduml
Sichtbarkeitssymbole
-
+Öffentlich -
-Privat -
#Geschützt -
~Paket
Allgemeine Eigenschaften & Beschränkungen
-
{statisch}/{istAbfrage=true}/{abstrakt} -
{Wert >= 0}/{exklusivOder}/{geordnet}/{pk}
💡 Letzte Überlegung: UML-Klassendiagramme sind für die konzeptuelle Modellierung leistungsstark, aber denken Sie daran, dass sie hauptsächlich für die Softwaretechnik entwickelt wurden. Wenn Sie UML für die Datenbankgestaltung verwenden, seien Sie darauf vorbereitet, die Notation (mit Stereotypen, markierten Werten, Beschränkungen) zu erweitern, um relationale Konzepte wie Schlüssel, Normalisierung und deklarative Beschränkungen zu erfassen, die nicht ursprünglich in der objektorientierten Grundlage von UML enthalten sind.
Leitfaden zusammengestellt aus „Teil 6: UML-Klassendiagramme“ von Stefan Brass, Universität Halle, 2003. Alle Diagramme im PlantUML-Syntaxformat für Kompatibilität mit modernen Werkzeugen.











