【发布时间】: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)
-
不,但请随意回答您自己的问题。