我正在从事项目管理系统的数据库设计作为个人项目,并且我已经陷入困境.
我想实现一个票系统,我想要的票看起来像tickets in Trac.我用什么结构来复制这个系统? (我没有成功安装任何我的系统的trac,所以我真的看不到它在做什么)
注意:尝试以任何版本存储或显示机票时,我并不感兴趣.我只需要一个变化的历史.我不想存储额外的数据.此外,我已经在文本字段中使用序列化数组实现了这样的功能.我不想再把它当作一个解决方案.
编辑:我只在寻找数据库结构.触发器/回调并不是一个问题.
解决方法
我使用“薄”设计实现了纯记录变更数据:
RecordID Table Column OldValue NewValue -------- ----- ------ -------- --------
您可能不想使用“表”和“列”,而是“对象”和“属性”等,具体取决于您的设计.
这具有灵活性和简单性的优点,以查询速度为代价 – “表”和“列”列上的集群索引可以加快查询和过滤.但是,如果要在表或对象级别频繁地查看更改日志,您可能需要设计更平坦的东西.
编辑:有几个人正确地指出,用这个解决方案,你不能把一个变化集合在一起.我在上表中忘记了这一点 – 我使用的实现方式还有一个包含datetime,user和其他信息的“Transaction”表,还有一个“TransactionID”列,所以设计如下所示:
CHANGE LOG TABLE: RecordID Table Column OldValue NewValue TransactionID -------- ----- ------ -------- -------- ------------- TRANSACTION LOG TABLE: TransactionID UserID TransactionDate ------------- ------ ---------------