Fremdschlüssel auf Tabellen? Oder eher Arrays?

Hallo zusammen,

ich möchte eine Datenbank aufbauen, um Messwerte abzuspeichern. Zunächst habe ich eine Tabelle “Messwerte”, bei der pro Messung ein Datensatz eingetragen wird. Diese beinhaltet die wichtigsten Messresultate, ca. 10 Spalten.

Zu jeder Messung gehören, aber auch eine Messgrafik. Wenn ich diese beispielsweise in einer Tabelle speichern würde, hätte ich 3 Spalten und bis 5000 Zeilen. Allerdings hätte dann ich für jede neue Messung eine neue Tabelle…

Ich möchte nun die Messwerte mit der Messgraphik verknüpfen, weiss allerdings nicht so recht, wie dies am besten zu machen ist. In jeder Zeile von “Messwerte” möchte ich eine Referenz auf die Messgraphik haben. Kann man beispielsweise über eine Art Fremdschlüssel auf eine Tabelle “Messgraphik XY” verweisen?

Alternativ habe ich noch was zu Arrays gelesen, sollte man eher diese verwenden? Oder gibt es eine viel einfachere Lösung? :wink:

Im Voraus schon recht herzlichen Dank für Eure Antworten!

Du brauchst nicht für jede Messung eine neue Tabelle anzulegen. Speichere einfach den Fremdschlüssel mit den Grafikwerten:

create table messung 
(
    id    integer not null primary key,
    ... weiterer Spalten
);

create table messgrafik
( 
    id           integer not null primary key,
    messung_id   integer not null,
    ... weitere Spalten ...,
    constraint fk_grafik_messung 
         foreign key (messung_id) 
         references messung(id)
);

Herzlichen Dank für die schnelle Antwort, allerdings ist mir mir dasnoch nicht ganz klar :wink:

Deinen Vorschlag würde ich verstehen, wenn ich die 5000 x 3 Messpunkte als Spalten in der Tabelle Messgraphik machen würde. Dann hätte ich für jede Messung einen Datensatz in Messgraphik und einen in Messung. Würde das aber Sinn machen oder stehe ich generell noch auf dem Schlauch? :wink:

Generell hätte ich lieber von der Tabelle Messung eine Referenz zu Messgraphik. Hintergrund ist auch noch, dass eventuell aus Speichergründen die Messgraphik abgeschaltet werden soll. Somit gibt es eventuell nicht zu jedem Datensatz in der Tabelle Messung passende Einträge in der Tabelle Messgraphik…

Du hättest für jede Messung 5000 Datensätze in der Tabelle messgrafik

Ok, ich glaube, ich hab es jetzt verstanden. Jetzt ist es mir klar, wie du es gemeint hast. Herzlichen Dank!

Damit wird die Tabelle messgrafik natürlich sehr gross. Noch eine Frage zur möglichen Geschwindigkeit einer solchen Datenbank:
Sagen wir, wir hätten in der Tabelle messgrafik, 1000 Messungen, also 5 Millionen Datensätze. Was meinst du, wie lange würde es auf “einem normalen PC” dauern, bis man die Daten einer beliebigen Messgrafik, d.h. ein Block von 5000 Datensätzen herausgelesen hätte? Keine Angst, ich nagele dich da nicht fest, bin aber als Anfänger nun mal noch ohne Plan :wink: Dauert es eher im Bereich einiger Millisekuden, Sekunden oder eher Minuten?

Millisekunden sicher nicht, Sekunden würd ich sagen, aber im unteren Bereich. Aber das hängt von vielen Faktoren ab, insbesondere RAM und Pladde. 5 Mille Datensätze ist eher, ähm, wenig. Wichtig ist natürlich auch die ganze Struktur der Sache, Indexe etc. Mit ‘richtiger’ Hardware bekommst das auch in deutlich unter 1 Sekunde hin.


Andreas

5 Millionen Datensätze nicht wirklich viel.

Was meinst du, wie lange würde es auf “einem normalen PC” dauern, bis man die Daten einer beliebigen Messgrafik, d.h. ein Block von 5000 Datensätzen herausgelesen hätte?

Das hängt natürlich von vielen Faktoren ab. Auf meine ziemlich betagten Desktop dauert das Laden von 5000 Datensätzen für eine Messung (bei dem oben beschriebenen) Szenario via einem Java SQL Tool etwa 0.15 Sekunden (ohne Netzwerkverkehr, weil alles lokal). Dabei muss natürlich ein entsprechender Index existieren.

Das Berechnen der Durchschnittswerte für die Messwerte alle 5000 Messungen (also aller 5 Mio Messwerte) dauert auf meinem betagten Desktop ca. 3 Sekunden.

Es hängt halt immer davon ab, wie drauf zugegriffen wird.

Ok, das sieht doch schon mal ganz gut und brauchbar aus… Ich denke, von der Geschwindigkeit passt es dann ganz gut.

Herzlichen Dank für eure Antworten!