用户和好友列表关系的数据库设计

时间:2014-01-07 21:14:39

标签: database-design uml datatables modeling

我创建了一个数据库设计

enter image description here

描述

用户可以向其他用户发送好友请求,所以这里:我们有一个FRIENDSHIP表,其中包含发件人和收件人的ID。

每个友谊,都可以成为一个或多个朋友的一部分(就像Google+一样)......用户可以将另一个用户添加到一个或多个列表(多对多关系),这就是我添加表格FRIENDSHIP_FRIENDLIST的原因。

但是,另一方面,如果发件人将收件人添加到标有“家庭”的“FRIENDLIST”中,则并不意味着“发件人”将被添加到标有“家庭”的收件人的“FRIENDLIST”中“也是。

这是因为每个用户都有自己独立的朋友列表,所以要知道好友列表,我们必须先了解用户。

但是如你所见,这种设计导致了一种封闭且不方便的关系,我认为我在这里遇到了一些设计问题。

你觉得这里有什么问题?

2 个答案:

答案 0 :(得分:1)

正确!

  • 您不需要限定/识别任何组(朋友列表)的所有权或直接参与,因为每个(和每个)用户都有完全相同的列表(或组),他/她只参与(相关)通过FRIENDSHIP(实现自我关系的实体)的关系,向一个或多个友谊组(列表)(下级关联实体) 因此,正确地重新思考,不需要USER和FRIENDSHIP_LIST之间的关系! 这将是多余的,甚至会带来诸如此类“过度关系”建模之类的问题,因为知道哪些组是某个用户的问题更多的是处理数据(查询)的问题。 PS。我唯一的建模评论点是,USER和FRIENDSHIP之间的简单0..N关系可以通过USER的两个简单关系更好地表示(作为替代建模),以表明作为另一个用户的用户来自同一个实体(表)。

答案 1 :(得分:0)

好吧,我找到了一个解决方案......已经没有问题了。

由于表友谊将为每个友谊关系保存两个记录,(两个原始)。

例:

表FRIENDSHIP

friendship_id  |   user_id    |   other_user

1                     1              2
2                     2              1

TABLE FRIENDLIST

friendlist_id         |     label
1                            friends
2                            family
3                            work

TABLE FRIENDSHIP_FRIENDLIST

friendship_id   |   friendlist_id
1                   2
1                   3
2                   1

这样,我不需要表用户和表friendlist之间的关系,因为我将在表FRIENDSHIP中使用user_id来了解当前friendlist所属的USER。

新设计将是:

enter image description here

谢谢