# DB Schema für Vokabeltrainer



## Miu (8. Dez 2014)

Hallo,

ich würde mir gerne einen Vokabeltrainer programmieren. An sich banal aber ich weiß nicht wie ich die DB gestalten soll. Hab da keine Erfahrung und kenne keine best practice.

Was soll man generell tun können:

* Der Benutzer kann verschiedene Vokabel-Listen anlegen, welche seperat oder zusammen vom Programm abgefragt werden.
* Der Benutzer soll Vokabellisten zusammenführen können. Sprich zu einer fusionieren.
* Der Benutze soll eine Vokabelliste exportieren können, als Backup oder diese importieren können.

Problem: Eine Vokabelliste soll/muss(?) eine neue Tabelle sein, die erst zur Laufzeit angelegt wird. Nämlich dann wenn der Benutzer eine Vokabelliste anlegt. Ich glaube, es ist einfacher so bzgl. des importieren und exportieren der Daten als alles in eine Tabelle zu packen.

Spontane Idee:

Ich habe eine Tabelle, die quasi als eine Art Index funktioniert. Dort werden Informationen zu Tabellen gelistet, welche Einzelne Vokabellisten repräsentieren,und die später angelegt werden sobald der Benutzer eine neue Vokabelliste anlegt.

Also hätte ein Eintrag der Tabelle INDEX z. B. sowas  ID, NAME, ANZAHL_VOKABELN,  und vielleicht noch andere Parameter. Der Eintrag "ID" ist ein Primärschlüssel (?), dessen Inhalt ein konkreten Tabellennamen enthält, die jeweils eine Vokabelliste darstellen. So könnte ich im Code halt immer über das auslesen dieser ID auf Tabellen zugreifen, die ich selbst noch nicht vorher angelegt habe bzw. die eben je nach Bedarf erst zur Laufzeit erzeugt werden. 

Jetzt lese ich aber überall im Internet, dass das erzeugen von Tabellen während der Laufzeit oft keine gute Lösung ist. Aber mir fällt nichts besseres ein, einfach weil es sich so anbieten würde...

Was haltet ihr davon?

Viele Grüße

Miu


----------



## Thallius (8. Dez 2014)

Ich würde einen ganz anderen Ansatz nehmen.

Tabelle 1 Vokabeln

id int autoincrement primerykey
sprache1 varchar[64] key
sprache2 varchar[64] key
... Für jede Sprache

Tabelle 2 Vokabellisten

id int autoincrement primery key
listenname varchar[128]

Tabelle 3 VokabelReferenz

vokabelid int primery key
listid int primery key

Damit kannst du beliebig viele Listen anlegen und jede Liste kann beliebig viele Vokabeln enthalten. 
Damit must du deine DB Struktur nicht zur runtime ändern. Du kannst sehr leicht neue Listen anlegen und diesen Vokabeln zuweisen und wieder wegnehmen. Auch ein mergecvon zwei Listen ist sehrveinfach gemacht.

Gruß

Claus


----------



## Miu (8. Dez 2014)

Danke. Das leuchtet mir sofort ein. So werde ich es handhaben.


----------

