Seite 1 von 1

Flask SQLAlchemy

Verfasst: Mittwoch 20. Oktober 2021, 20:18
von oleting
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

Re: Flask SQLAlchemy

Verfasst: Donnerstag 21. Oktober 2021, 10:00
von rogerb
@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.

Re: Flask SQLAlchemy

Verfasst: Donnerstag 21. Oktober 2021, 11:31
von __deets__
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.

Re: Flask SQLAlchemy

Verfasst: Donnerstag 21. Oktober 2021, 13:03
von oleting
__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!