我正在尝试为网站开发数据库。该网站已注册用户,这些用户可以与其他用户交朋友。就像任何传统的社交网站一样。现在我的问题是,我必须存储每个用户的朋友列表以及他的个人资料信息。每个用户都有自己的个人资料ID。除此之外,每个用户都可以为他的朋友创建组,还有一个状态字段,用于说明两个用户之间友谊的状态。
现在要做到这一点,我想到了两个解决方案:
维护一个名为个人资料的表格,其中每个用户都有一个个人资料ID和他的其他个人资料信息,并有一个全局好友表,其中包含他的个人资料ID和他的朋友个人资料ID。其他领域将描述,小组,用户为特定朋友选择的以及他们的友谊状态等等。
维护一个名为个人资料的表格,其中每个用户都有一个个人资料ID以及上面的其他个人资料信息,并为每个用户提供一个单独的朋友表,其中显示的内容类似于friends_profileid,每个用户都有自己的朋友列表其中包含所有其他信息。
以上哪两种技术更合适?我正在使用MySQL Server 5.0,我也考虑使用抽象数据类型和数组类型,但这使得前端实现变得更加复杂,困难和繁琐。虽然第一种技术是以非常高的速率增加单个表中的行数,但第二种技术是增加表的数量以与用户数量成比例?还有什么建议?更多表格或更多行数?
虽然第二种技术减少了单个表中搜索的负担,但是一次又一次地存储模式的开销是多少?对于这种情况,最好的方法是什么?
答案 0 :(得分:3)
SQL旨在使用可变数量的行而不是固定的关系。
每个用户1个表的问题(就在我的脑海中):
结论:请使用您的RDBMS优势 - 世界已经运行了几十年的SQL(至少2 ;-),并且大多数[平凡]问题已经解决了很多次。< / p>
答案 1 :(得分:1)
您绝对不需要创建额外的每用户“朋友”表。对我有意义的方式更接近你的第一个解决方案:
我认为,传统的方法是使用连接表创建双向,多对多 >用户之间的映射。该表有两列,它们都是users
表主键的外键。连接表中的条目(称为user_friends
)表示两个用户之间的“友谊”。
答案 2 :(得分:0)
不是根据表格来思考,而是考虑域名对象是什么,以及它们之间的关系是什么样的。
使用它来驱动您的数据库设计,然后将您的数据库结构封装在定义良好的API之后,这些API执行幕后所需的任何连接。