我处于两难境地,不知道哪一个更好.(我使用的是php和mysql btw)
让我们说我正在开发一个社交社区网站.用户可以根据需要添加任意数量的朋友.在我的数据库中,我有一个用户表,用于存储用户的详细信息,包括用户的朋友.我应该将用户的朋友存储在:
Strings => john; bryan; sam; paul; ...;
要么
整数=> 1; 21; 50; 1779; 30; ......;
String表示存储用户名.整数表示存储其用户ID.
哪一个更好?
如果是字符串,那将是一个非常非常大的字符串(想象用户有400个朋友,有些用户名非常长)
如果是id,如何在用户个人资料页面上列出好友?获取一个长字符串中的ID列表(以分号分隔),使用explode函数将其转换为数组.然后使用循环显示?? 不麻烦吗?还有其他方法吗?如果是,请显示一些示例代码..
或者通常,你们如何将"朋友"列表存储在用户表中?
不要将它们存储为以分号分隔的任何东西.将它们作为用户ID存储在查找表中.假设用户是#2.你可能有:
SourceUserID | FriendUserID 2 1 2 21 2 50 2 1779 2 30 1 // One of John's friends
然后,要显示朋友列表,您查询此表,通过SourceUserID = 2限制它,并连接到用户表以获取名称.例如:
SELECT Name FROM SITE_USERS INNER JOIN USER_FRIENDS ON SITE_USERS.ID = USER_FRIENDS.FriendUserID WHERE SourceUser = ?
(或者无论您的参数化查询格式是什么;使用您正在显示其页面的用户的ID填充参数.)
通常你会创建第三个表"users_friends",其中有两列,userId和friendId,它们都构成了主键.一个快速的谷歌想出了这个:http://www.tekstenuitleg.net/en/articles/database_design_tutorial/8,但你可能想查阅关于"多对多关系"的其他文章.