2017-06-13 5 views
0

Ich spiele gerade mit einer SQLite-Datenbank in einer vb.net-Anwendung. Die Datenbank soll Zeitreihendaten für viele Variablen speichern. Im Moment bin ich versucht, die Datenbank mit 2 Tabellen zu bauen, wie folgt:SQLite-Abfrage mit unbekanntem Fremdschlüssel

  1. Tabelle VarNames:

    CREATE TABLE IF NOT EXISTS varNames(id INTEGER PRIMARY KEY, varName TEXT UNIQUE); 
    

Es sieht wie folgt aus:

ID | varName 
--------------- 
1 | var1 
2 | var2 
... | ... 
  1. Tabelle varValues:

    CREATE TABLE IF NOT EXISTS varValues(timestamp INTEGER, varValue FLOAT, id INTEGER, FOREIGN KEY(id) REFERENCES varNames(id) ON DELETE CASCADE); 
    

Es sieht wie folgt aus:

timestamp | varValue | id 
------------------------------ 
1   | 1.0345 | 1 
4   | 3.5643 | 1 
1   | 7.7866 | 2 
3   | 4.5668 | 2 
...  | ....  | ... 

Die erste Tabelle alle Variablennamen mit IDs enthält. Die zweite Tabelle enthält die Werte jeder Variablen für viele Zeitschritte (angezeigt durch die Zeitstempel). Ein Fremdschlüssel verbindet die Tabellen über die Variablen-IDs.

Aufbau der Datenbank funktioniert gut.

Jetzt möchte ich die Datenbank abfragen und die Zeitreihe für ausgewählte Variablen darstellen. Dafür ich die folgende Anweisung:

select [timestamp], [varValue] FROM varValues WHERE (SELECT id from varNames WHERE varName= '" & NAMEvariable & "'); 

Da der Benutzer nicht die Variabel-ID nicht kennt, nur den Namen der Variable (in NAMEvariable) Ich habe die ..wo verwenden (SELECT ... Anweisung Es scheint. wie dies wirklich die Leistung verlangsamt. die Zeitreihen müssen 50k Punkte.

einen besseren Weg, Werte für eine bestimmte Variable abzufragen, die durch ihren Namen angesprochen werden gibt es nur kann?

Antwort

0

Sie sollten wahrscheinlich verwenden eine join Abfrage, etwas wie:

SELECT a.[timestamp], a.varValue 
FROM varValues AS a, varNames AS b 
WHERE b.varName = <name> 
    AND a.id = b.ID 

edit: Um mehr als einen Parameter abgefragt werden, etwa wie folgt verwendet werden:

SELECT a.[timestamp], a.varValue 
FROM varValues AS a, varNames AS b 
WHERE b.varName IN (<name1>, <name2>, ...) 
    AND a.id = b.ID 
Verwandte Themen