carsten schlichting: MySQL Tabellenorganisation

Hallo

möchte meine Internetseite auch an eine MySQL Datenbank anschließen bzw eine Buchhaltung mit PHPscripten organisieren, die nur auf einem privaten server läuft. Habe auch schon einiges gelesen aber komm bei der vorbereitenden Planung der ganzen datenbankstruktur momentan nicht weiter, weil ich nicht genau weiß, welche Lösung man sich vorstellen könnte.

Meine Frage ist relativ generell und zwar habe ich das problem, das ich datensätze(zeilen habe), die sehr unterschiedliche Länge haben können. So spalten wie Name, Vorname und so sind natürlich überall ähnlich und stellen kein Problem da. anders ist es aber, wenn es darum geht, die Nummern gemachter Bestellungen in diesen Datensätzen zu notieren. Z. B. werde ich wohl User haben die nur ganz wenige bestellungen machen, aber auch welche die ganz viele tätigen.
Wenn ich jetzt für jede neue Bestellung eine neue Spalte anlege habe ich das Gefühl das sich die Tabelle grundlos aufblähen würde, da die ganzen Spalten ja auch für die User angelegt werden würde, die vielleicht über eine Bestellung nicht hinauskommen.

ist es eventuell in diesem fall sinnvoll, die bestellungen in ein array zu legen, das in der MySQL-datei irgendwie in der Spalte gespeichert wird, ohne das eine neue tabelle angelgt werden würde???
Geht das eventuell als Textdatei?? oder wäre so eine Variante eventuell auch eine fehlerträchtige Lösung, die ein risiko birgt.

Was würdet ihr mir vorschlagen???

Jede bestellung, die bei mir eingeht, wird in einr tabelle abgelegt. Hier steht natürlich auch, welcher User diese getätigt hat. Ich könnte natürlich auch jedesmal, wenn nach einer alten Bestellung des users recherchiert werden soll, alle meine bestellungen durchlaufen, und diesen User ausfindig machen.

wie lange braucht denn PHP/MySQL um eine Tabelle zu durchlaufen. Angenommen ( sehr hochgeschätz--aber man will auch auch skalierbar sein) man hat 100.000 Bestellungen. wie lange würde so ein Durchlauf dauern:

(P:S: diese tabelle steht übrigens nicht im Internet, sondern betrifft eine interen Buchhaltung, die ich auch über PHP-scripte und einem internen server abwickeln will )

vielleicht kann mich ja jemand beraten???

viele grüße und Vielen dank

carsten

  1. Hiho,

    ist es eventuell in diesem fall sinnvoll, die bestellungen in ein array zu legen, das in der MySQL-datei irgendwie in der Spalte gespeichert wird, ohne das eine neue tabelle angelgt werden würde???

    das ist definitiv nicht sinnvoll!

    Jede bestellung, die bei mir eingeht, wird in einr tabelle abgelegt. Hier steht natürlich auch, welcher User diese getätigt hat. Ich könnte natürlich auch jedesmal, wenn nach einer alten Bestellung des users recherchiert werden soll, alle meine bestellungen durchlaufen, und diesen User ausfindig machen.

    genau so ist das auch richtig. Ich hoffe mal, der Nutzer steht da nicht mit Namen, sondern über eine Nutzer-ID drin ... dann wäre eine entsprechende Abfrage kein Problem.

    wie lange braucht denn PHP/MySQL um eine Tabelle zu durchlaufen. Angenommen ( sehr hochgeschätz--aber man will auch auch skalierbar sein) man hat 100.000 Bestellungen. wie lange würde so ein Durchlauf dauern:

    Der "Durchlauf" passiert ja nur datenbankintern. PHP hat damit nix zu schaffen. 100000 Zeilen sollten eigentlich nicht die Hürde sein. Sinnvoll wäre natürlich eine Indizierung ... ich weiss aber nicht, ob das dein RDBMS kann.

    Gruß
    MrWurf

    1. Der "Durchlauf" passiert ja nur datenbankintern. PHP hat damit nix zu schaffen. 100000 Zeilen sollten eigentlich nicht die Hürde sein. Sinnvoll wäre natürlich eine Indizierung ... ich weiss aber nicht, ob das dein RDBMS kann.

      hallo Mr Wurf -- was ist denn ein RDBMS??

      die User haben alle eine ID und ich wollte die Xampp_Installation mit PHP5 benutzen, da in dem Buch, nachdem ich lerne, alle beispiele in PHP 5 geschrieben sind.
      Im PHPAdmin meine ich den Button index gesehen zu haben.

      also grüße und Danke nochmal für die Beratung. Logischer und schlüssiger ist natürlich die 2. variante von mir. hab  aber noch kein gefühl für die dimensionen. Angenommen die datenbank hätte 10 Millionen Einträge und diese wären alle nach einem Index der Reihenfolge nach sortiert. Müßte es doch eigentlich trotzdem total schnell sein den eintrag zu finden, weil die datenbank ja gar nicht von oben nach unten durchlaufen werden müßte--oder?

      kann es sein, dass bei einem sortierten index, die datenbankgröße überhaupt gar keine rolle spielt??

      carsten

      1. Hallo Carsten,

        hallo Mr Wurf -- was ist denn ein RDBMS??

        ein Wikipedia, RDBMS ist ein relationales Datenbankmanagementsystem. MySQL ist ein RDBMS.

        die User haben alle eine ID und ich wollte die Xampp_Installation mit PHP5 benutzen, da in dem Buch, nachdem ich lerne, alle beispiele in PHP 5 geschrieben sind.
        Im PHPAdmin meine ich den Button index gesehen zu haben.

        Ja, MySQL unterstützt Indizes.

        also grüße und Danke nochmal für die Beratung. Logischer und schlüssiger ist natürlich die 2. variante von mir. hab  aber noch kein gefühl für die dimensionen. Angenommen die datenbank hätte 10 Millionen Einträge und diese wären alle nach einem Index der Reihenfolge nach sortiert. Müßte es doch eigentlich trotzdem total schnell sein den eintrag zu finden, weil die datenbank ja gar nicht von oben nach unten durchlaufen werden müßte--oder?

        Ja ist es auch, z.B. bei 10 Millionen Einträgen und einer binären Suche hättest Du einen bestimmten Datensatz nach max. 24 Suchoperationen gefunden.

        kann es sein, dass bei einem sortierten index, die datenbankgröße überhaupt gar keine rolle spielt??

        Nicht keine, aber eine geringe. Für sowas sind Datenbanken da.

        Grundsätzlich solltest Du zumindest die erste Normalform, siehe z.B. Wikipedia, Normalisierung, beachten. Das bedeutet, dass Daten atomar vorliegen, d.h. jede Bestellung, bzw. jeder einzelne Posten einer Bestellung (falls eine Bestellung aus mehreren Posten bestehen kann) stellt einen Datensatz dar.

        Freundliche Grüße

        Vinzenz

        1. Grundsätzlich solltest Du zumindest die erste Normalform, siehe z.B. Wikipedia, Normalisierung, beachten. Das bedeutet, dass Daten atomar vorliegen, d.h. jede Bestellung, bzw. jeder einzelne Posten einer Bestellung (falls eine Bestellung aus mehreren Posten bestehen kann) stellt einen Datensatz dar.

          hallo danke für den aufschlußreichen link.

          man versucht sozusagen,  die datenbankstruktur so anzulegen, dass die innere logik der datenbank erhaltenbleibt.

          wobei ich mir auch überlegt habe, um sicherheiten in die datenbanken einzubauen, ...z.B. dass mir nicht jemand eine zuerledigende überweisung einträgt usw....
          daten absichtlich doppelt anzulegen, dass sowas nicht so einfach möglich wäre!! Und die PHP scripte absichtlich beauftrage, diese doppelten daten zu kontrollieren.

          viele Grüße von mir

          carsten