我正在创建一个涉及朋友系统的应用程序,例如Facebook中的系统。我在SQL数据库中构建它的方式是拥有一个朋友表,该表具有ID, accountID1, accountID2
列,以便记录友谊中涉及的两个帐户中的每一个。问题是友谊可以用两种不同的方式来记录,例如:
ID | accountID1 | accountID2
1 | 1 | 2
2 | 2 | 1
如果我使组合唯一,它不能防止这种情况发生。如何在 MySQL 中创建约束以防止友谊以两种不同的方式存在以确保数据完整性?或者是否有其他方法来存储此信息以首先防止此类问题?
我使用的最终解决方案是首先去掉 friends 表的 ID,并从两个帐户 ID 的PrimaryKey(accountID0, accountID1)
中制作一个复合主键。这确保了它们的组合是唯一的。然后我创建了一个"插入之前触发器"来切换值,以便较小的 accountID 始终处于accountID0
中。这种方法效果很好,到目前为止没有任何问题。