AW: [MySQL] Viele Datensätze verwalten
wesker_re am 13.06.2005 17:45 schrieb:
@Markus Wollny:
Erstmal Danke für diese tolle Erklärung.
Es ist also nicht sinnvoll eine Tabelle "Spiele" anzulegen und die Einträge per UserID den Besitzern zuzuordnen? Also ohne eine globale Spieleliste aus der man dann wählen kann und diese selbst mitgestaltet. Weil wer garantiert mir dass jeder erstmal in der Liste nachsieht (zumal diese Liste ja bei 0 angefangen werden müsste, da ich auf keine vorhandene Datenbank zurückgreifen kann) oder ein Spiel nicht zum dritten Mal erstellt, nur weil er es vielleicht ein wenig anders schreibt. (Star Wars - Knights Of The Old Republic <-> Star Wars KOTOR als Beispiel)
Da müsste ich ja ständig kontrollieren und korrigieren. Dafür hab ich ehrlich gesagt nicht die Zeit (und auch nicht die Lust)
Andereseits würde nach meiner Methode das Spiel "Half Life" bei 100 Usern vielleicht 80 mal drinstehen - eben weil es soviele haben.
Hmm, jetzt bin ich erstmal ratlos...
Bis die Tage...
wesker_re
Das Problem bei einer völlig freien Eingabe ohne eine globale Spieleliste besteht zum einen darin, dass User selten in der Lage sind, sich auf eine, geschweige denn auf die korrekte Schreibweise zu einigen. Im genannten Beispiel hättest Du dann recht schnell die Spiele Half-Life, Half Life, Halflife, HalfLif, und diverse andere Varianten, die sich allenfalls noch theoretisch mit hohem Aufwand in einer Abfrage zusammenführen lassen - praktisch sind dem Grenzen gesetzt, da die Variationen bei verschiedenen Spielen in völlig verschiedene Richtungen gehen werden (vgl. Driver 3 <-> Driv3r, Grand Theft Auto: San Andreas <-> GTA 4 usw.). Dein Vorschlag, dem User generell die freie Eingabe zu erlauben, würde diesen Umstand also stark verschärfen.
Das Problem, wie Du den Nutzer dazu bringst, zunächst ein Spiel aus der Liste auszuwählen, bevor er selbst ein neues eingibt, lässt sich am ehesten durch geschickte Benutzerführung lösen. Dazu bietest Du eben diese Freitexteingabe im ersten Schritt nicht an, sondern eben zunächst nur die Liste. Erst wenn der User z.B. zum letzten Eintrag der Liste gescrollt hat, aktivierst Du das Feld für die Eingabe eines neuen Spiels. Wichtig wäre zudem, dass Du den Usern schon zum Start eine hinreichend gut bestückte Liste anbietest und nicht vollkommen leer startest.
Letzten Endes bietet die Verknüpfung von Spiele über Int-IDs (zumindest in der Theorie) auch Performance-Vorteile gegenüber alphanumerischen Schlüsseln. Auch das spricht für eine Lösung über eine Verknüpfungstabelle, die lediglich IDs einander zuordnet. Zum einen sind numerische Indizes je nach Datenbanksystem mehr oder wenigstens gleich performant wie alphanumerische, zum anderen ist die Breite der Zuordnungstabelle wesentlich geringer als bei alphanumerischen Schlüsseln - dadurch ist ein sog. sequentieller Scan (also eine direkte Suche über die Tabelle ohne Verwendung von Indizes) deutlich schneller, da die Datenmenge pro Tupel schlichtweg geringer ausfällt.
Schließlich obliegt es Dir als Verwalter der Datenbank, den Signal-Rauschabstand der enthaltenen Informationen möglichst gering zu halten - und das bedeutet hier nun einmal, dass die eigentlichen Sinn-Inhalte kontrolliert werden müssen. Diese Arbeit sollte sich jedoch nach einem anfänglichen Run ziemlich in Grenzen halten, schließlich kommen pro Monat nicht gerade tausende neuer Spiele heraus. Wenn Du Dein "Admin-Interface" entsprechend komfortabel gestaltest, ist das Kontrollieren und ggf. Umleiten der neu hinzugekommen Einträge eine Sache von wenigen Minuten pro Woche. Sobald Du userdefinierte Informationen strukturiert organisieren möchtest (also anders als simple Prosa in z.B. Forenpostings), kommst Du um so einen Schritt letztendlich nicht herum, denn wenn Du es zulässt, dass sich in Deinem System im Laufe der Zeit erst einmal genug "Müll" angesammelt hat, verliert damit die gesamte Datenbank deutlich an Informationswert.