这并不像标题中所写的那么简单。
我有一张表,用于将用户帐户绑定在一起。
例如:一个人通过标准网站功能注册。第二天,他通过Facebook帐户注册。
我的user_user
表包含a_user_id
,b_user_id
个字段。这些字段是标准用户表的外键。
我为2个字段制作了唯一的密钥。
但是。如何避免这样的情况:
a_user_id: 1
b_user_id : 2
和下一行:
a_user_id: 2
b_user_id : 1
两行意味着相同。 MySQL能处理这个吗? 对于这种情况,有没有更好的方法?
答案 0 :(得分:0)
引入约束a_user_id < b_user_id
。老实说,直到现在我总是在编程方面保持这种约束,这可以防止循环:自引用和a-b-a。
首先需要对表进行规范化,可能使用MySQL中的临时表。
旧表的规范化:
假设表u2(a_user_id NOT NULL, b_user_id NOT NULL)
:
DELETE FROM u2
WHERE a_user_id = b_user_id;
ALTER TABLE u2 ADD COLUMN other ...;
UPDATE u2
SET
other = a_user_id,
a_user_id = b_user_id,
b_user_id = other
WHERE
a_user_id > b_user_id;
ALTER TABLE u2 REMOVE COLUMN other;
(未经检查的语法)