Pirx: Zwischenstände speichern / auf Mehrfachnutzer umstellen

Hallo Forum,

ich habe ein kleines PHP-Anwendung mit MySQL-Basis geschrieben. Geht um eine Art Projektverwaltung. Gleich 2 Probleme kommen gerade auf:

1. Es ist der Wunsch nach Einlesen von gespeicherten Zwischenständen aufgekommen. Wie mache ich das ma besten? Meine Idee war jetzt:

  • Nutzer sichert über Button --> Skript (dump) den kompletten Inhalt der DB (.sql wird irgendwo abgelegt und gleichzeitig in einer backup_tbl der Pfad zu der Datei geschrieben)
  • Nutzer will alten Stand einspielen: aktueller Stand wird wie oben gespeichert, dann komplette DB geleert und ausgewählter Zwischenstand eingelesen.

Gibt es irgendwelche Bedenken? Außer, dass ich mich mit dem mysqldump/Shell auseineindersetzen muß.

2. Außerdem sollen mehrere Nutzer mit dem System arbeiten (gleiche Struktur, aber andere - eigene Daten). Ist es da besser alles in den gleichen Tabellen zu regeln, also

//dokumente_tbl
id  nutzer_id  name
--------------------
1   1001      xyz.pdf
2   1001      abc.pdf
3   1002      edf.pdf

oder lieber für jeden Nutzer eine eigene Tabellenstruktur anlegen und diese dann bspw. über dokumente_1001_tbl anzusprechen?

Ich bin gespannt auf eure Meinungen.

Pirx

  1. Hi!

    1. Es ist der Wunsch nach Einlesen von gespeicherten Zwischenständen aufgekommen. Wie mache ich das ma besten? Meine Idee war jetzt:
    • Nutzer sichert über Button --> Skript (dump) den kompletten Inhalt der DB (.sql wird irgendwo abgelegt und gleichzeitig in einer backup_tbl der Pfad zu der Datei geschrieben)
    • Nutzer will alten Stand einspielen: aktueller Stand wird wie oben gespeichert, dann komplette DB geleert und ausgewählter Zwischenstand eingelesen.
      Gibt es irgendwelche Bedenken? Außer, dass ich mich mit dem mysqldump/Shell auseineindersetzen muß.

    Kann man so machen, ist aber quasi ein Medienbruch. Du musst nicht mehr nur mit PHP und MySQL hantieren sondern auch noch mit der Shell, wenn du das darüber machen willst. Du kannst auch in PHP/MySQL bleiben, indem du die Sicherung als weitere Tabelle(n) oder Datenbank(en) anlegst. Das Kopieren von Tabellen kann MySQL mit Bordmitteln und sehr wenig Aufwand erledigen, beispielsweise so:

    CREATE TABLE backup_20090815 SELECT * FROM original

    Das Rückspielen ist auch nicht schwerer:

    DELETE FROM original oder TRUNCATE TABLE original (Die Nebenwirkungen beider Statements dürften dir vermutlich egal sein - vielleicht abgesehen vom auto_increment-Wert.)
    INSERT INTO original SELECT * FROM backup_20090815

    1. Außerdem sollen mehrere Nutzer mit dem System arbeiten (gleiche Struktur, aber andere - eigene Daten). Ist es da besser alles in den gleichen Tabellen zu regeln, also oder lieber für jeden Nutzer eine eigene Tabellenstruktur anlegen und diese dann bspw. über dokumente_1001_tbl anzusprechen?

    Wenn keine Sicherheitsargumente für eine Trennung sprechen, dann ist es üblicherweise besser alles in einer Tabelle zu haben. Die Unterscheidung macht man ja mit entsprechenden Bedingunen in der WHERE-Klausel.

    Lo!

    1. Danke für die Antworten dedlfix.

      Kann man so machen, ist aber quasi ein Medienbruch. Du musst nicht mehr nur mit PHP und MySQL hantieren sondern auch noch mit der Shell, wenn du das darüber machen willst. Du kannst auch in PHP/MySQL bleiben, indem du die Sicherung als weitere Tabelle(n) oder Datenbank(en) anlegst. Das Kopieren von Tabellen kann MySQL mit Bordmitteln und sehr wenig Aufwand erledigen, beispielsweise so:

      CREATE TABLE backup_20090815 SELECT * FROM original

      Das Rückspielen ist auch nicht schwerer:

      DELETE FROM original oder TRUNCATE TABLE original (Die Nebenwirkungen beider Statements dürften dir vermutlich egal sein - vielleicht abgesehen vom auto_increment-Wert.)
      INSERT INTO original SELECT * FROM backup_20090815

      An die Bordmittel habe ich auch schon gedacht, nur hat mich bisher das einzelne kopieren von Tabellen zurückschrecken lassen (Das Projekt hat bisher > 50 Tabellen) aber ist wahrscheinlich der bessere Weg.

      Wenn keine Sicherheitsargumente für eine Trennung sprechen, dann ist es üblicherweise besser alles in einer Tabelle zu haben. Die Unterscheidung macht man ja mit entsprechenden Bedingunen in der WHERE-Klausel.

      Auch da bin ich deiner Meinung. Wenn sich nämlich die Tabellenstruktur ändert, müßte ich die Änderung  x-mal für jeden User machen.
      Gut, dann werde ich das mal angehen und umbauen...