我有用户表和连接表来记录用户之间的“友谊”。我有一个关于如何记录“友谊”关系的问题。
User Table
u_ID | u_Name
-------------
1 | bob
2 | jill
让我们说bob和jill是朋友。联接表应该记录两个方向的友谊吗?
双向关系??
Friends Table
f_ID | u_ID1 | u_ID2
--------------------
1 | 1 | 2
2 | 2 | 1
或单一方向关系就足够了?
Friends Table
f_ID | u_ID1 | u_ID2
--------------------
1 | 1 | 2
我的用例与Facebook上的朋友关系很接近。如果我是你的朋友,那么你就是我的朋友(我们都需要认可这种关系)。 TX。
答案 0 :(得分:3)
由于朋友关系总是双向关系,因此您不得存储两行,而只能存储一行。
选项:
您可以决定表格中的第一个字段是发起友谊的字段。我还要再添加两行:date和confirm。
选
在第一个字段中存储较低的user_id,在第二个字段中存储较高的user_id。这允许您定义unique index (field1, field2)
和constraint field1 < field2
。这样就可以强化友谊关系的独特性。
另一方面,你需要一个aditional字段来存储发起友谊的人(使用0/1,而不是user_id)
答案 1 :(得分:2)
您可以将分数字段添加为int吗?
这是稍微多一点的操作代码,但在磁盘空间中效率很高。您需要处理多少百万行?
列出id1的朋友
select u_id, u_name from users join Friends on u_id=id2 where id1= @X and (score % 2) =1;
列出id2的
select u_id, u_name from users join Friends on u_id=id1 where id2= @X and (score & 1)=1;
这两个陈述都可以用bitmaths编写。