mysql - 如何正确管理数据库中行的版本?

标签 mysql jakarta-ee database-design versioning

我正在开发一个网络应用程序,我有一个名为“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/

相关文章:

mysql - 在 MySQL 中使用平面列或关系

java - 使用 JSF 编辑 mysql 的单行

python - 在python中使用sqlalchemy对三个表之间的数据库多对多关系建模

java - MySQL 级联删除错误方向的更改(eclipselink 作为 JPA)

mysql - 我想要借助此查询得到一些空结果

php - 当第一个表中的列值与第二个表中的列值匹配时显示一个表中的数据

java - 使用 Ehcache 进行网页缓存

java - 在单元测试中反射(reflection)以检查代码覆盖率

ruby-on-rails - 何时向 user_posts 表添加记录以跟踪 'likes'

sql-server - 单个 SQL Server 命名实例上的多个数据库