【发布时间】:2012-06-23 11:20:06
【问题描述】:
假设我有一个名为Users 的表,它代表网站的注册用户。我还有一个AccountActivation 表,它存储发送到新用户电子邮件以验证该电子邮件的随机生成的字符串。
AccountActivation 表有 UserId 列,这也恰好是 Users 表的主键。它还有ActivationCode 列来存储代码。任一列都可以唯一标识AccountActivation 表中的一行。
因此,如果我选择激活码列作为主键,我最终会得到两个具有不同主键的一对一表。我以为在一对一的关系中,两张表必须有相同的主键?
【问题讨论】:
-
如果你选择
ActivationCode作为PK,那么为什么你有两个一对一的关系呢?唯一的关系是AccountActivation.UserId -> Users.UserId- 或者你认为你突然有什么?Users在UserId上有它的 PK,AccountActivation在ActivationCode上有它的 PK - 完全没有问题,没有理由不这样做。 -
很可能,“UserId”和“ActivationCode”都是 AccountActivation 表的候选键。
-
你怎么知道同一个随机生成的字符串不会多次生成,你的应用程序实际上是否要求你强制执行?
标签: sql