Flask SQLAlchemy

Django, Flask, Bottle, WSGI, CGI…
Antworten
oleting
User
Beiträge: 2
Registriert: Mittwoch 20. Oktober 2021, 12:51

Hallo,
kurz vorab den Hintergrund meiner Frage, da ich glaube mein Anliegen doch schwer zu verstehen ist.
Ich schreibe momentan eine private Webseite zum Planen vom (Gruppen-)Unterrichtsstunden im Reitsport.
Um automatische eine Einteilung in zusammenpassende Gruppen zu generieren, brauche ich für jede Anmeldung vom User eine Schwierigkeitsstufe. Ich habe die Schwierigkeitsstufen sind in der Datenbank hinterlegt:

Code: Alles auswählen

class Difficulties(db.Model):
    __tablename__ = 'difficulties'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    beschreibung = db.Column(db.Text, nullable=False)   
Nun ist die Schwierigkeitstufe aber abhängig von Reiter und Pferd (Ein Reiter kann mehrere Pferde haben, hat aber mit jedem Pferd eine andere Schwierigkeitsstufe). Dazu kommt das es verschiedene Disziplinen gibt (aktuell geplant zur Umsetzung sind Springen, Gelände und Dressur).
Ich steh irgendwie auf dem Schlauch, wie ich die ganzen Informationen vernünftig in der Datenbank hinterlegen soll.

Eine Idee war einfach nur die Id der von der Schwierigkeit zu hinterlegen in eriner Tabelle, wo voher jeweils in der Zeile Reiter und Pferd genannt sind:

Code: Alles auswählen

class DifficultyRelations(db.Model):
    __tablename__ = 'difficulty_relations'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer())
    horse_id = db.Column(db.Integer())
    difficulty_jumping = db.Column(db.Integer())
    difficulty_dressage = db.Column(db.Integer()) 
    difficulty_cross_country = db.Column(db.Integer()) 
Meine Frage wäre jetzt, ob es einen besseren Weg mit SQLAlchemy gibt, als diesen.

Gruß
Ole
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@oleting,

SQLAlchemy bietet dir mehrere Möglichkeiten Beziehungen zwischen den einzelnen Tabellen aufzubauen.
Zur Zeit enthält die DifficultyRelations Tabelle Ids von Reiter und Pferd, aber SQLAlchemy, kann damit erst richtig arbeiten, wenn du sie explizit als foreign key anlegst und die entsprechende Beziehung konfigurierst.
Dazu gibt es die gängigen Beziehungen One-To-Many, Many-To-One, One-To-One und Many-To-Many.
Das ist hier recht gut dokumentiert:
https://docs.sqlalchemy.org/en/14/orm/b ... ships.html

Dann kannst du auch Queries mit Joins und Filtern erstellen um die Kurse zusammenzustellen.
SQLAlchemy ist da sehr mächtig.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich finde die Modellierung mit Spalten für die Disziplinen unglücklich. Das würde ich nicht so machen. Sondern eine Tabelle, die sich auf Reiter, Pferd, Disziplin (als Verweis auf eine extra Disziplinen-Tabelle) und dann die Schwierigkeit als Zahl. Das hat diverse Vorteile:

- nicht jeder Reiter wird alles Disziplinen mit allen Pferden machen. Du hättest so aber Angaben, die eigentlich nicht existieren sollten.
- vielleicht kommt noch mal eine Disziplin dazu, und schon muss das design angepackt werden.
oleting
User
Beiträge: 2
Registriert: Mittwoch 20. Oktober 2021, 12:51

__deets__ hat geschrieben: Donnerstag 21. Oktober 2021, 11:31 Ich finde die Modellierung mit Spalten für die Disziplinen unglücklich. Das würde ich nicht so machen. Sondern eine Tabelle, die sich auf Reiter, Pferd, Disziplin (als Verweis auf eine extra Disziplinen-Tabelle) und dann die Schwierigkeit als Zahl. Das hat diverse Vorteile:

- nicht jeder Reiter wird alles Disziplinen mit allen Pferden machen. Du hättest so aber Angaben, die eigentlich nicht existieren sollten.
- vielleicht kommt noch mal eine Disziplin dazu, und schon muss das design angepackt werden.
Ja, stimmt hast du Recht.
Danke euch!
Antworten