我正在开发一个网络应用程序,我有一个名为“Article”的表格,另一个名为“Section”的表格。 文章由部分组成。我想保存在我的网络应用程序中进行的每次编辑的每个文章版本。
例如,当我编辑一篇文章X时,我想将其版本从1.1增加到2,并保留旧版本的内容用于审计目的。
我建议引入一个名为“Article_Versions”的新表,该表与文章表具有多对一的关系。因此,每篇文章在另一个表中都必须有许多版本,但我想知道这是否不会影响性能,特别是我必须为部分版本引入更多表格等等...
我的问题是:是否有任何“完美”的做法来解决此类问题?
最佳答案
世上很少有完美的事情。性能是使用模式下时间和空间的权衡。设计是性能与使用和实现复杂性之间的权衡。
存在用于记录应用程序关系的表,例如:
VAT(V,A,T) -- version V of artcle A has text T
当您需要时,您可以将其拆分:
current_VAT(V,A,T) the most recent version of Article A is V and has text T
old_VAT(V,A,T) -- version V of article A has text T AND V is not the most recent version of
-- VAT = currrent_VAT UNION old_VAT
-- is_empty(current_VAT EXCEPT old_VAT)
-- FORALL A,cV,cT,cV,cT [current_VAT(cV,A,cT) AND old_VAT(oV,A,oT) IMPLIES cV > oV]
这使得一些查询更快,一些查询更慢。作为基本事实的呈现,它更加复杂。对于某些用途来说它也更复杂,但对于其他用途则不然。
我不清楚您建议使用哪组表格。是的,从文章到版本存在多对一的应用程序关系。但可以表示为:
EXISTS T VAT(V,A,T)
所以您仍然需要全键增值税。 (或同等内容。)
关于mysql - 如何正确管理数据库中行的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845452/