SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 08.06.2011, 20:42:10
teddyd teddyd ist offline
Anfänger
 
Registriert seit: Jun 2011
Alter: 53
Beiträge: 2
Tabellen normalisieren

Hallo,

hoffentlich finde ich Hilfe.

Schon seit Tagen tüftle ich an einem Weg, meine Tabellen effektiver zu gestalten und zu normalisieren.

Mein Projekt speichert und vergleicht Messwerte.

Bisher hatte ich alle Daten in einer einzigen Tabelle (hier exemplarisch vereinfacht):

Tabelle "messungen":
- messung_id
- messung_name
- messung_datum
- sensor_1_id
- sensor_1_wert
- sensor_1_sonstigeparameter
- sensor_2_id
- sensor_2_ wert
- sensor_2_sonstigeparameter
- sensor_3_id
- sensor_3_ wert
- sensor_3_sonstigeparameter

Die Anzeige erfolgt Spaltenweise in dieser Art:

Messung 1 | Wert Sensor 1 | Wert Sensor 2 | Wert Sensor 3
Messung 2 | Wert Sensor 1 | Wert Sensor 2 | Wert Sensor 3
Messung 3 | Wert Sensor 1 | Wert Sensor 2 | Wert Sensor 3
Messung 4 | Wert Sensor 1 | Wert Sensor 2 | Wert Sensor 3
Messung 5 | Wert Sensor 1 | Wert Sensor 2 | Wert Sensor 3
Messung 6 | Wert Sensor 1 | Wert Sensor 2 | Wert Sensor 3
...

Mit dieser Tabelle bin ich in der Lage, alle Messwerte zeilenweise zu vergleichen. Hier geht es nicht um simple Sortierung nach irgendeiner Spalte, sondern auch um komplexe Abfragen wie z.B.:

"Zeige alle Messungen, bei denen Sensor 1 einen höheren Wert hat als jeder der anderen Sensoren, vorausgesetzt, die anderen Sensoren haben Werte >0."

SELECT * FROM messungen
WHERE sensor_1_wert > sensor_2_wert AND sensor_2_wert > 0
AND sensor_1_ wert > sensor_3_ wert AND sensor_3_ wert > 0

Anfangs war die Anzahl der Sensoren noch klein, aber es werden immer mehr. Und da ich einige Felder mit einem Index belegen muss, kommt die Tabelle an ihre Grenzen.

Also möchte ich getrennte Tabellen aufbauen:

Tabelle "messung":
- id
- name
- datum

Tabelle "sensor":
- messung_id
- sensor_id
- wert
- sonstigeparameter

Die Anzeige der Werte stellt kein großes Problem dar: Ich durchlaufe alle Messungen und zeige (mit einem zusätzlichen SELECT für jede Zeile) die Messungen jedes Sensors an.

Mir ist aber absolut unklar, wie ich komplexeren Abfragen einbauen kann. Ich kann ja die Daten nicht mehr Zeilenweise vergleichen, weil mit einem JOIN die Zeilenanzahl vervielfacht wird, d.h. bei 3 Messungen und 3 Sensoren habe ich gleich 9 Zeilen, und nicht mehr 3 wie vorher.

Dann dachte ich mir, ich JOINE jeden Sensor als separate Tabelle, in der Form:

SELECT
messung.id
sensor_1.wert,
sensor_2.wert,
sensor_3.wert
FROM messung
INNER JOIN sensor sensor_1 ON (messung.id=sensor_1.messung_id)
INNER JOIN sensor sensor_2 ON (messung.id=sensor_2.messung_id)
INNER JOIN sensor sensor_3 ON (messung.id=sensor_3.messung_id)
WHERE sensor_1.wert > sensor_2.wert
... usw.

Aber das Konstrukt wird bei vielen Messungen (>100.000) und Sensoren (>25) derart unübersichtlich und langsam, daß ich daran zweifle, auf dem richtigen Weg zu sein.

Kann mir jemand sagen, welchen Weg ich einschlagen muss?

Vielen Dank schon jetzt für's Lesen!
Mit Zitat antworten
  #2  
Alt 09.06.2011, 10:30:25
KTB KTB ist offline
Member
 
Registriert seit: Mar 2006
Alter: 38
Beiträge: 599
AW: Tabellen normalisieren

--- Gelöscht ---
__________________
In der Ruhe liegt die Kraft!
Mit Zitat antworten
  #3  
Alt 09.06.2011, 10:54:23
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Tabellen normalisieren

Zitat:
Kann mir jemand sagen, welchen Weg ich einschlagen muss?
Was du tun musst, kannst du nur selber entscheiden.


Aber einen Tipp kann ich dir geben:
Hmmm....
Offensichtlich stehen Messungen und Sensoren in einer n:m Relation.

Üblicher weise werden in solchen Fällen 3 Tabellen nötig sein.
1. Messung (id name datum)
2. Sensor (id bezeichnung parameter)
3. eine Kreuztabelle mit den Werten (messung_id sensor_id wert)
Ob das für dich so sinnvoll ist?


Alle Spalten, welche in der ON Klausel und im WHERE vorkommen, mit einem INDEX versehen.
Mit Zitat antworten
  #4  
Alt 09.06.2011, 11:22:38
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Tabellen normalisieren

Hi

Zitat:
Und da ich einige Felder mit einem Index belegen muss, kommt die Tabelle an ihre Grenzen.
Aha wieso Grenzen?

Zitat:
Kann mir jemand sagen, welchen Weg ich einschlagen muss?
Einen Weg hat dir Doku ja gezeigt aber letztendlich wissen wir
nix über die späteren Aufgaben die mit dieser DB gelöst werden sollen
und das ist für mich ein wichtiger Faktor.

z.B.
Zitat:
auch um komplexe Abfragen wie z.B.:

"Zeige alle Messungen, bei denen Sensor 1 einen höheren Wert hat als jeder der anderen Sensoren, vorausgesetzt, die anderen Sensoren haben Werte >0."
Das ist nicht komplex, nen index wie Doku schon sagte auf alle WHERE Spalten und gut.
Wenn dann nicht alles varchar(255) sondern passend zu den Werten ist solltest du auch
bei >100.000 Daten kaum probleme bekommen.
Wenn deine Aufgaben/Software/Script nur sowas Abfragt macht meiner Meinung nach
eine Normalisierung kaum Sinn. Anders siehts aus wenn du irgenwann 50 Sensoren hast
und Dynamisch verschiedene pro Messung benutzt werden usw..

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tabelle sinnvoll normalisieren b2907377 MySQLi/PDO/(MySQL) 9 02.11.2010 08:06:49
Abfrage über Tabellen frank1973 MySQLi/PDO/(MySQL) 5 06.01.2010 07:03:23
Performance - Aufgabe (Abgleich mehrere Tabellen) mit PHP oder MySql lösen? ich01 PHP für Fortgeschrittene und Experten 2 06.07.2009 13:25:36
Inhalte aus UTF-8 Tabellen in ISO-Tabellen übertragen Alwin20 MySQLi/PDO/(MySQL) 0 09.07.2008 12:23:02
2 Tabellen zusammenfassen. Problem! basti123456 MySQLi/PDO/(MySQL) 4 03.02.2006 08:01:08


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:20:46 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt