我想在每个数据库表中插入createdBy,modifiedBy,createDate,modifiedDate列以管理用户活动。
这是我第一次尝试这样做。我可以遵循最佳做法吗?任何设计模式都很好管理这个?
我的第一个想法是在我的业务逻辑层中执行此操作,并在每个业务类的插入和更新方法中,我执行以下操作:
class.createDate = DateTime.Now;
或
class.modifiedDate = DateTime.Now;
class.modifiedBy = CurrentUser.Id;
或
class.createdBy = CurrentUser.Id;
还是有更好的方法?
布赖恩
答案 0 :(得分:1)
这取决于您管理的业务对象类型,以及需要创建/修改数据的规则。在大多数情况下,这是一个数据库审计跟踪,业务逻辑层中不需要此信息。在这种情况下,此信息应仅存在于数据库级别。如果您使用的是ORM,则可能意味着无论如何都要将数据保存在您的对象中。如果您正在使用存储过程,那么他们都需要知道如何使用用户名来标记记录。可以通过在列上设置默认值GetDate()来处理日期时间。
答案 1 :(得分:0)
有一点需要考虑的是你想要什么时候盖章?您想要应用程序服务器的时间还是数据库服务器上的时间?我总是去找DB服务器。因此,在这种情况下,存储过程(或SQL语句)应该获得当前时间。
-Krip
答案 2 :(得分:0)
您应该仅在数据库标签处管理CreatedDate
和ModfiedDate
。 CreatedDate的默认值应为Getdate()/SYSDATE
,您无需设置此值。对于ModifiedDate,请在每次更新时再次设置GETDATE()/SYSDATE
。
您只需要将ModifiedBy用户标识从您的应用程序传递到数据库,如果插入设置了该列的userid,并且在更新的情况下仅更新Modified by userId列。
答案 3 :(得分:0)
对于createdBy和modifiedBy,我通常使用当前用户的用户名在我的业务层中设置它。对于createDate和modifiedDate,我在数据库的'after'触发器中执行此操作。