在数据库的updatedBy字段中使用userID或用户名是否更好?

时间:2012-07-25 05:50:24

标签: mysql database-design symfony doctrine-orm data-modeling

我的几乎所有表格中都有字段,例如createdByupdatedBy。 我认为这仅供参考。

您认为我应该在那里输入用户名或userID。因为如果我需要直接查看数据库,那么可以提供更好的理解,或者这是一种不好的做法。

6 个答案:

答案 0 :(得分:1)

始终使用外键来存储引用记录,即您的案例中的userID。

关于如何存储的方法,这取决于你需要什么。

  

a)如果您想知道谁最后更新了记录。那么你应该   在表格中创建userID列。

存储外键而不是其他记录总是好的,因为这样您就可以关联并获取用户的所有记录。这种方法会有一个限制,因为你只能存储一个用户ID,你只能知道谁最后更新了它。

  

b)如果要存储所有记录,要知道更新了哪个用户   记录和时间,然后你应该存储在一对多   关系表。例如

user_log with columns user_id, update_datetime,也许是一个消息列,告诉用户做了什么。

答案 1 :(得分:0)

用户名。 因为它们比用户名更小更快。

假设您的用户想要更改用户名,那么您将无需更新所有非常有效的表

答案 2 :(得分:0)

始终使用ID来保持规范化的关系数据结构。这将提供更好的性能和更大的可扩展性。如果你可以包含约束,它将使它更清洁。

答案 3 :(得分:0)

并不总是坏事。保护您的申请需求。规范化很好地消除了冗余。然而,如果速度是因素,你可以保持原样。因为加入需要时间。插入数据也意味着插入两个表格。

从本书开始,为了规范化,总是+1,<)>

答案 4 :(得分:0)

使用以后无法更改的内容。通常对于user_id也是如此。

在特殊情况下,您可能希望将名称存储在添加中(以便能够在结婚前显示用户的名称,或者在此之后显示用户的名称被删除了)。但通常情况下,您再次查询数据库中的(当前)名称(也可以轻松缓存)。

答案 5 :(得分:0)

在用户名的情况下,代理键往往是更好的选择。因此,在您的情况下,FK(createdByupdatedBy)将引用代理键(userID)而不是自然键(用户名)。

但是, 意味着代理总是比自然密钥更好:考虑this list of criteria