我对数据库设计有疑问。 我有两个表,usertable和historytable,这是一对多的关系,其中usertable包含
和历史记录
如果历史记录没有定义主键,我不确定在性能方面是否有任何负面影响,如果有,那么历史记录中哪个最佳选项是主键?
感谢。
答案 0 :(得分:2)
您需要定义一个新列:UserHistoryId 将其标识为
原因是其他列的组合在所有情况下都不是唯一的。
e.g。如果一天内为同一个网址的用户创建了两次历史记录。
性能:
取决于历史表的使用方式 - 如果您只是通过对userId,date或Url的查询从中选择数据,那么ID列将没有用处。
但是,如果您在表上执行任何更新/删除操作,那么Id将非常有用。
无论目前的要求如何,现在几乎没有任何费用可以包含额外的列,这是我一直推荐的。
答案 1 :(得分:2)
如果您看不到明显的primay键,那么只需添加一个自动递增的整数/标识列作为主键 - 这几乎适用于任何表。
可能有一些情况有更好的选择,但大多数情况下,自动增量整数字段是主键的一个很好的选择。
事实上,我可能会建议使用自动递增的整数/标识列作为用户表的主键 - 有几种情况(例如已删除的用户),您可能希望有两行具有相同的用户名
答案 2 :(得分:1)
你可以查看this one。虽然这个问题比你的问题更通用,但它可以让你更广泛地了解什么应该是主键。
答案 3 :(得分:0)
我的猜测是历史表可能的关键字(用户名,日期,网址)。但这只是基于属性名称的猜测。您应该根据业务分析和您的要求确定密钥。