【问题标题】:MS DateTime only LOG table仅 MS DateTime LOG 表
【发布时间】:2012-08-04 10:58:02
【问题描述】:

我正在创建一个数据库来存储用户信息,并且需要记录对用户所做的更改。

这最终会导致某种“时间线”,因此日期/时间因素至关重要。

对于这个问题,我将使用以下示例:

#ID - int
memName - string
memBio - string
memStatusString - string

现在,我的想法是将其链接到这样的表格:

ID - int
#memID - int
dateNameChanged - DateTime
dateBioChanged - DateTime
dateStatusStringChanged - DateTime

这是记录信息的好方法吗?我想在另一张桌子上做,以便以后轻松列出。

另外,我从不将日志记录放在同一个表中,因为日志日期只会在更改之后出现。如果用户从不改变,那只会浪费空间。

总结;

有没有更好的方法来做到这一点?

更新:对于信息的缺失,我深表歉意。 我用的是SQL Server 2008,asp net c# 3.5 - 4(只做数据库结构atm)。

另外,一个成员会有不同的表,例如 tblMemberInformation、tblClanInformation、tblMemberGameRank

每个表中的每个 CHANGED 数据(只是为了确认)都需要存储到一个日志文件中,并带有相应的日期。

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?
  • 您只想在发生变化时记录?不是更改后的值(即bioChangedFrom)?
  • 它需要记录更改的项目,以及它从 -> 更改为的内容。这是为了 [user changed name to derp] - 2012 年 5 月 3 日

标签: sql-server database datetime


【解决方案1】:

您尚未指定您使用的 SQL Server 版本,因此我将假定为最新版本。

SQL Server 2008+ 已内置audit:

审核 SQL Server 数据库引擎的实例或单个数据库涉及跟踪和记录数据库引擎上发生的事件。 SQL Server 审计允许您创建服务器审计,其中可以包含服务器级事件的服务器审计规范和数据库级事件的数据库审计规范。审核的事件可以写入事件日志或审核文件。

【讨论】:

  • 感谢您的信息,但据我所知,审核功能仅适用于数据库,而不适用于单个表。此外,我只需要跟踪选择更改,而不是所有内容。 :D
  • @NewAmbition - 我相信你错了。您可以指定要审核的表。见here。
  • 可以看到 Audit 函数的进程。谢谢你。我不是 DBA,直到现在我才听说过审计功能(再次感谢),但我看到它会写入光盘上的单独审计文件......这不会花费更长的时间来读/写吗?我从编程时代就学会了只真正读/写数据库。
  • @NewAmbition - 所有数据库都必须将数据存储在某处,对吗?我只是说最后,即使使用数据库,数据最终也会在磁盘上。
  • 感谢您的建议 :D 我绝不会试图辩论您的答案(我没有理由这样做),但正如我所说,我想使用尽可能少的空间,尽可能快的过程。我想在第一次就做到这一点(比穿针更难),所以我需要加倍确保一切都很好:)
【解决方案2】:

SQL 审计确实允许您审计对特定对象的特定操作。例如,您可以仅在一张表上审核 UPDATE。见http://www.ultimatewindowssecurity.com/sqlserver/auditpolicy/auditactiongroups/database-level_audit_actions.aspx。我意识到 SQL 审计可能不适合这种需求,但这就是它的能力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多