我正在使用一种产品,几乎每个表都有这些列。作为开发人员,我们经常不得不加入用户表以获取创建记录的 ID,这只是代码中的一团糟。
我正在设计新产品并再次考虑这个问题。一定要这样吗?显然,知道谁创建了记录以及何时创建是很好的。但是有 300 多个表引用相同的 User 表似乎不是很好..
你怎么处理这样的事情?我应该只在 UI 上最可能需要的主要实体上创建 CreatedBy 列,而不是处理加入吗?还是我应该去把它放在任何地方?或者可能有另一个“审计”表,我将所有这些存储在其中并仅根据需要查找(不是每次实体都显示在 UI 上)
我只是担心每个 UI 查询都会遇到用户表的性能方面..
编辑:这将是 SQL Server 2008 R2 数据库
最佳答案
这种方法的问题在于您只知道谁创建了该行以及谁最后更改了该行。如果最后一个更新行的人正在纠正前一个更新者的错误怎么办?
如果您出于合规性或问责制的原因有兴趣进行全面审计,您可能应该查看 SQL Server Audit 。您可以指定要审核的表,可以动态更改这些表而不必弄乱您的架构,并且您可以专门针对这些数据编写查询,而不是将审核逻辑与您的正常应用程序查询逻辑混合(不要介意扩大每个表本身的行)。这也将允许您审计 SELECT
查询,而其他潜在的解决方案(触发器、CDC、变更跟踪——所有这些要么是更多的工作,要么是不完整的用于真正的审计目的)不会让你这样做。
关于sql-server - 表中的审计字段(CreatedBy、UpdatedBy)。这是个好主意吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7366529/