Verweise auf ganze Tabellen (Messwert-Verwaltung)

Hallo zusammen,

ich bin Anfänger in Sachen Datenbanken und habe eine Frage, die ich mit meinem bisherigen Wissen nicht beantworten kann. Zudem hat mir die Suchfunktion auch keine sinnvollen Treffer beschert.

Aufgabe:
Ich würde gerne meine Messkampagnen und die damit verbundenen Messungen in einer Datenbank verwalten. Eine Messkampagne besteht aus Messungen verschiedener Sensorsysteme, die wiederum verschieden viele Messwerte enthalten.

Bsp: Messkampagne #1: Messungen: Senorsystem 1 (3x1500 Messwerte), Sensorsystem 2 (5x2000 Messwerte), Sensorsystem 3 (4x800 Messwerte)
Messkampagne #2: Messungen: Senorsystem 1 (3x4000 Messwerte), Sensorsystem 3 (4x1200 Messwerte) (Sensorsystem 2 nicht verwendet)
usw.

Meine Idee ist, für jede Messung eine Tabelle anzulegen, in der die jeweiligen Messwerte gespeichert werden. Jede Messung (Tabelle) kann eindeutig über die Nr. der Messkampagne und die Nr. des Sensorsystems indentifiziert (z.B. Tabellen: Kampagne0001_Sensor0001, Kampagne0001_Sensor0002, Kampagne0001_Sensor0003, Kampagne0002_Sensor0003, Kampagne0002_Sensor0003)

Zusätzlich würde ich gerne eine Tabelle “Messkampagnen” anlegen, in der ich Spalten für die einzelnen Sensorsysteme und zusätzliche Informationen anlegen möchte. In den Spalten der Sensorsysteme müssten jetzt Verweise auf die Tabellen der Messungen (s.o.) stehen, damit ich auf die Messwerte zugereifen kann.

Tabelle Messkampagnen:

ID | Messkampagnen ID | Sensorsystem 1 | Sensorsystem 2 | Sensorsystem 3 | Bemerkung | weiter Spalten

1 | 1 | Kampagne0001_Sensor0001 | Kampagne0001_Sensor0002 | Kampagne0001_Sensor0003 | “neue Kalibrierung” |
2 | 2 | Kampagne0002_Sensor0001 | NULL | Kampagne0002_Sensor0003 | “nix” |

Ich habe allerdings keine Ahnung, wie ich Verweise auf ganze Tabellen erstellen kann und darüber dann wieder auf deren Inhalte zugreifen kann. Geht so etwas überhaupt oder ist so ein Design nicht sinnvoll? Bin für jeden Hinweis dankbar.

Vielen Dank und viele Grüße
Jens

So ganz versteh ich an Anhieb jetzt nicht, was du genau vorhast, aber so wie angedacht scheint es Murks zu sein.

Das skaliert nicht, wenn Du für eine neue Messung eine neue Tabelle anlegen willst. Was spricht gegen eine Tabelle, die die jeweilige Messung (Messkampangne, Sensor-ID, …) in entsprechenden Spalten hat und dazu den Messwert, Zeitpunkt, Bemerkung oder so.

Falls eine ‘Messkampagne’ jeweils eigene Werte für Datum oder Bemerkung hat, dann dazu eine extra Tabelle verwenden und darauf referenzieren.

Allgemein: beschäftige Dich mit Normalisierung von Datenbanken.


Viel Erfolg!

Andreas

Ein Sensorsystem misst mehrere Parameter (im Bsp. 3, 5 bzw. 4) und je nachdem wie lange es läuft mehrere tausend Messwerte pro Parameter. Da dachte ich, wäre eine eigene Tabelle pro Messung nicht der schlechteste Ansatz. Deinem Vorschlag kann ich wiederum nicht so ganz folgen …

Die Frage war auch: Kann man Referenzen auf ganze Tabellen in einem Datensatz ablegen?

Grüße
Jens

Ohne groß im Detail darüber nachzudenken, würde ich vermutlich irgendwas wie das hier verwenden:

create table messkampagne 
(
  mid       integer not null primary key,
  bemerkung text    not null
);

create table sensorsystem
(
  sid   integer  not null primary key, 
  name  text     not null
);


create table sensorparameter
(
  pid   integer not null primary key,
  sid   integer not null references sensorsystem,
  name  text not null,
);

-- Zuordnung von Sensorsystemen zu einer Messkampagne
create table kampagnen_system
(
  mid integer not null references messkampagne,
  sid integer not null references sensorsystem,
  primary key (mid, sid) -- verhindert, dass das gleiche system mehr als einmal in einer Kampagne ist
);


create table messwert
(
   mid       integer        not null, 
   sid       integer        not null,
   pid       integer        not null references sensorparameter
   messzeit  timestamp      not null,
   messwert  decimal(24,10) not null,
   foreign key (mid, sid) references kampagnen_system (mid, sid)
);

ACK. Sauber normalisiert halt.

Vielen Dank, das ist ja mal konstruktiv. 5 Tabellen sind ja deutlich weniger als meine N Tabellen. Ich habe noch ein paar Probleme mit den Datenformaten der Sensoren aber Dein Vorschlag lenkt mich offensichtlich in die richtige Richtung.

Danke!

Der FK von messwert zu sensorparameter gefällt mir noch nicht. Mit der Lösung kann ein messwert einen Parameter referenzieren der gar nicht zu dem Sensortyp gehört. Könnte man dadurch lösen, dass man bei sensorparameter noch einen unique constraint über (pid,sid) einführt und den aus der messwert Tabelle referenziert.

Möglicherweise gehören die Parameter aber auch zu der Zuweisung eines Sensors zu einer Messkampagne (das wird nicht ganz klar aus der Problemstellung), dann müsste der FK halt zu der Tabelle kampagnen_system gehen (und damit wäre das Problem dass ein messwert den falschen Parameter referenziert auch gelöst).