Fragensteller
Multiple dynamische SELFJOINS's ?

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 | DeutschTabellen (Glossar, Applikationen ...)
[Tables]
ID | updateDate
1 | 04.02.2014 14:47:00
2 | 04.02.2014 14:47:00Felder 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:00Titel 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 | 0Datensä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:00Soweit 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=1Soweit 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
Alle Antworten
-
Hallo Uwe,
Schau Dir mal folgende Artikel an http://lennilobel.wordpress.com/2012/05/29/new-metadata-discovery-features-in-sql-server-2012/
Gruss,
Ionut
Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
**************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
**************************************************************************************************Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.