zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden [MySQL] ab wann lieber eine neue Tabelle verwenden

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 05.04.2005, 18:51
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 19.01.2005
Beiträge: 1.113
The Doc befindet sich auf einem aufstrebenden Ast
Standard [MySQL] ab wann lieber eine neue Tabelle verwenden

Ich schreib mir grad nen CMS und frag mich grad, ab wann man lieber eine neue MySql Tabelle verwenden sollte.
Es geht um folgendes:
Ich möchte z.B. einen Klickcounter und ein Voting schreiben, die optional in andere Scripte eingebunden werden können (z.B. Links, Downloads sowas).
Ich wollte eine Tabelle für Klicks, und eine für Votes nehmen, und dann über join und ein paar Parameter das ganze regeln, nur kam mir da die Frage, wann sowas eine - stark spürbare - Geschwindigkeits Bremse wäre, also ab wieviel Einträgen.
100? 500? 1000? 10.000?
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an
Milian Wolff | Markdownify | Typogridder
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 05.04.2005, 19:39
C2 mediaproduction
neuer user
 
Registriert seit: 04.04.2005
Ort: Leipzig
Beiträge: 62
s0nic befindet sich auf einem aufstrebenden Ast
Standard

Du solltest Dir Gedanken über Dein DB-Design machen, Stichwort 'Normalformen'. Damit solltest Du eine Struktur finden, die alle Anforderungen erfüllt. Die Menge der Einträge in einer Tabelle spielt dabei eine untergeordnete Rolle, denn DBMS (Datenbank Managementsysteme) sind darauf ausgelegt, sehr viele Daten zu speichern. 10.000 Einträge ist keineswegs viel für ein DBMS.

/€dit: Wenn Du Tabellen joinst, solltest Du aber auch drauf achten, kein Kreuzprodukt zu forcieren - denn dann wird es wirklich langsam.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 05.04.2005, 21:13
Jan Jan ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 27.02.2005
Beiträge: 172
Jan befindet sich auf einem aufstrebenden Ast
Standard

Hi!

Bei diesen Zahlen sehen ich wie mein Vorgänger auch keine Probleme.
Du solltest dir aber gerade bei einem Join Geanken über ein vernünftiges INDEX-Design machen.

Alternativ könnte man auch z.B. für jeden Link eine Zeile hinterlegen, in dieser ein Feld mit den Klicks vorhanden ist, das entsprechend hochgesetzt wird. Wenn man aber noch andere Angaben speichern möchte wird das natürlich schwierig...

Gruß
Jan
Mit Zitat antworten
  #4 (permalink)  
Alt 05.04.2005, 22:33
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 19.01.2005
Beiträge: 1.113
The Doc befindet sich auf einem aufstrebenden Ast
Standard

Verstehe ich das richtig, eine Tabelle, für alles? Oder was meintest du mit "Normalformen"?
Und was meinst du mit "ein Kreuzprodukt forcieren"?

@ Jan
Ich wollte diese Scripte variabel einbinden, also es dem Endnutzer freistellen, sie zu benutzen. Jedes meiner Scripte hat eine MySql Tabelle mit primary ID (auto_increment). Als Index wollt ich daher
a)den Scriptnamen
b)die ID aus der Tabelle dieses Scripts
übergeben.

Sollte man es anders machen?
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an
Milian Wolff | Markdownify | Typogridder
Mit Zitat antworten
  #5 (permalink)  
Alt 05.04.2005, 23:12
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 18.01.2005
Beiträge: 696
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von The Doc
Oder was meintest du mit "Normalformen"?
kuckst du hier: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
Mit Zitat antworten
  #6 (permalink)  
Alt 06.04.2005, 00:27
C2 mediaproduction
neuer user
 
Registriert seit: 04.04.2005
Ort: Leipzig
Beiträge: 62
s0nic befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von The Doc
Verstehe ich das richtig, eine Tabelle, für alles? Oder was meintest du mit "Normalformen"?
Nur eine Tabelle zu benutzen, wäre sehr wahrscheinlich gerade das Gegenteil von dem, was Du machen solltest. Was man unter den Normalformen versteht, kann man gut auf Wikipedia nachlesen - den Link hat wahsaga ja schon gepostet

Zitat:
Zitat von The Doc
Und was meinst du mit "ein Kreuzprodukt forcieren"?
Wenn Du ein select durchführst und als Quelle 2 Tabellen angibst, dann wird ein Kreuzprodukt dieser beiden Tabellen erstellt, d.h. jede Zeile der einen Tabelle wird *allen* Zeilen der anderen Tabelle zugeordnet. Gibt es also in Tabelle A 10 Zeilen und in B 5 Zeilen, so wird Zeile 1 in A genau diese 5 Zeilen in B zugeordnet, so daß in der entstehenden Tabelle 5 Zeilen stehen. Genauso wird dann mit Zeile 2 Aus Tabelle A verfahren usw. Am Ende kommen also 50 Zeilen heraus. Nun stelle Dir 2 Tabellen mit jeweils ein paar tausend Einträgen vor...

Deshalb ist es sinnvoller, Join-Bedingungen anzugeben, z.B. soll der FK (Foreign Key/Fremdschlüssel) der einen Tabelle gleich dem PK (Primary Key/Primärschlüssel) der zweiten Tabelle sein. Die dabei entstehende Tabelle benutzt also die gegebene Bedingung als "Reißverschluß", um beide Ursprungstabellen miteinander zu verknüpfen. Das Resultat ist sehr viel kleiner.

Egal, wie man es macht - man kommt mit beiden Methoden zum Ziel. Gibt man jedoch keine Bedingung an, kann man evtl. ungewünschte Ergebnisse erhalten. Vor allem aber wird es dann viel langsamer.
Mit Zitat antworten
  #7 (permalink)  
Alt 06.04.2005, 17:35
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 19.01.2005
Beiträge: 1.113
The Doc befindet sich auf einem aufstrebenden Ast
Standard

Danke für den Link und die Tips, werd ich versuchen umzusetzen.

Frage zum Wikipost:
a) 2NF ist, was ich machen sollte, richtig?
b) Sobald man Date oder DateTime benutzt hat man keine 2NF (Date ist nicht atomar)
c) Würde das stimmen (Beispiel)

Tabelle 1
Text - Titel - Id - Tag - Monat - Jahr
Tabelle 2
FremdId - Kategorie - Id - Klicks
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an
Milian Wolff | Markdownify | Typogridder
Mit Zitat antworten
  #8 (permalink)  
Alt 06.04.2005, 21:55
Jan Jan ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 27.02.2005
Beiträge: 172
Jan befindet sich auf einem aufstrebenden Ast
Standard

Hi!

Ich würde das so machen:

Script-Tabelle:

id (Primärschlüssel) | script (Scriptname)

"Klick-Tabelle":

id (Primärschlüssel) | script_id (id aus der Script-Tabelle) | timestamp | user | u.s.w.

Dann würde ich in der Klick-Tabelle einen INDEX auf script_id
setzten. So kannst du die Tabellen wunderbar verknüpfen.
Oder habe ich jetzt etwas falsch verstanden?

Gruß
Jan
Mit Zitat antworten
  #9 (permalink)  
Alt 06.04.2005, 22:21
C2 mediaproduction
neuer user
 
Registriert seit: 04.04.2005
Ort: Leipzig
Beiträge: 62
s0nic befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von The Doc
Frage zum Wikipost:
a) 2NF ist, was ich machen sollte, richtig?
Du sollst alle 3 NF machen. Es kann aber sein, daß Du unbewußt schon die 1. und 3. NF gemacht hast - dann brauchst Du nur noch die Verschläge für die 2.NF umzusetzen.

Zitat:
Zitat von The Doc
b) Sobald man Date oder DateTime benutzt hat man keine 2NF (Date ist nicht atomar)
Nein, das ist so nicht richtig. Wiue oben schon erwähnt, sind die NF nur Vorschläge. Da steht zwar drin, daß Werte atomar sein sollen, aber gerade am Beispiel eines Datums oder eines Preises sieht man doch nur zu gut, daß man es dabei nicht übertrieben sollte. Nach dem Motto: Normalisieren, bis nichts mehr geht, und danach wieder de-normalisieren, bis es sinnvoll ist. Ein Datum gliedert man normalerweise nicht weiter auf (kommt aber auch auf den Einsatzzweck an).

Zitat:
Zitat von The Doc
c) Würde das stimmen (Beispiel)

Tabelle 1
Text - Titel - Id - Tag - Monat - Jahr
Tabelle 2
FremdId - Kategorie - Id - Klicks
Naja anstatt "Tag - Monat - Jahr" dann eben "Datum"...ansonsten kann ich zwar einerseits keinen Fehler sehen, andererseits aber auch nicht so recht den Sinn. Was ist aus den im Eingangsposting erwähnten "Votes" geworden? Welche Tabelle ist nun wofür (Annahme: Tabelle2 => 'Klicks'-Tabelle, Tabelle1 => ???). Die spalte FremdID ist okay, aber ich hätte sie anders (=treffender) benannt...aber das ist ja nu Geschmackssache. Ansonsten steig ich da abern icht ganz durch...so, wie du es machst, gibts ne '1:n'-Beziehung zwischen Tabelle 1 und Tabelle 2. Das heißt also, daß es zu einem Eintrag in Tabelle 1 mehrere Einträge in Tabelle 2 geben kann, wo bei dann jeweils die Kategorie und (wahrscheinlich) die Klickzahl unterschiedlich ist. Waren das Deine Vorstellungen? Dann ist es wohl richtig...

P.S.: IDs würde ich an den Anfang der Tabellen setzen - wegen des Überblicks...
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 06.04.2005, 23:08
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 19.01.2005
Beiträge: 1.113
The Doc befindet sich auf einem aufstrebenden Ast
Standard

Tabelle 1 wäre z.B. eine der Tabellen für Artikel, News, Events, Links etc. (in diesem Falle hab ich einfach nur ein paar Grundspalten gewählt).
Tabelle 2 wäre dann die Tabelle für Klicks, könnte ich ja gleich mit Votes verknüpfen.

Jan, du hast das nicht verstanden, oder? Weil dein vorschlag macht in meinen Augen keinen sinn
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an
Milian Wolff | Markdownify | Typogridder
Mit Zitat antworten
Sponsored Links
Antwort

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mysql: Tabelle Ordnen, nach Integer Werten (timestamp) oder Zeitformaten? braindead Serveradministration und serverseitige Scripte 8 14.03.2007 21:21
Wirklich CSS oder doch lieber eine Tabelle? quarki69 CSS 8 22.02.2007 23:13
Aus-/Einblenden von Zeilen in einer Tabelle mit JavaScript brainstorm1984 Javascript & Ajax 3 02.02.2007 11:25
[MYSQL] Tabelle ohne Primärschlüssel lomtas Serveradministration und serverseitige Scripte 6 24.08.2006 14:23
FF: Tabelle in Tabelle centern wuschba CSS 2 20.07.2006 11:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:21 Uhr.