Il est beaucoup plus facile de stocker chaque enregistrement dans son intégralité que d'en stocker les différences. Ensuite, si vous voulez un diff de deux révisions, vous pouvez en générer un au besoin en utilisant le PECL Text_Diff
bibliothèque
.
J'aime stocker toutes les versions de l'enregistrement dans une seule table et récupérer la plus récente avec MAX(revision)
, un attribut booléen "actuel", ou similaire. D'autres préfèrent dénormaliser et avoir une table miroir qui contient les révisions non courantes.
Si vous stockez des diffs à la place, votre schéma et vos algorithmes deviennent beaucoup plus complexes. Vous devez ensuite stocker au moins une révision "complète" et plusieurs versions "diff", et reconstruire une version complète à partir d'un ensemble de diffs chaque fois que vous avez besoin d'une version complète. (C'est ainsi que SVN stocke les choses. Git stocke une copie complète de chaque révision, pas des diffs.)
Le temps du programmeur coûte cher, mais l'espace disque est généralement bon marché. Veuillez considérer si le stockage de chaque révision dans son intégralité est vraiment un problème.