none
Multiple dynamische SELFJOINS's ? RRS feed

  • Allgemeine Diskussion

  • Hallo,
    ich hab folgende Anforderung.

    In einer Webapplikation soll der Benutzer eigene "Tabellen" (Tabellen in der Applikation, keine DB Tables)  mit einer Anzahl Felder anlegen können.
    Die Tabellen enthalten dann z.B. ein Glossar (Abkürzung, Beschreibung) oder auch eine Liste von Applikationen (Applikationsname, Beschreibung)

    Das ganze muss dann auch noch mehrsprachig sein.

    Unser aktueller Entwurf sieht so aus:

    Sprachen :
    [Languages]
    ID | isoCode | label
    1 | DE | Deutsch

    Tabellen (Glossar, Applikationen ...)
    [Tables]
    ID | updateDate
    1 | 04.02.2014 14:47:00
    2 | 04.02.2014 14:47:00

    Felder in den Tabellen:
    [FieldConfig]
    ID | tableID | fieldOrder | fieldRequired | type | updateDate
    1  | 1   |  1   |  0  | 0  | 04.02.02.2014 14:47:00
    2  | 1   |  2   |  0  | 0  | 04.02.02.2014 14:47:00
    3  | 2   |  1   |  0  | 0  | 04.02.02.2014 14:47:00
    4  | 2   |  2   |  0  | 0  | 04.02.02.2014 14:47:00

    Titel der Tabellen und Felder:
    [Translations]
    ID | tableID | fieldconfigID | languageID | translationText
    1  | 1  |  0   |      1    | Glossar (Titel der Tabelle)
    2  | 1  |  1   |      1    | Abkürzung (Titel des ersten Feldes der ersten Tabelle)
    3  | 1  |  2   |      1    | Beschreibung (Titel des zweiten Feldes der ersten Tabelle)
    4  | 2  |  0   |      1    | Applikationen (Titel der Tabelle)
    5  | 2  |  1   |      1    | Name (Titel des ersten Feldes der ersten Tabelle)
    6  | 3  |  2   |      1    | Beschreibung (Titel des zweiten Feldes der ersten Tabelle)

    Datensätze in den Tabellen:
    [MasterData]
    ID | tableID | archiv
    1 |   1    |    0
    2 |   1    |    0

    Datensätze der einzelnen Felder:
    [Fields]
    ID | masterdataID | languageID | fieldconfigID | fieldContent | updateDate
    1 | 1    |  1    |      1  |   FAQ    | 04.02.02.2014 14:47:00
    2 | 1    |  1    |      2  |   Frequently Asked Question  | 04.02.02.2014 14:47:00
    3 | 2    |  1    |      1  |   MFG    | 04.02.02.2014 14:47:00
    4 | 2    |  1    |      2  |   mit freundlichen grüssen  | 04.02.02.2014 14:47:00

    Soweit noch alles ok.
    Nun möchte ich natürlich z.B. einen Datensatz abfragen.
    Das würde dann so aussehen:

    select masterdata.id,field1.fieldShort as abkürzung,field2.fieldShort as beschreibung from MasterData
    left outer join Fields as field1 on masterdata.id=field1.masterdataID and field1.fieldconfigId=1 and field1.languageID=1
    left outer join fields as field2 on masterdata.id=field2.masterdataID and field2.fieldconfigId=2 and field2.languageID=1
    where masterdata.id=1

    Soweit gut, allerdings weiss ich ja nicht wie viele Felder es gibt.
    Die Joins müssten quasi aus der FieldConfig generiert werden.

    Wie löse ich das ?
    ich könnte natürlich Fieldconfig abfragen und mir dann das passende Statement basteln lassen, (in der App)
    aber es gibt doch sicher eine Lösung via SQL, oder ?

    Ist der Anzahl überhaupt richtig so ? Oder würdet Ihr das komplett anders machen ?
    Wie sieht es mit der Performance aus ? In der Regel gibt es nicht mehr als 3-4 Felder pro Tabelle. Also nicht mehr als 3-4 Joins. Pro Tabelle vielleicht 300 Datensätze.

    Vielen Dank für Eure Hilfe.
    Uwe

    • Typ geändert Ionut DumaModerator Freitag, 21. Februar 2014 09:38 Keine Rueckmeldung des Fragenstellender
    Dienstag, 4. Februar 2014 14:12

Alle Antworten