0

如何在数据库端实现事件跟踪?假设我在表中有以下列: UserID, Column1, Column2, Column3 其中 UserID 是主键,而 Column1 具有唯一约束。

假设用户可以在应用程序端更改 Column1、Column2 和 Column3 的值。

进一步假设我需要检测对每一列所做的更改并将它们显示给用户。

我想过做这样的事情:

Table1: EventID (PK), EventDate, UserID, Column1 
Table2: EventID (PK), EventDate, UserID, Column2 
Table3: EventID (PK), EventDate, UserID, Column3 

除了主键之外,上述任何列都没有唯一性验证。这样,每当修改每一列时,我都会将新值插入到相应的表中,并且可以跟踪对该列所做的所有更改,但这意味着我需要放弃对 Column1 的唯一约束。我可以通过获取每个 UserID 的最新 Column1 值并将它们相互比较来检查应用程序层的唯一性。(不知道这有多聪明)

这也意味着我需要为需要跟踪更改的每一列创建一个单独的表。

作为一名非数据库设计专家,我想知道如何以最优雅的方式实现数据库架构,我可以在其中进行事件跟踪。

PS 如果这有帮助,我对使用 SQL Azure 很感兴趣。

4

1 回答 1

0

您不应该只需要一个完整的表来记录应用程序表的每一列的事件。把所有东西都event logs放在一张桌子上。像这样定义它:

EventLogs
    EventID (PK)
    EventDate
    UserID         # remember to add an index
    Field_changed  # format: TableName.FieldName as a string
    # or instead of Field_changed with both in one, you can do:
    Table_changed
    Column_changed

根据您拥有的表/操作/事件的数量以及是否要存储之前/之后的值,您可以将事情分开一点,但它不应该是必需的。

至于跟踪“特定列”,在Updates成功时在应用代码中添加。不确定您打算如何跟踪InsertsDeletes但如果您也想要,请Event_Type在日志表中添加一个(枚举)字段。

于 2012-10-16T17:11:30.907 回答