在SQL审计列中存储UserId而不是Username的优点,例如CreatedBy / ModifiedBy

时间:2016-02-15 16:50:49

标签: c# sql asp.net sql-server asp.net-mvc

我一直想知道为什么在大多数示例/教程中,每个人都将用户的名称存储在审核数据库列中,例如CreatedBy / ModifiedBy

在我的脑海中,我一直想知道,如果我正在构建的系统将允许用户改变他们的用户名,如果不采用该怎么办。

在这种情况下,我不想存储用户的ID吗?

我真的不希望这是一个基于意见的问题。所以我期望的答案是将用户的名称存储在审计列中的情况很好,并且将用户的ID存储在审计列中的情况很好。

1 个答案:

答案 0 :(得分:5)

这不是一个基于意见的问题。但是,请考虑使用UserID时会发生什么。下一个合乎逻辑的结论是为用户表创建一个外键。现在,如果用户拥有审计行,则无法删除该用户。

好吧没什么大不了的。跳过外键并放入没有外键的UserID。现在,如果删除用户行,审计信息有用吗?特别是如果您的身份或uniqueidentifier作为您的UserID。该值现在完全没用,因为要从中获取任何值,您必须加入到用户表中。

现在,为什么大多数时候你会看到UserName而不是UserID?