我正在从事项目管理系统的数据库设计作为个人项目,我遇到了麻烦.
我想实现票务系统,我希望票证看起来像Trac中的票证.我会用什么结构来复制这个系统?(我在任何系统上都没有成功安装trac所以我真的看不到它在做什么)
注意:我试图在任何版本存储或显示票证都没有意义.我只需要一个变化的历史.我不想存储额外的数据.另外,我在文本字段中使用序列化数组实现了这样的功能.我不想再将其作为解决方案来实现.
编辑:我只关注数据库结构.触发器/回调不是真正的问题.
我使用"瘦"设计实现了纯记录更改数据:
RecordID Table Column OldValue NewValue -------- ----- ------ -------- --------
您可能不想使用"表格"和"列",而是使用"对象"和"属性"等,具体取决于您的设计.
这具有灵活性和简单性的优点,但是以查询速度为代价 - "表"和"列"列上的聚簇索引可以加速查询和过滤.但是,如果您要在桌面或对象级别频繁地在线查看更改日志,您可能希望设计更平坦的内容.
编辑:有几个人正确地指出,使用这个解决方案,你无法将变更集合在一起.我在上面的表中忘了这一点 - 我使用的实现还有一个带有日期时间,用户和其他信息的"Transaction"表,以及一个"TransactionID"列,所以设计看起来像这样:
CHANGE LOG TABLE: RecordID Table Column OldValue NewValue TransactionID -------- ----- ------ -------- -------- ------------- TRANSACTION LOG TABLE: TransactionID UserID TransactionDate ------------- ------ ---------------