[solved] Indexkonflikt und verknüpfte Tabellen



  • Hallo zusammen!

    Ich beschäftige mich noch nicht sehr lange mit Datenbanken, arbeite aber zur Zeit an einem Projekt bei ich mit einer SQLite Datenbank konfrontiert bin.

    Momentan siehts so aus:

    Ich schreibe an einem Programm mit welchem Veranstaltungen verwaltet werden. Dabei gibt es verschiedene Veranstaltungstypen. Diese Typen sind mit einem bestimmten Index in einer Tabelle (type) gespeichert und die Tabelle der Veranstaltungen (event) bestitzt ein FOREIGN KEY Feld in welchem die jeweilige typeid gespeichert wird.

    Soweit so gut. Ich erhalte diese Daten von außerhalb (bereits in Form von Tabellen, die direkt aus einer Datenbank kommen, also bereits einen Index besitzen) und lese sie einfach ein ohne sie zu verändern. Da periodisch neue Daten im gleichen Format ins Programm eingelesen werden ist es somit leicht anhand der Indizes zu überprüfen welche Daten schon existieren und welche neu eingelesen werden müssen.

    Mein Problem fängt damit an, dass mein Auftraggeber gerne selbst neue Veranstaltungstypen im Programm definieren möchte. An sich erstmal kein Problem. Ich könnte ja die momentan größte typeid auslesen und für die neue ID einfach 1 dazuzählen.

    Da aber wie gesagt periodisch neue Rohdaten eingelesen werden, kann es sein, dass bei neueren Daten eine typeid verwendet wird, die im Programm schon durch eine benutzerspezifische typeid belegt ist und es käme somit zu einem Konflikt. Da die typeids wie oben gesagt mit den Veranstaltungen verknüpft sind ist es auch nicht ganz unaufwändige eine typeid gegen eine komplett neue auszutauschen.

    Als Lösung ist mir momentan leider nur eins eingefallen und ich finde die Lösung soweit nicht zufriedenstellend:

    Ich erstelle zwei Typtabellen, eine für die offiziellen Daten und eine für die benutzerspezifischen.

    Dann kann zumindestens beim Einlesen der neuen Rohdaten kein Konflikt mehr entstehen. Dies führt aber zu einem Problem beim Verknüpfen mit den Veranstaltungen. Bisher wird dies wie gesagt einfach über ein Feld mit der jeweiligen typeid bei jeder Veranstaltung gelöst. Nun wüsste ich aber nicht ob sich die typeid auf die offizielle oder die benutzerspezifische Tabelle bezieht. Ich müsste also jeder Veranstaltung ein weiteres Feld hinzufügen welches mir sagt in welcher Tabelle ich die typeid nachzusehen habe, was allein schonmal zu einem zusätzlichen Query beim auslesen pro Veranstaltung führen würde.

    Wie gesagt, ich kenne mich nicht sonderlich gut mit Datenbanken aus, aber mir scheint das zu kompliziert.
    Meine Frage wäre deshalb ob jemand einen Weg kennt um meine Daten nach einem einfacheren System zu organisieren?

    Schönen Gruß,
    Cyianor



  • Soweit hab ich dein Problem verstanden. 😃
    Allerdings ist folgendes für mich noch nicht so ganz klar:

    Cyianor schrieb:

    Ich erhalte diese Daten von außerhalb (bereits in Form von Tabellen, die direkt aus einer Datenbank kommen, also bereits einen Index besitzen) und lese sie einfach ein ohne sie zu verändern. Da periodisch neue Daten im gleichen Format ins Programm eingelesen werden ist es somit leicht anhand der Indizes zu überprüfen welche Daten schon existieren und welche neu eingelesen werden müssen.

    Bedeutet das, dass es 2 verschiedene Datenbanken gibt. Eine von dir mit den Tabellen type und event, welche miteinander verknüpft sind, sowie eine externe Datenbank, die regelmäßig Daten liefert und dann nach Prüfung des Index in deine überführt werden?

    id type
    ------------           <------ Datensatz von außen     3 Konferenz
    1  Kongress
    2  Seminar
    3  Benutzerspezifisch vom Kunden
    
    Warum dann nicht eine dritte Spalte
    
    id ext_id type
    1  1      Kongress
    2  2      Seminar
    3  NULL   Benutzerspezifisch vom Kunden
    4  3      Konferenz
    

    Beim Speichern der Daten müsstest du dann allerdings die id (welche ja nicht der gelieferten entsprechen muss) auch entsprechend in der Eventtabelle richtig setzen



  • Ja, du hast mein Problem richtig verstanden, auch die dir unklare Stelle.

    Deine Lösung stellt meine auf jeden Fall in den Schatten. Sehr viel eleganter und schneller.

    Womit ich dann wohl eben leben müsste wäre, dass ich die typeid bei den einzelnen Veranstaltungen beim Einlesen anpasse.

    Die Lösung gefällt mir. Wäre aber durchaus auch noch an anderen Möglichkeiten interessiert das Problem zu lösen... falls es denn noch andere gibt.



  • Ok, BasicMan01,

    wie's ausschaut ist deine Lösung wirklich erstmal die beste. Werd sie dann in den nächsten Tagen mal implementieren.

    Vielen Dank für die Hilfe!


Anmelden zum Antworten