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 file_revision
speichert die Revisionsnummer, standardmäßig auf 1
, wenn es das erste file_parent
ist das oberste übergeordnetes Element der Revision und standardmäßig auf 0
. file_name
ist der Dateiname. Das Problem:
Alle Hinweise werden sehr geschätzt. Vielen Dank im Voraus.
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.
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 ..
Tags und Links mysql database database-design revision