假设我有两列,列A和列B.列A是必需的,列B是可选的。如果指定了B列,我想确保在其自己的行之外的B列(简单)或A列(看起来更难)中找不到它的值。同样,如果更改了A列,我想确保在其自己的行之外的B列或A列中找不到新值。
到目前为止,我得到的最接近的是排除约束,但似乎无法将B列与A列进行比较。这可能在应用层之外,还是我坚持使用应用层解决方案?
用例是我想要以下内容:
这让我知道,例如,如果用户使用他们的电子邮件地址登录,我知道他们的用户名是什么。但我也希望用户能够使用电子邮件地址作为用户名。更令人困惑的是,我希望用户能够将一个电子邮件地址指定为用户名,并将单独的电子邮件地址指定为存档的电子邮件地址。
任何指针?
答案 0 :(得分:2)
我认为你应该有users
的一个表。这应该具有唯一的,自动递增的用户ID。您应该有另一个logins
表。这将有如下列:
此表在name
上有唯一约束。此外,它对UserId和LoginType具有唯一约束,以确保任何给定用户的每个最多一个值。例如,您可以添加其他约束以确保电子邮件看起来像电子邮件。
如果您想要一个与UserId
相关联的单独电子邮件用于联系目的,您可以将其放在Users
表中。
关键想法:将登录的混乱概念移到数据库中的单独实体(表)。