【问题标题】:SQL - Make sure a column is unique over multiple rows?SQL - 确保一列在多行中是唯一的?
【发布时间】:2021-03-19 07:16:51
【问题描述】:

我在 MySQL 中有一个表,它代表一个用户,应该能够向他的帐户添加最多三个电话号码。所以当然没有电话号码,已经存在的应该可以再次注册。我使所有三列都是唯一的,但问题是,您仍然可以输入一个数字作为第 2 个数字,而其他人输入的第一个数字是他的第一个数字。所以我想知道,如果有一个 SQL 可能性来确保一个行与其他行也是唯一的,或者我需要通过查询来解决这个问题,如果已经以编程方式存在一个具有这个数字的成员。

MemberID Main number Number 2 Number 3
1 123 456 789
2 456 123 567

所以这个例子应该被禁止。

【问题讨论】:

  • 规范化您的架构。例如:member_id、number_attribute、number_value(尽管成员永远不能共享数字似乎很奇怪)
  • 作为缓解措施,您可以根据 CHECK 约束创建,例如 CHECK (!(x1=x2 OR x1=x3 OR x2=x3))。但归一化是首选。
  • @Strawberry 我认为您的评论是最好的解决方案。您想将其发布为答案吗? (也许可以为那些对数据库没有经验的人解释一下。我理解你,但我也有一门关于数据库的课程。:D)
  • 不,但请随意回答您自己的问题。

标签: mysql unique rows


【解决方案1】:

因此,Strawberry 认为最好的解决方案是规范化表格。由于每个成员都是 1 到 n 个数字,因此这些数字应该是一个自己的实体。

最终的解决方案是从成员表中删除数字字段并创建一个新表,如下所示:

Member_Id (Foreign Key) Priority Number
1 1 234
... ... ...

然后对数字列的唯一约束确保两个成员不使用任何数字。

【讨论】:

  • ...甚至同一用户两次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2011-11-17
  • 2012-04-26
相关资源
最近更新 更多