mysql - 重新设计我的数据库

标签 mysql database-design versioning

在一个旧的网络应用程序上,我有一个具有以下结构的表:
工具(id、名称、缩写、宽度、高度、功率、类型)

问题是我需要为工具添加历史记录支持。工作场景是每个工具的细节都可以修改,我需要跟踪更改。例如,如果我需要查看过去某个日期的某个工具的详细信息,我该怎么做?

数据库必须是什么样子?

最佳答案

我会保留相同的表,但添加一个 dateEffective 字段,然后每次工具更改时创建一个新行。然后,在查询表时,您可以使用以下命令获取给定日期的工具版本:

SELECT * FROM tools WHERE id=@id AND dateEffective<@thisDate ORDER BY dateEffective DESC LIMIT (0,1)

编辑您可能希望创建另一个名为toolVersionId的字段作为主键。

编辑2作为对您的评论的回应,怎么样:

SELECT *
FROM tools t1
WHERE toolVersionId IN (SELECT toolVersionId
                        FROM tools t2
                        WHERE t2.id = t1.id
                        ORDER BY t2.dateEffective DESC
                        LIMIT (0,1)
                       );

关于mysql - 重新设计我的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717506/

相关文章:

php - 如何检查PHP中数据库中是否存在数据? (多种的)

mongodb - 如何在 MongoDB 中使用文档和集合之间的关系

mysql - 表设计: Type_id column or boolean column

xml - AndroidManifest.xml 文件 <manifest> versionCode 属性

php - 如何缓存需要很长时间才能生成的报告或网页?

php - Mysql ORDER BY COUNT(* ) 获取最旧的行

php - 我应该将更新的计数作为用户表的一部分吗?

java - 在 SBT 中,可以自动命名私有(private)包吗?

java - 多组件版本控制/构建最佳实践

mysql - 在 datetime 数据类型中插入 NOW() 值返回 0000-00-00 00 :00:00