Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
MySQL/Performance: Viele Datenfelder oder viele Datensätze?? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
MySQL/Performance: Viele Datenfelder oder viele Datensätze??


 
mvwd
11-07-2010, 15:15 
 
Hallo zusammen.

Ich würde gerne wissen, ob sich zu folgender Konstellation eine Aussage bezüglich Performance treffen läßt, bzw. ob ihr effizientere Möglichkeiten seht folgendes umzusetzen:

Konkretes Beispiel Fußball-Tippspiel:
Es werden für jeden User zu jedem Spiel Tipps in der Tabelle 'tipps' gespeichert. Diese umfasst dieses Jahr zur WM2010 in Südafrika 64 Spiele. Diese Tipps könnte ich jetzt entweder:

in EINEM Datensatz für jeden User speichern; in einer Tabelle die die Datenfelder für die Spiele 1-64 enthält:
Tabelle tipps:
userid | timestamp | game1 | game2 | game3 | ... | game-n

...oder
für jeden Tipp je Spiel einen EIGENEN Datensatz anlegen und diesen mittels einer ID je Spiel (Spiel 32 = gameid:32) identifizieren.
Tabelle tipps:
userid | timestamp | gameid | tipp
Angenommen ich habe (fast realistische ;)) 100 Mitspieler, ergäbe das bei Variante:

100 Datensätze mit 66 Datenfeldern (64 Spiele plus userid & timestamp)
6400 Datensätze (64 Spiele x 100 Spieler) á 4 Datenfelder

Vorteile bezüglich der Verarbeitung und Auswertung sehe ich eindeutig bei Variante 2.: Hier kann ich z.B. je abgegebenem Tipp auswerten, WANN dieser erfolgt ist; bei Variante 1 nur, wann die letzte Änderung an den Tipps erfolgte (nicht aber welcher Tipp geändert wurde!).

Da ich mir genau diese Frage bei meinen (Hobby-)Projekten immer wieder stelle, würde ich gerne wissen:
Lieber viele Datenfelder und wenige Datensätze oder wenig Datenfelder und viele Datensätze??

Mit freundlichen Grüßen,
Markus.

 
AmicaNoctis
11-07-2010, 15:47 
 
Hallo und willkommen im Forum,

wenn die Spalten aus gleichartigen Eigenschaften bestehen, gehören sie in eine andere Tabelle. In deinem Fall könnte die Standardlösung z. B. so aussehen:

Tabelle user
Tabelle mannschaft
Tabelle spiel mit mannschaft1_id, mannschaft2_id
Tabelle tipp mit id, user_id, spiel_id, datum etc.

Tipp zum Weiterlesen: http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29

Gruß,

Amica

 
mvwd
11-07-2010, 16:24 
 
Hallo Amica,

danke für Deine Antwort!
...also Variante 2. Genauso habe ich es in diesem Beispiel auch gelöst.

D.h. es besteht aus Deiner Sicht kein Problem darin, daß um den Faktor 64 mehr Datensätze in der Tabelle stehen als in Varinte 1!? In anderen Beispielen wäre dieser Faktor sogar deutlich höher...
Denn eine Datenredundanz liegt ja nicht vor (stimmts!?).

Oder anders gesagt: eine Normalisierung (und damt eine Reduzierung der Datenfelder je Tabelle) ist immer vielen Datenfeldern vorzuziehen?

Markus.

 
AmicaNoctis
11-07-2010, 16:28 
 
Genau, MySQL (und auch andere DBMSe) haben generell kein Problem mit vielen Datensätzen, dafür wurden sie ja gemacht.

 
mvwd
11-07-2010, 16:34 
 
Das' doch mal ne Ansage!
Ich danke Dir.

Markus.

- -

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