微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL 复合键

如何解决SQL 复合键

我是 sql 新手,这里有一个我还找不到解决方案的问题。

假设我有 PartnerPartner 表。我想要一个 User 的复合键,它是一对 Partner。所以我可以有键 (A,B) 和 (B,A),其中 A 和 B 都是用户。我想让 (A,A) 引用同一个 CREATE TABLE User ( ID int,.... ) PRIMARY KEY (ID); CREATE TABLE Partner ( User1 UserID,User2 UserID ... ) PRIMARY KEY (User1,User2) 实体。这似乎是一个常见问题,但我找不到答案。

好的,更具体地说,

.caixa_botoes{
  width: 60%;
  margin-left: 20%;
}

我想要的是 (User1,User2) 和 (User2,User1) 代表相同的伙伴关系。

解决方法

与其尝试将 (A,B) 和 (B,A) 视为相同,您可以任意决定始终让 A 具有较低的 ID (*),并使用约束对其进行备份;

CREATE TABLE partner (
    a INT NOT NULL,b INT NOT NULL,PRIMARY KEY (a,b),CHECK (a < b),FOREIGN KEY (a) REFERENCES user(id),FOREIGN KEY (b) REFERENCES user(id)
)

(*) 或者更大的 - 这并不重要,只要你保持一致。

,

您有两个选择。一种是确保 (a,b)(b,a) 都在表中。您可以在插入行时使用触发器执行此操作。

第二种是只包含一对中的一个——通常作为一个有序对。

基本上,这取决于您将如何使用该表。第一种方法需要两倍的存储空间,但获取给定用户的所有合作伙伴更简单。

,

如果您想确保两个对都必须包含在表中,那么只需添加另一个约束:

ALTER TABLE Partner ADD FOREIGN KEY (User2,User1) REFERENCES Partner (User1,User2);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。