0

Ich möchte ein Datenbankschema entwerfen. Ich habe mehrere Kanäle (Channel_ID VARCHAR) und Zeitstempel, die dem Zeitpunkt entsprechen, an dem die Messungen für die Kanäle durchgeführt wurden (Timestamp DATETIME).SQL Datenbank Schemadesign

Was wäre ein intelligentes Schema zum Speichern der Zeitreihendaten, die von jedem Kanal aufgezeichnet werden? Ich komme nur mit so etwas wie dies, aber dies sehr schlecht zu sein scheint, da die Spalte Werte alle Werte enthält ...

MEASUREMENTS 
Channel_ID VARCHAR | Timestamp DATETIME | Values ??? 

Wie würde ich dies richtig tun?

EDIT: Die Anzahl der Werte kann in die Tausende sein.

+0

Was die „Werte“ sind - vermutlich mehr als 1 Wert, wenn dies der Fall würden Sie Erstellen Sie eine Zeile für jeden einzelnen Wert und identifizieren Sie seinen Typ über eine value_type-Tabelle –

+0

Vielen Dank für Ihren Kommentar. In der Zwischenzeit habe ich eine andere Lösung gefunden. Ich könnte eine zweite Tabelle mit mehreren Spalten erstellen und jede Spalte in dieser Tabelle hat eine eindeutige Mess-ID (das ist die channel_id kombiniert mit dem Zeitstempel). Jede dieser Spalten enthält alle Messwerte der jeweiligen Messung. Was denkst du darüber? – Ohumeronen

+1

Es ist fast immer besser, nach unten (Zeilen) als nach across (Spalten) zu gehen - was von den Arten der Abfragen abhängt, die Sie ausführen möchten - Mathe auf einer Reihe von Zeilen ist trivial, macht es auf * n * Spalten ist nicht. Sie wollen sicherlich kein Design, das die Erstellung neuer Spalten mit Variablennamen erfordert. –

Antwort

0

Ich würde vorschlagen, zusätzlich zu Ihrer Kanaltabelle eine Maßtabelle zu erstellen. Jede Zeile hat einen eindeutigen Schlüssel (Primärschlüssel), einen Fremdschlüssel, der auf eine Zeile innerhalb der Kanaltabelle verweist (um eine Lesung einem Kanal zuzuordnen), einen Zeitstempel und andere Daten, die sich auf diesen bestimmten Lesevorgang beziehen.

Mit dieser Einrichtung können Sie mehrere Messungen für einen bestimmten Kanal und Sie konnten sie auswählen, indem Sie wie etwas zu tun:

SELECT * FROM measurements 
WHERE channel_id = 5; 
+0

Danke für den Vorschlag. Würde diese Lösung erfordern, dass ich die tatsächlichen Messwerte als Arrays speichern würde? Oder genauer gesagt: Würden die Werte für eine channel_id in einer einzigen Zelle gespeichert werden? – Ohumeronen

+1

Jede Messung wäre eine einzelne Zeile innerhalb der Messtabelle.Nach 1NF wollen wir, dass eine einzelne Zelle nur eine Sache enthält. – Caleb

+1

Eine Zelle ist ein Feld in der Datenbankterminologie. Hier ein Beispiel: Zeile 1: Mess-ID = 1, Kanal-ID = 5, Messung = 1000 Zeile 2: Mess-ID = 2, Kanal-ID = 5, Messung = 3000. Sorry, ich verstehe nicht ganz die Maße und Kanäle, aber ich habe versucht, dies im Rahmen meines Verständnisses am besten umzusetzen. Wenn Sie einen Befehl wie den in der obigen Antwort ausführen, gibt es 2 Zeilen, eine Zeile für jede einzelne Messung, beide für den Kanal mit der ID 5. – Caleb