跟踪更改历史记录的数据库结构

epo*_*olf 9 database-design ruby-on-rails

我正在从事项目管理系统的数据库设计作为个人项目,我遇到了麻烦.

我想实现票务系统,我希望票证看起来像Trac中票证.我会用什么结构来复制这个系统?(我在任何系统上都没有成功安装trac所以我真的看不到它在做什么)

注意:我试图在任何版本存储或显示票证都没有意义.我只需要一个变化的历史.我不想存储额外的数据.另外,我在文本字段中使用序列化数组实现了这样的功能.我不想再将其作为解决方案来实现.

编辑:我只关注数据库结构.触发器/回调不是真正的问题.

Guy*_*uck 15

我使用"瘦"设计实现了纯记录更改数据:

RecordID  Table  Column  OldValue  NewValue
--------  -----  ------  --------  --------
Run Code Online (Sandbox Code Playgroud)

您可能不想使用"表格"和"列",而是使用"对象"和"属性"等,具体取决于您的设计.

这具有灵活性和简单性的优点,但是以查询速度为代价 - "表"和"列"列上的聚簇索引可以加速查询和过滤.但是,如果您要在桌面或对象级别频繁地在线查看更改日志,您可能希望设计更平坦的内容.

编辑:有几个人正确地指出,使用这个解决方案,你无法将变更集合在一起.我在上面的表中忘了这一点 - 我使用的实现还有一个带有日期时间,用户和其他信息的"Transaction"表,以及一个"TransactionID"列,所以设计看起来像这样:

CHANGE LOG TABLE:
RecordID  Table  Column  OldValue  NewValue  TransactionID
--------  -----  ------  --------  --------  -------------

TRANSACTION LOG TABLE:
TransactionID  UserID  TransactionDate
-------------  ------  ---------------
Run Code Online (Sandbox Code Playgroud)