Was ist der beste Weg, um ein einfaches Revisionssystem mit MySQL zu erstellen?

8

Ich arbeite gerade an einem einfachen Revisions-System, mit dem ich mehrere Versionen einer einzelnen Datei speichern kann, was bisher funktioniert.

Die Tabellenstruktur ist wie folgt (veraltete Spalten wurden der Kürze halber entfernt):

%Vor%

Wo:

  • file_id ist der Primärschlüssel, der automatisch
  • inkrementiert
  • file_revision speichert die Revisionsnummer, standardmäßig auf 1 , wenn es das erste
  • ist
  • file_parent ist das oberste übergeordnetes Element der Revision und standardmäßig auf 0 .
  • file_name ist der Dateiname.

Das Problem:

  • Vorzugsweise benutze ich nur eine Abfrage, um alle Dateien abzurufen ...
  • Aber nur die letzte Revision jeder Datei ...
  • ... wenn nur eine Revision gespeichert ist (Original), sollte diese abgerufen werden.

Alle Hinweise werden sehr geschätzt. Vielen Dank im Voraus.

    
Aron Rotteveel 12.03.2009, 13:32
quelle

2 Antworten

3

Der effizienteste Weg zum Abruf ist das Hinzufügen einer Spalte wie is_latest, die Sie im Voraus füllen müssen, und dann select * from table where file_id=1 and is_latest=true , wenn Sie die neueste Version von Datei 1 abrufen möchten. Offensichtlich wird dadurch die Tabelle aktualisiert komplizierter jedoch.

Eine andere Möglichkeit wäre, die neuesten Versionen der Dateien in einer Tabelle und historische Versionen in einer anderen Tabelle zu speichern. Wenn Sie vorwiegend alle -Dateien mit der neuesten Version auswählen möchten, kann select * from table where is_latest=true wahrscheinlich zu einem vollständigen Tabellenscan führen, selbst wenn is_latest indiziert ist. Wenn die letzten Zeilen alle in einer Tabelle waren, kann die Datenbank sie alle im sequentiellen IO lesen und muss entweder 1) nicht viele Suchen durch die Tabelle durchführen, um nur die benötigten Datensätze zu finden, oder 2) die gesamte Tabelle scannen, wobei große gelöscht werden Datenmengen auf dem Weg zu den alten Aufzeichnungen.

Wenn Sie das vorhandene Tabellendesign nicht ändern möchten, wählen Sie das gruppenweise Maximum, siehe Artikel für mehrere verschiedene Möglichkeiten, es in MySQL zu tun.

    
ʞɔıu 12.03.2009, 13:38
quelle
1
%Vor%

Ich würde dann Variationen über Abfragen wie folgt machen:

SELECT * WHERE file_revision = 1 ORDER BY Zeitstempel GROUP BY file_revision

Oder eine beliebige Anzahl von Variationen bei dieser Art von Abfrage, dh Limit 1 oder Order by file_id als höchste wird auch die letzte sein, etc ..

    
Andre 27.05.2012 01:56
quelle