Markus Trusk: mySQL/Perl: Frage zur Umsetzung...

Hola,
Ich will eine Datenbankanwedung schreiben, bei der sich Benutzer mit Vorname, Nachname, Nickname, Email, ICQ usw registrieren können. (8 Kategorien, die man insgesamt eintragen kann)

Wenn man registriert ist, kann man Dinge eintragen (so eine Art Tauschbörse, damit jeder sehen kann, was man anzubieten hat). Insgesamt sind es hier 6 verschiedene Punkte, die man eintragen kann, bei denen jeder Benutzer mit einer Suche nach 4 Kriterien davon suchen können soll. (Also zB sortiert nach Punkt1,. sortiert nach Punkt2, usw).

Wie könnte ich das Problem am Besten angehen?
Ich hätte es mir so vorgestellt:

Bei jeder Registrierung wird eine neue Tabelle erstellt, die nach dem Nicknamen (der natürlich nur einmal vorkommt) benannt ist. Dort werden dann all diese Werte eingetragen.

Meine Fragen wären: Wieviele Tabellen kann/darf eine Datenbank erfassen/erzeugen?
wenn ich es so mache, wie oben beschrieben, wie kann ich mit Perl die verschiedenen Tabellennamen erfassen, oder soll ich vielleicht eine "Indextabelle" zusätzlich erstellen lassen, in der alle Tabellenamen gespeichert sind, und ich diese Werte dann nur auslesen muss? Ich kann zwar von einer Tabelle auslesen zB so:

my $auslesen = $dbh->prepare("SELECT * FROM tabellenname") or die "Cant auslesen : $!\n";
$auslesen->execute;
while (my($vorname,$nachname,$erstellungsdatum) = $auslesen->fetchrow_array)    {
print "Vorname:$vorname Nachname:$nachname Unixtimestamp:$erstellungsdatum\n";
}

aber wenn ich mir vorstelle, dass ich bei "tabellenname" eine Variable einsetze, und diese jeweils mit dem Wert des nächsten Tabellennamens in meiner "Indextabelle" belege, könnte ich mir vorstellen, dass die Prozedur nicht besonders effizient ist, vor allem wüsste ich nicht, wie ich die Ausgabe aplhabetisch sortiert ausgeben könnte, da zwischen den einzelnen Tabellen ja kein Bezug ist, zumindest so wie ich mir das vorstelle. Überhaupt werden sicher über 100 Leute registriert sein, also glaube ich kaum, dass dies die Lösung wäre, aber wie kann ich so etwas am Besten realisieren?

Markus Trusk.

  1. Hallo,

    sowas gibt es schon und nennt sich "Kazaa".
    Ist allerdings verboten.

    1. sowas gibt es schon und nennt sich "Kazaa".

      Das hat überhaupt nichts damit zu tun! So ein Mist interessiert mich nicht!
      Es soll so etaws werden, wie hier: http://www.swtek.net/new/index2.htm

      Markus Trusk.

      1. hmm,

        dann kann ich dir nur empfehlen ein datenbank tutorial/howto durchzulesen, dort wird erklärt wie man was am besten strickt.

        vor allen dingen musst du dir darüber klar werden, welche aktion sehr oft ausgeführt werden + welche aktionen viel aufwand kosten. demnach musst du deine DB dann stricken.

        bspl: wenn eine aktion nicht oft benutzt wird, aber viel aufwand kostet, dann ist das relativ egal (da sie ja nicht oft benutzt wird ;-))

        hoffe ich habe mich einigermassen klar ausgedrückt.

        1. Hi,

          dann kann ich dir nur empfehlen ein datenbank tutorial/howto durchzulesen,
          dort wird erklärt wie man was am besten strickt.

          Hast du vielleicht einige nützliche Links?
          Ich weiß, was du meinst und ich finde, dass dies eigentlich der schwierigste Teil ist.
          Am meisten wird die Suche nach den 6 Kategorieren beansprucht. Die Benutzereingaben wie ICQ, Name usw sind unwichtig, zumal man nicht mal explizit danach suchen können soll. Es ist nur zusätzliche Info, die dabei steht.
          Wenn ich es mir nochmal überlege, könnte ich es vielleicht so machen.
          Die "Haupttabelle", die die 6 Kategorieren enthält, sowie eine 7. die den Usernamen enthält. So können effizient die Daten an die Ausgabe gesendet werden, und bei Interesse (Klick auf eine der Ausgabe) kann man dann die genaueren Infos sehen wie ICQ, Vorname, Nachname (indem ich eine 2. "Indextabelle" habe, wo alle Username mit den entprechende zusätzlichen Infos gespeichert sind). Somit bräuchte ich nur 2 Tabellen, wenn mein Gedankengang richtig ist.

          Markus Trusk.

          1. also, hmm links habe ich leider keine parat kannst aber mal unter google nach "entity relationship" suchen, da gibts auch programme mit denen kannst du dass dann riiiiiicchtig professionell erstellen.

            hab ich aber noch nie gebraucht, habs immer nach gefühl gebastelt.

            keine frage, du brauchstn table der dir als index dient, also wo du deine user speicherst. über den usernamen kannst du dann noch andere table anlegen zb. user_$username_files, da ja auch die userid unique sein muss, weil sonst. . .du weisst schon.

            hmm, ein grosser table für alle files rentiert sich meiner meinung nach nicht, weil der nicht so wirklich pflegbar ist.

            weiterhin würde ich dir raten, mit temporären tables zu arbeiten, da die suchergebnisse sehr gross werden können, wenn jemand zum beispiel nur nach "a" sucht oder nach ".doc". kommt halt drauf an wieviel die user zu sharen haben.

            ausserdem kommst du mit den temporären tables nicht in die verlegenheit, wenn das suchergebnis gross ist und du nur 10 ergebnisse auf der webseite immer anzeigen willst, dass du, wenn user auf next klickt neu suchen musst, sondern kannst einfach die nächsten 10 results aus deinem temp table rausholen. schätze mal dass dein system auch auf login basiert (logisch) dann kannst du die tables, wenn der user sich ausloggt, einfach wieder löschen

            soweit so schlecht ;-)

            1. Danke für die Tipps. Nun, ich bin leider noch nicht so erfahren mit Datenbanken, aber ich werde mir die Ideen auf jeden Fall genau durch den Kopf gehen lassen.

              Markus Trusk.

              1. |Nun, ich bin leider noch nicht so erfahren mit Datenbanken

                macht nix ;-) jeder fängt mal an. worum ich dich aber noch mal bitten möchte, mach dich noch mal über "sql injection" schlau, sowie die verwendung des cgi moduls mit post_max

                dann bist du eigentlich schon im trockenen

              2. Hi Markus,

                Danke für die Tipps. Nun, ich bin leider noch nicht so erfahren mit Datenbanken, aber ich werde mir die Ideen auf jeden Fall genau durch den Kopf gehen lassen.

                Für den Einstieg empfehle ich MySQL http://www.mysql.de/

                Weil:

                • ist einfach zu installieren (LINUX, Windof),
                • ist sehr ausführlich dokumentiert, auch in deutsch,
                • hat ein Controlcenter was die DB sehr anschaulich macht,
                • kostnix ;-)

                Meine erste Webanwendung die an MySQL angebunden ist, ist die PerlBase: http://perlbase.xwolf.de/, in "About" liegt eine kleine Doku welche den inneren Aufbau beschreibt.

                Gruss, Rolf

                --
                SELFforum - Das Tor zur Welt!
                Theoretiker: Wie kommt das Kupfer in die Leitung?
                Praktiker: Wie kommt der Strom in die Leitung?
                1. Hallo,
                  Ich habe es bereits aufgegeben, auf Windows eine Datenbank installieren zu versuchen. Zum Einen kommt der DB Server nie durch die Firewall, aus welchen Gründen auch immer (die Firewall fragt mich in diesem Fall nicht mal, ob ich diese neue Verbindung freigeben will oder nicht, wie sie es bei anderen Programmen tut), und wenn ich dann mit einem Perl Script versuche in diese DB einzulesen (wenn die Firewall unten ist), funktioniert das auch nicht, weil ich ODBC Treiber brauche usw usw, und wie kann ich wissen, was ich alles bei Windows einstelen muss, bis das Ganze endlich funktioniert? Ich habe hier zwar nützliche Vorschläge bekommen (irgendwas mit bei den Diensten von XP herumstellen), aber im Endeffekt habe ich es dann aufgegeben, weil es irgendwie aussichtlos war.
                  Immerhin hat phpmyadmin funktioniert, aber das bringt mir leider wenig, wenn ich nicht mit einem Perlscript auf die DB zugreifen kann. Es lag offensichtlich irgendwie nur an den Treibern, aber mit der Firewall unten will ich ehrlich gesagt auch nicht arbeiten. Da ist es effizienter, wenn ich die Daten immer auf meinen Webspace lade, um dort zu testen.

                  Markus Trusk.

  2. use Mosche;

    Ich will eine Datenbankanwedung schreiben, bei der sich Benutzer mit Vorname, Nachname, Nickname, Email, ICQ usw registrieren können. (8 Kategorien, die man insgesamt eintragen kann)

    Bei jeder Registrierung wird eine neue Tabelle erstellt, die nach dem Nicknamen (der natürlich nur einmal vorkommt) benannt ist. Dort werden dann all diese Werte eingetragen.

    Das ist ein verdammt schlechtes Design.
    Arbeite anders:

    Statt mit neuen Attributen (Spalten) zu arbeiten, nimm einfach ein neues Tupel (Zeile):

    usr_login, attr_id, attr_wert
    So kannst du jedem User zu jeder beliebigen Anzahl an Attributen die Werte zuweisen. Dann sparst du dir das Tabellen anlegen usw.

    use Tschoe qw(Matti);

    --
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.