在一个旧的网络应用程序上,我有一个具有以下结构的表:
工具(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/