在PHP中处理多对多关系的最佳方式MySQL

问题描述:

我正在寻找处理PHP和MySQL中多对多关系数据库的最佳方法。在PHP中处理多对多关系的最佳方式MySQL

现在,我有2个表:

用户(ID,USER_NAME,名字,姓氏)
连接(ID_1,ID_2)

Userid是自动递增添加和user_name是独特的,但可以改变。不幸的是,我无法控制user_name及其改变的能力,但我必须对其进行解释。

Connections表显然是user1和user2的id。

连接表需要考虑到这些可能的关系:

user1 --> user2 (user 1 friends with user 2 but not user2 friends with user1) 
user2 --> user1 (user 2 friends with user 1 but not user1 friends with user2) 
user1 <--> user2 (user 1 and user 2 mutually friends) 
user1 <-!-> user2 (user 1 and user 2 not friends) 

那部分是没有问题的,我用的时候,如果他们分批改变是保持这些关系唯一遇到的问题。

可能的解决方案1:删除用户1的所有关系,并用更新后的列表读取它们。我认为这可能对我的需求来说太慢了。

解决方案2?其他人遇到这个问题?我该如何最好地处理这个问题?

更新:显着的关系:

我处理这样的关系:

user1, user2 
user1, user3 
user2, user1 
在例如以下

是正确的:只有
USER1如下用户2和用户3
user2的如下USER1,但没有按” t follow follow3
user3不遵循用户1或用户2

+0

不确定这是否与您的问题有关,但如果您的Connections表中唯一的内容是两个用户标识,那么您如何区分不同类型的关系? – Ender 2010-04-27 18:51:00

+0

@版,我更新了问题并回答了你的问题。 – Jayrox 2010-04-27 20:34:47

+0

http://en.wikipedia.org/wiki/Associative_Entities – racerror 2010-04-27 21:55:33

您可以在Connections上使用复合主键,如果您遇到唯一性问题,请同时使用两列(id_1,id_2)。

+0

介意给这个答案一个例子或一个很好的资源? – Jayrox 2010-04-27 19:09:53

+0

如果连接表上没有主键,则应添加一个主键。您可能熟悉选择单个列作为主键索引,并知道它必须是唯一的。但是,您可以为索引使用多个列。即使可能存在重复的id_1值,连接表中也不应有任何重复的行(其中id_1和id_2都相同),因此在主键索引中命名id_1和id_2两列。那么,数据库不会让你有重复。 – 2010-04-27 19:23:24

+1

'ALTER TABLE Con​​nections DROP PRIMARY KEY,ADD PRIMARY KEY(id_1,id_2);' – 2010-04-27 19:31:43