Sehr geehrte Forumbesucher,
ich arbeite seit kurzer Zeit mit Oracle Datenbanken und muss in einer Tabelle eine große Menge Daten verwalten. Nur weiss ich nicht welche Struktur die Tabelle am besten haben soll.
Zur Datenstruktur:
es gibt ca. 2000 - 3000 Messgeräten, die jede Stunde einen Wert liefern. D.h. pro Jahr ca. 365 Tage x 24 Stunden = 8760 Werte pro Jahr.
Innerhalb von einigen Jahren hat sich so eine Menge von Daten gesammelt.
z.B. für 5 Jahre: 8760 Werte * 5 Jahre = 43800 Werte
Jetzt stellt sich die Frage: wie soll ich diese Daten am besten in einer Datenbank speichern, damit ich später für belibiege Messgeräte und belibiege Zeiträume:
- die Summe der Werte über mehrere Messgeräte für jede Stunde pro Tag, Jahr
- Max/Min für jede Stunde im Tag
schnell berechnen kann.
Ich habe mir zwei Möglichkeiten überlegt:
1) eine Tabelle mit 3 Spalten erstellen:
==================================
TagStunde / Messgerät / Wert
==================================
2005.02.01 01:00 0000001 0.5
2005.02.01 02:00 0000001 0.7
2005.02.01 03:00 0000001 0.6
....
2009.08.01 23:00 0000001 -0.2
2005.02.01 01:00 0000022 0.4
2005.02.01 02:00 0000022 0.4
2005.02.01 03:00 0000022 0.8
....
2009.08.01 23:00 0000022 0.1
und alle Werte in einer Spalte speicher, wobei man diese dann mit ID des Messgerätes und einem Zeitraum rausfiltern kann.
- einen großen Nachteil (hat sich während der Arbeit herausgestellt)
wenn einige Stationen Lücken bei den Werten haben (die Werte fehlen einfach), dann lässt sich die Summe über mehrere Stationen nur schwer bilden. Man muss für alle TagStunden (für 5 Jahre waren es 43800 Stk.) die Werte einzeln addieren.
2)
Man erstellt eine Tabelle mit vielen Spalten:
- eine Spalte für TagStunde:
- eine Spalte für jedes Messgerät. Als Name ID des Gerätes nehmen
zB.
- wenn einen Wert für eine Stunde fehlt, dann soll da "0" stehen.
================================================== ====
TagStunde 0000001 0000022 0000005 0000123 ....
================================================== ====
2005.02.01 01:00 0.5 0.1 0.4 0.2
2005.02.01 02:00 0.7 -0.1 - 0.1 0.5
2005.02.01 03:00 0.6 0.5 0.5 0.4
....
2009.08.01 23:00 -0.2 0.2 0.1 0.3
--> Insgesamt sind es für 3000 Messgeräte: 3001 Spalten in der Tabelle?
FRAGE: Ist es überhaupt möglich in Oracle (Version 10g)????
Die Vorteile dieser Version: Man kann die Summe für beliebige Messgeräte bilden, in dem man eine SQL-Abfrage macht: "SELECT spalte1+spalte2+... FROM Tabelle1";
Hat jemand vielleicht schon eine Erfahrung mit gleichem Problem gemacht?
Welche Struktur soll ich für die Tabelle am besten wählen? Gibt es vielleicht noch andere Möglichkeiten? Wieviel Spalten maximal darf eine Tabelle in Oracle haben? Sind die SQL-Abfragen bei solchen Tabellen (viele Spalten > 1000) performant?
Freue mich auf Ihre Kritik und Hilfe!
ich arbeite seit kurzer Zeit mit Oracle Datenbanken und muss in einer Tabelle eine große Menge Daten verwalten. Nur weiss ich nicht welche Struktur die Tabelle am besten haben soll.
Zur Datenstruktur:
es gibt ca. 2000 - 3000 Messgeräten, die jede Stunde einen Wert liefern. D.h. pro Jahr ca. 365 Tage x 24 Stunden = 8760 Werte pro Jahr.
Innerhalb von einigen Jahren hat sich so eine Menge von Daten gesammelt.
z.B. für 5 Jahre: 8760 Werte * 5 Jahre = 43800 Werte
Jetzt stellt sich die Frage: wie soll ich diese Daten am besten in einer Datenbank speichern, damit ich später für belibiege Messgeräte und belibiege Zeiträume:
- die Summe der Werte über mehrere Messgeräte für jede Stunde pro Tag, Jahr
- Max/Min für jede Stunde im Tag
schnell berechnen kann.
Ich habe mir zwei Möglichkeiten überlegt:
1) eine Tabelle mit 3 Spalten erstellen:
==================================
TagStunde / Messgerät / Wert
==================================
2005.02.01 01:00 0000001 0.5
2005.02.01 02:00 0000001 0.7
2005.02.01 03:00 0000001 0.6
....
2009.08.01 23:00 0000001 -0.2
2005.02.01 01:00 0000022 0.4
2005.02.01 02:00 0000022 0.4
2005.02.01 03:00 0000022 0.8
....
2009.08.01 23:00 0000022 0.1
und alle Werte in einer Spalte speicher, wobei man diese dann mit ID des Messgerätes und einem Zeitraum rausfiltern kann.
- einen großen Nachteil (hat sich während der Arbeit herausgestellt)
wenn einige Stationen Lücken bei den Werten haben (die Werte fehlen einfach), dann lässt sich die Summe über mehrere Stationen nur schwer bilden. Man muss für alle TagStunden (für 5 Jahre waren es 43800 Stk.) die Werte einzeln addieren.
2)
Man erstellt eine Tabelle mit vielen Spalten:
- eine Spalte für TagStunde:
- eine Spalte für jedes Messgerät. Als Name ID des Gerätes nehmen
zB.
- wenn einen Wert für eine Stunde fehlt, dann soll da "0" stehen.
================================================== ====
TagStunde 0000001 0000022 0000005 0000123 ....
================================================== ====
2005.02.01 01:00 0.5 0.1 0.4 0.2
2005.02.01 02:00 0.7 -0.1 - 0.1 0.5
2005.02.01 03:00 0.6 0.5 0.5 0.4
....
2009.08.01 23:00 -0.2 0.2 0.1 0.3
--> Insgesamt sind es für 3000 Messgeräte: 3001 Spalten in der Tabelle?
FRAGE: Ist es überhaupt möglich in Oracle (Version 10g)????
Die Vorteile dieser Version: Man kann die Summe für beliebige Messgeräte bilden, in dem man eine SQL-Abfrage macht: "SELECT spalte1+spalte2+... FROM Tabelle1";
Hat jemand vielleicht schon eine Erfahrung mit gleichem Problem gemacht?
Welche Struktur soll ich für die Tabelle am besten wählen? Gibt es vielleicht noch andere Möglichkeiten? Wieviel Spalten maximal darf eine Tabelle in Oracle haben? Sind die SQL-Abfragen bei solchen Tabellen (viele Spalten > 1000) performant?
Freue mich auf Ihre Kritik und Hilfe!
Comment