2009-08-07 2 views
0

eine Datenbanktabelle Eigenschaften einiger Elemente enthält Angenommen:Speicher parametrisierte Definitionen von Gruppen von Elementen und Einzeldurchlauf-Abfragen sie in SQL zu holen

Table Element (let's say 1 000 000 rows): 
ElementId Property_1 Property_2 Property_3 
-------  ---------- ---------- ---------- 
1   abc   1   1 
2   bcd   1   2 
3   def   2   4 
... 

Die Tabelle häufig aktualisiert wird. Ich möchte Definitionen von Mengen dieser Elemente speichern, so dass ich zB eine einzelne SQL-Anweisung bekommen würde.

SetId Element 
---  ------- 
A  2 
B  1 
B  3 
C  2 
C  3 
... 

Ich würde auch gerne die Definitionen bei Bedarf ändern. Bisher habe ich die Definitionen der Sätze als Vereinigungen von Kreuzungen wie folgt gespeichert:

Table Subset (~1 000 rows): 
SubsetId Property Value Operator 
-------- -------- ----- -------- 
1   1   bcd  = 
1   3   1  > 
2   2   3  <= 
... 

und

Table Set (~300 rows): 
SetId SubsetId 
---  ------ 
... 
E  3 
E  4 
F  7 
F  9 
... 

In SQL nehme ich, dass ich eine Menge Fall Ausdrücke aus den Tabellen erzeugen könnte, aber bisher Ich habe gerade die Tabellen geladen und ein externes Tool verwendet, um im Wesentlichen dasselbe zu tun.

Als ich das erfand, war ich erfreut (und auch implementiert). In letzter Zeit habe ich mich gefragt, ob es so wunderbar ist, wie ich dachte. Gibt es eine bessere Möglichkeit, die Definitionen der Sets zu speichern?

Antwort

1

Ich würde denken, mit Ente-Eingabe kann hier intuitiv sein, als Alternative.

Zum Beispiel haben alle modernen Sprachen (C#, Java, Python) das Konzept der Mengen. Wenn Sie über SQL "intersect" oder "union" (setzen Operatoren), dann müssen Sie sie in einer relationalen Weise speichern. Sonst, warum nicht sie auf eine Sprache einheimisch speichern? (im Gegensatz zu relational). Auf native Weise würde ich meinen, wenn es in Python gemacht würde und wir einen Python-Satz verwendet hätten, dann würde ich das beibehalten. Gleiches gilt für Java oder C#.

Also, wenn eine Set-ID 10 hat die Mitglieder 1,4,5,6 wäre es in der DB beibehalten werden, wie folgt:

 SetId    Set 
______________________________________ 
10      1,4,5,6 
11      2,3 
12      null 

Sicher, dies den Nachteil, dass es proprietär sein könnte, oder vielleicht sogar nicht-performant - was Sie vielleicht sagen können, da Sie die vollständige Problemdefinition haben. Wenn Sie SQL benötigen, um es zu analysieren, hat mein Vorschlag vielleicht weitere Nachteile.

In gewisser Weise ähnelt die Darstellungsform jeder dieser Sprachen einer DSL (domänenspezifischen Sprache) - wenn Sie viele Set-Zeug zwischen Ihren Anwendungsklassen/Objekten "sprechen" müssen, dann warum nicht die natürliche Passform verwenden?

Verwandte Themen