Elixir / SQLAlchemy n-äre Relation mit Attribut abbilden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo zusammen,

ich stehe vor dem Problem eine Datenbank mit Elixir (zur Not auch direkt SQLAlchemy) zu managen, die sich aus folgendem ERD ableitet:

http://de.tinypic.com/view.php?pic=1sl6ih&s=5

Im Grunde handelt es sich dabei um eine n-äre -Relation, die zusätzlich mit einem Attribut belegt ist. Hintergrund ist die Verwaltung von Turniersiegen von Sportlern. Diese können eben an einem bestimmten Datum ein Turnier in einem speziellen Modus und einer speziellen Klasse gewinnen (korrekter wäre eigentlich eine bestimmte Platzierung erreichen, die ebenfalls in dieser Relation gepseichert würde).

Bevor ich hier ins Blinde implementiere, würde ich mich gerne vergewissern, ob meine Idee richtig ist:

Ich würde die Relation "hat_gewonnen" in eine Entity-Klasse überführen und entsprechende Many2Many-Relations zu den angrenzenden Entitäten deklarieren. Zusätzlich eben noch das Attribut Datum als Field einbauen.

Ist dieser Ansatz so richtig? Wenn nein, wie sonst, wenn ja, gibt's dazu vielleicht noch Tipps / Code-Beispiele?
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Ich weiss nicht, mir wäre dieses Datenmodell zu kompliziert. Aber ich weiss ja auch nicht, was da noch alles dran hängt. Mein "ERD" zu dieser Thematik wäre wohl eher so: Ein Turnier hat mehrere Spiele. Ein Spiel ist immer von einem bestimmten Typ (Kombinatin aus Modus und Klasse). An einem Spiel nehmen mehrere Teilnehmer teil. Die Relationen sind

Turniere -> Spiele (1:n)
Spiele -> Spieltypen (n:1)
Spiele -> Teilnahme <- Teilnehmer (m:n). In der Teilnahme wird vermerkt, welche Mannschaften es gibt, und wer gewonnen hat.

Dieses Schema lässt sich meines Erachtens nach auch leichter in SA (oder Elixir, das kenne ich aber nicht) modellieren.
Antworten