Vokabeltrainer

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Hallo

Ich möchte eine Art Vokabeltabelle anlegen, damit Asylbewerber Deutsch lernen können (soll natürlich auch umgekehrt und mit weiteren Sprachen funktionieren). Dazu sollen für Worte Symbolbilder verfügbar sein. Hat jemand Erfahrung mit Vocabeltrainer und Sqlalchemy (mir wurde nämlich gesagt, dass selbstreferentielle Many-to-Many-Tabellen nicht gerade etwas für Anfänger sind). Habe einmal folgende Modelle gemacht (VocWord wäre die Tabelle für Nomen). Mehrere Worteinträge könnten wie ich das sehe auf dasselbe Bild referieren, mehrere Bilder aber auch wieder auf dasselbe Wort. Benötige ich also analog eine Tabelle wie translation_by_image? Und wie ist das mit Dialekten? Im Arabischen werden Worte im Maghreb anders als in Agypten und wiederum sehr anders als in Syrien ausgesprochen (es gibt auch Worte, die nur in bestimmten Dialekten verfügbar sind). Offenbar kein sehr triviales Problem :) . Inwiefern Babelex da noch eine Vereinfachung sein könnte, weiss ich nicht. :

Code: Alles auswählen

translation_by_meaning = db.Table('voc_translation_by_meaning',
    db.Column('voc_word_1', db.Integer, db.ForeignKey('voc_word.id')),
    db.Column('voc_word_2', db.Integer, db.ForeignKey('voc_word.id'))
    )

class VocWord(db.Model):
    __tablename__ = 'voc_word'

    id = db.Column(db.Integer, primary_key=True)
    voc_language_id = db.Column(db.Integer, db.ForeignKey('voc_language.id'))
    language = db.relationship('VocLanguage', backref="words")
    translation = db.relationship('VocWord', secondary=translation_by_meaning,
        backref=db.backref('backtranslation', lazy='dynamic'), primaryjoin=id == translation_by_meaning.c.voc_word_1, secondaryjoin=id == translation_by_meaning.c.voc_word_2)
    created = db.Column(db.DateTime)
    last_update = db.Column(db.DateTime)
    word = db.Column(db.String)
    word_latin = db.Column(db.String)
    gender = db.Column(db.String)
    defined_article = db.Column(db.String)
    undefined_article = db.Column(db.String)
    word_pl = db.Column(db.String)
    defined_article_pl = db.Column(db.String)
    undefined_article = db.Column(db.String)
    voice_file = db.Column(db.String) # mp3

class VocImage(db.Model):
    __tablename__ = 'voc_image'

    id = db.Column(db.Integer, primary_key = True)
    created = db.Column(db.DateTime)
    filename = db.Column(db.String)

class VocLanguage(db.Model):
    __tablename__ = 'voc_language'

    id = db.Column(db.Integer, primary_key = True)
    dialects = db.relationship('VocDialect', backref='language', lazy=False)
    language = db.Column(db.String)

class VocDialect(db.Model):
    __tablename__ = 'voc_dialect'

    id = db.Column(db.Integer, primary_key = True)
    language_id = db.Column(
        db.Integer, db.ForeignKey('language.id'))
    dialect = db.Column(db.String)
BlackJack

@meego: Nebenfrage: Was sollen die ganzen Voc-Präfixe? Für so etwas gibt es Namensräume.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Hallo Blackjack. Ich habe die Modelle in einem Projekt gemacht, in welchem ich bereits andere Modelle habe. Namensräume?
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Na? Seid ihr auch sprachlos? :mrgreen:
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn ich so was programmieren wollte, würde ich tendenziell wohl eher CouchDB als DB nutzen. Ob sich das bewähren würde, würde ich wahrscheinlich aber erst im Laufe der Programmierung herausstellen :-)

Gruß, noisefloor
Antworten