我不知道该怎么回答这个问题,所以如果听起来很奇怪的话,我很抱歉。
我的数据库中有一个表叫做 friendRequests
包含以下列: id
, sender_id
, recipient_id
,和 status
. 如何确保其他行没有重复 recipient_id
以及 sender_id
价值观?
例如,如果表中有一行具有以下值: (1, 4, 6, 0)
,如何确保其他行没有 sender_id
4和a的 recipient_id
其他行都没有 sender_id
六加一 recipient_id
四分之一?
3条答案
按热度按时间ogsagwnx1#
我所听到的是,如果用户a邀请用户b,你不想为用户b创建一个新的记录来邀请用户a。
我认为不可能强制这样的约束,除非可能通过使用触发器,我可能不建议这样做。我建议您在应用程序中尝试并强制执行此操作。
aiazj4mn2#
必须在表上创建唯一索引。
bcs8qyzn3#
为了
same relations
-在上使用唯一约束<sender, receiver>
.逆关系
<receiver, sender>
但是,这是可能的,因为唯一键约束的ID不同。要处理这个问题(使用uniqe键约束),必须添加另一列,我们称之为
friendship
-在这里,您将添加一个唯一键约束,并插入用户ID,这些ID是串联的,但顺序如下:i、 e.如果用户
3
向发送好友请求10
,您将插入3-10
转到那个专栏。如果邀请来自10
至3
,您将添加3-10
也。这样,你就可以知道是谁发起了友谊(
sender_column=3
,receiver-column=10
)但同时也要确保没有倒退(friendship=3-10
已存在)所以有点像
如果已经请求了友谊,这两个约束中的一个将避免插入(实际上,第二个约束对任何情况都是足够的,前两列只允许确定友谊的主动和被动部分。)