1
6
您可能无法在数据库级别执行此操作——您的应用程序代码必须执行此操作。如果您确保您的tbl_朋友记录始终与(lowid,highid)一致,那么典型的pk/唯一索引将解决重复问题。事实上,为了加强这一点,我将把你的tbl_朋友中的列重命名为(i d_low,i d_high)。 你对用户713的查询会是
为了提高效率,您可能需要向前和向后索引它——这是由(id_user,id_friend)和(id_friend,id_user)进行的。 如果你 必须 在DB级别执行此操作,然后在插入之前将参数交换为(低、高)的存储过程将起作用。 |
2
3
您必须使用触发器来强制执行该业务规则。
你可以用一个
…或工会:
|
3
1
好吧,这对列上的一个唯一约束将使您到达一半。我认为最简单的方法是添加一个约束以确保ID_用户<ID_朋友不会得到反向版本。您将需要在插入时补偿这个顺序,但它将使您获得所需的数据库级约束,而不需要复制数据或依赖外键。 对于第二个问题,要查找id=1的所有朋友,可以选择id_user、id_friend from tbl_friend,其中id_user=1或id_friend=1,然后在客户端代码中抛出所有1,而不考虑列。 |
4
0
一种方法是将两个朋友存储在两行中:
看到了吗?插入它们的顺序无关紧要,因为两个朋友都进入了“朋友ID”列。因此,您可以轻松地强制执行唯一性。 您还可以轻松查询713的朋友:
|
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |