Chris_2k: Datenbankstruktur - Hilfe

Hi,

Ich hoffe, ihr könnt mir kurz bei meiner DB Struktur helfen... Ich hätte u.a. eine Tabelle, bei der ich keinen Primary Key brauchen kann....
Und zwar schreib ich gerade ein Programm, das jede Stunde aus meiner Wetterstation mit bis zu 8 (momentan 2) Sensoren Werte ausliest und in der DB speichern soll... (alle 8 mit selbem TimeStamp)

Meine DB Struktur sieht momentan so aus

Tabelle Station

Station_ID <-------------+
---------------          |
Name                     |
Firmware                 |
                         |
Tabelle Sensor           |
==============           |
Sensor_ID <----------+   |
---------            |   |
StationID <--------- | --+
Name                 |
                     |
Tabelle Messwerte_1  |
===================  |
Date (Timestamp)     |
Sensor_ID <----------+
Temperature          |
Humidity             |
                     |
Tabelle Messwerte_2  |
===================  |
Date(Timestamp)      |
Sensor_ID <----------+
Pressure
Rain
Forecast

Meine Fragen:
Ist die DB Struktur so OK ?
Ich habe 2 Messwert Tabellen, weil ich von den meisten Sensoren Temp / Luftfeuchtigkeit bekomme, aber nur von 1 Sensor Luftdruck usw...

P.S: Bitte Nachsicht üben, dass ist das erste mal, dass ich was mit Datenbanken mache...
Danke schon mal für die Hilfe,
Chris

  1. Glück auf!

    |
    Tabelle Messwerte_1  |
    ===================  |
    Date (Timestamp)     |
    Sensor_ID <----------+
    Temperature          |
    Humidity             |
                         |
    Tabelle Messwerte_2  |
    ===================  |
    Date(Timestamp)      |
    Sensor_ID <----------+
    Pressure
    Rain
    Forecast

    Meine Fragen:
    Ist die DB Struktur so OK ?
    Ich habe 2 Messwert Tabellen, weil ich von den meisten Sensoren Temp / Luftfeuchtigkeit bekomme, aber nur von 1 Sensor Luftdruck usw...

    Ich würde diese beiden Tabellen zu einer zusammenfassen.  Es müssen dann ja nicht von jedem Sensor alle Werte eingetragen werden.

    Gruß
    Kackfohgel

    1. Danke für die Antworten!

      Ich würde diese beiden Tabellen zu einer zusammenfassen.  Es müssen dann ja nicht von jedem Sensor alle Werte eingetragen werden.

      Gruß
      Kackfohgel

      Ich hab dabei eher daran gedacht, dass ich pro Datensatz (max Werte von 8 Sensoren) dann zig NULL Werte (4 x 8) in die DB geschrieben würden und das Speicherplatzmäßig nicht so optimal wär...

      @ChrisB:

      Hm, TimeStamp in einer eigenen Tabelle... Ich glaube, da hätt ich das Problem, dass ich in den beiden Messwerttabellen unterschiedliche Anzahl an records hätte und das nicht per ID abfragbar wär

      z.b.

      Messwerte_1

      4 Datensätze zu Date1

      Messwerte_2

      2 Datensätze zu Date1

      DateTabelle

      1 Datensatz zu Date 1

      Hmhm...

      Ich habe momentan ein kleines "Problem" beim auslesen der Werte...

      Messwerte_1 hat 4 Einträge
      Messwerte_2 hat 2 Einträge

      select s.Name, mw1.Date, mw1.Temperature, mw1.Humidity, mw2.Pressure from Messwerte_1 mw1, Messwerte_2 mw2, Sensor s where mw1.SensorID = s.SensorID;

      Bringt 8 Ergebnisse

      Warum kommt bei meiner Abfrage jeder Wert doppelt?

      1. Ah, sry...

        Bitte die letzte Frage ignorieren.
        Ich muss sowieso nach Sensor ID filtern bei der Auswertung in PHP dann... (hab auch schon kapiert, warum die Records doppelt kommen)

        Wie gesagt, dass ist mein erstes Projekt mit Datenbanken, bitte um Nachsicht :- )

      2. Hi!

        select s.Name, mw1.Date, mw1.Temperature, mw1.Humidity, mw2.Pressure from Messwerte_1 mw1, Messwerte_2 mw2, Sensor s where mw1.SensorID = s.SensorID;
        Warum kommt bei meiner Abfrage jeder Wert doppelt?

        Das ist ein Inner Join, der bildet ein kartesisches Produkt, also jeder mit jedem. Informiere dich über die Join-Arten: http://aktuell.de.selfhtml.org/artikel/datenbanken/

        Lo!

  2. Hi,

    Ich hoffe, ihr könnt mir kurz bei meiner DB Struktur helfen... Ich hätte u.a. eine Tabelle, bei der ich keinen Primary Key brauchen kann....

    Warum kannst du einen PK „nicht brauchen“?

    Selbst wenn du aktuell keine Verwendung dafür siehst, solltest du trotzdem einen verwenden - er kann sich später durchaus als hilfreich erweisen, wenn es um Dinge geht, die jetzt vielleicht noch gar nicht angedacht sind (Bearbeiten, Löschen, ...), und die eine eindeutige Identifizierung eines Datensatzes erforderlich machen.

    Und zwar schreib ich gerade ein Programm, das jede Stunde aus meiner Wetterstation mit bis zu 8 (momentan 2) Sensoren Werte ausliest und in der DB speichern soll... (alle 8 mit selbem TimeStamp)

    Gerade wegen letzterem wäre zu überlegen, ob vielleicht noch eine Tabelle „Messung“ eingeführt wird - die bekäme eine ID und den Timestamp, und die Tabellen mit den Messergebnissen würden auf diese Messungs-ID Bezug nehmen.

    Ist die DB Struktur so OK ?
    Ich habe 2 Messwert Tabellen, weil ich von den meisten Sensoren Temp / Luftfeuchtigkeit bekomme, aber nur von 1 Sensor Luftdruck usw...

    Das ist ein Weg, es zu machen, ja.

    Ein anderer Wäre, die einzelnen Messwerte in eine weitere Tabelle auszulagern, die dann noch ein Kennzeichen bekäme, um was für eine Art von Wert es sich handelt. Abgesehen davon, dass das mehr Aufwand beim wieder zusammenführen der Daten bedeutet, bietet es sich aber auch höchstens dann an, wenn für alle Messwerte der gleiche Datentyp verwendet wird/werden kann. Wenn das nicht gegeben ist, würde es wieder ziemlich unschön werden.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  3. moin,

    Station_ID <-------------+

    das spricht ja schonmal für zwei Tabellen. Klimamessungen sind ortsgebunden, da würde ich eine Tabelle für die Stammdaten der einzelnen Stationen anlegen, das ermöglicht spätere Abfragen "wo gemessen" wurde. Über die StationID gibts dann die 1:n Beziehung zur zweiten Tabelle mit den Messungen über die Zeit mit den Werten für Temperatur, Luftfeuchtigkeit, Ozonwerte usw.

    Schönen Sonntag,
    Hotti