关于如何建模我的mysql架构以在版本控制下存储用户内容的工具或任何指南?类似于svn存储库但不是代码我需要对所有用户对象进行版本控制。就像用户在这个日期2年前拍的照片一样。他有什么设置,等等。是的,我可以在表中存储备份副本,但问题是由于不同类型的对象,涉及数百和数百个表。我现在每天都会拍摄shanpshots,并计划稍后进行每次编辑。所以基本上我想知道svn存储库如何在数据库中存储内容,或者windows如何在某些数据库中存储还原点,以便我可以模仿用户数据的模型。只有我的要求是我需要使用mysql作为主数据库。我认为的方式是:
活动数据和历史数据。活动数据具有当前副本。历史数据按日期/时间编制索引。但是仍然要为每个用户每天维护数百个表数据,这意味着365 x用户数x我需要版本的表行数。我不知道如果在3NF中将它留在mysql中是最好的方法吗?
答案 0 :(得分:0)
您可以简单地将timpstamp字段与每个数据库条目一起使用。然后进行延迟删除而不是删除数据,即具有“已删除”字段,该字段再次可以存储删除的时间戳。这些组合将允许您进行历史查询。
当您从历史快照实现此功能时,您可以根据您看到条目的第一个/最后一个快照估计时间戳,并相应地修改数据库条目。
答案 1 :(得分:0)
版本控制是一个非常重要的问题。它已经以多种方式得到了解决,但正确地重做它并非易事。 Eric Sink撰写了一篇关于他自己的版本控制软件开发的非常好的博客,该软件对复杂性提供了一些了解
您的特定问题将是数据量,因为许多文件都是二进制文件,VC系统无法有效存储,因为它们主要用于处理文本。很快,除非你有一个非常好的差异引擎,你最终会得到太多的数据。
我的建议是专注于将您的软件与某些已经完成了艰苦工作的东西连接起来,例如Subversion,Git,Mercurial或其他一些优秀的源代码控制工具。您可以使用它们作为您的存储库来存储和版本化所有文件,并在顶部构建您的软件以理解所有这些。
要构建高效的版本控制系统,您需要真正了解自己在做什么,为什么不重用专家创建的内容。
如果你仍然坚持自己这样做,你可能会比Eric Sinks Source Control How-To
更糟糕