Database design 当朋友也是用户时,如何表示朋友关系
我正在用以下两个必备条件设计一个数据库:Database design 当朋友也是用户时,如何表示朋友关系,database-design,Database Design,我正在用以下两个必备条件设计一个数据库: 用户可以有朋友 朋友是应用程序的用户 在我的概念设计中,我将其表示为: 我有几个问题: 1. 对吗? 2. 朋友是实体吗?我是否必须添加一个表Friend? 我想我需要一个有两列的表朋友,都是用户表的外键。您尝试设置的方案看起来非常像一个自引用多对多方案: 没有单独的Friend实体,只有一个名为UserFriend的“友谊链接”表。它有两个属性-表示朋友的用户实体的ID,以及表示朋友的用户的ID。“友谊”还可能包含其他属性,例如建立友谊的日期、
- 用户可以有朋友
- 朋友是应用程序的用户
1. 对吗?
2. 朋友是实体吗?我是否必须添加一个表
Friend
?我想我需要一个有两列的表朋友,都是用户表的外键。您尝试设置的方案看起来非常像一个自引用多对多方案:
没有单独的
Friend
实体,只有一个名为UserFriend
的“友谊链接”表。它有两个属性-表示朋友的用户实体的ID
,以及表示朋友的用户的ID
。“友谊”还可能包含其他属性,例如建立友谊的日期、友谊存在的环境(大学、工作、家庭)等。您尝试设置的方案看起来非常像一个自引用多对多方案:
没有单独的
Friend
实体,只有一个名为UserFriend
的“友谊链接”表。它有两个属性-表示朋友的用户实体的ID
,以及表示朋友的用户的ID
。“友谊”还可能包含其他属性,例如建立友谊的日期、友谊存在的环境(大学、工作、家庭)等等。我认为设计是正确的。但在friend表中,您应该只保留ID和与友谊相关的数据。表示用户\ id1和用户\ id2,其中用户\ id1和用户\ id2都是用户。两者都是朋友,我认为设计是正确的。但在friend表中,您应该只保留ID和与友谊相关的数据。表示用户\ id1和用户\ id2,其中用户\ id1和用户\ id2都是用户。两人都是朋友,谢谢你的回答。我会这样做的。现在,我考虑使用SQL语句在UserFriend表中查找我的所有好友:SELECT*fromUserFriend,其中userId=myId或friendId=myId代码>。而且,我正在考虑如何避免这样做:插入到UserFriend值中(1,2)代码>。一段时间后:插入UserFriend值(2,1)代码>。你怎么看?我想知道这个图表上的基数。从用户到用户朋友不是一对多的2关系吗?第一个关系是说用户有很多朋友,第二个关系是说用户是很多用户的朋友。@kpater87你说得对,我在底线上切换了1
和*
!谢谢@VansFannel也许你可以一开始就插入,或者像在Facebook上那样对待它:用户1说:“用户2是我的朋友”,而你可以插入用户朋友值(1,2)代码>但它需要确认,所以当用户2确认关系时,您将进行第二次插入:插入UserFriend值(2,1)在SQL中使用code>@VansFannel检索用户的所有好友@MyUser
您可以从UserFriend uf中选择u.*在u.Id=uf.FriendId上加入用户u,其中uf.UserId=@MyUser
。不幸的是,避免直接或间接的循环依赖关系取决于您的应用程序。谢谢您的回答。我会这样做的。现在,我考虑使用SQL语句在UserFriend表中查找我的所有好友:SELECT*fromUserFriend,其中userId=myId或friendId=myId代码>。而且,我正在考虑如何避免这样做:插入到UserFriend值中(1,2)代码>。一段时间后:插入UserFriend值(2,1)代码>。你怎么看?我想知道这个图表上的基数。从用户到用户朋友不是一对多的2关系吗?第一个关系是说用户有很多朋友,第二个关系是说用户是很多用户的朋友。@kpater87你说得对,我在底线上切换了1
和*
!谢谢@VansFannel也许你可以一开始就插入,或者像在Facebook上那样对待它:用户1说:“用户2是我的朋友”,而你可以插入用户朋友值(1,2)代码>但它需要确认,所以当用户2确认关系时,您将进行第二次插入:插入UserFriend值(2,1)在SQL中使用code>@VansFannel检索用户的所有好友@MyUser
您可以从UserFriend uf中选择u.*在u.Id=uf.FriendId上加入用户u,其中uf.UserId=@MyUser
。不幸的是,避免直接或间接的循环依赖关系取决于您的应用程序。