如何最小化数据库表中审计列的存储影响(字节)?

时间:2017-08-17 14:24:51

标签: sql-server database azure data-modeling

我是一名高级数据库开发人员,他总是在大多数数据库表上创建四个审计列,如果不是全部的话,如下所示:

  • DATE_INSERTED
  • USER_INSERTED
  • 日期date_updated
  • USER_UPDATED

我希望获取此信息的原因是不遵守某些外部审计要求,如Sarbanes Oxley。当要求开发人员调查数据库中的某些数据方案时,它只是为了进行故障排除,并且知道最初插入某些记录的人员以及何时,以及谁最后更新它以及何时更新,都有助于故障排除工作。需要存储曾经存在的那个记录的每个版本/状态可能是过度的,但在某些情况下可能会有用。

我是Azure SQL数据库(主要是SQL Server)及其内存优化表(内存表)的新手,我计划实施这些表。您可以在数据库范围内存储在内存中的字节数是有限的,因此我非常清楚地限制了我放入内存的字节数,特别是对于大型表。好吧,如果我将它们添加到大型内存表中,这四个审计列会占用大量内存中的字节,我很乐意避免这种情况。永远不会在应用程序代码或报告中查询或显示这些审核列,但它们可能会由列默认值,触发器和应用程序代码组合填充。

我的问题是,是否有一个良好的数据建模策略来保持这四列内存不足,同时将表的其余部分保留在内存中?最糟糕的情况似乎是创建主内存表,然后创建一个单独的磁盘表,其中包含4个审计列和一个指向内存表的UNIQUE FOREIGN KEY列(从而创建1到 - 1 FK而不是1对多)。但我希望有一种更优雅的方法来实现这种内存/磁盘分割,或许可以利用我无法找到的一些SQL Server功能。作为奖励,如果主表和审计列作为SQL的单个表显示而不必实现数据库视图,那就不错了。

提前感谢任何建议!

0 个答案:

没有答案