一个数据库设计问题。

时间:2022-12-11 17:54:11
最近在做一个会员系统,其中有一项功能是“我的好友”,即每位会员都可添加其它会员为好友,拥有自己的好友列表。因以前没做过这种功能,在设计数据库时有点迷惑,我目前的想法是:已有一个用户表,用来存储所有用户信息,那么这个“好友”功能就在用户表里加一个varchar字段,其中存放用分隔符隔开的好友的id号(如下图),但这样做的话当要检索某用户好友时就不得不在程序里先作处理,去除分隔符,取出id号,再根据id号作查询,感觉效率不是很高。所以在此请教各位通常的比效科学的设数据应该怎样设计?

id        10001
name      王小二
password  ff876fff
myFriend  10005,10009,11992......
......

8 个解决方案

#1


好友关系单独作成张表。

#2


Firend 中间表

id  主表的用户ID
firedn id 好友的ID

#3


同意楼上的,很多时候,我们需要牺牲一些空间来换时间,或者牺牲空间时间来换操作性维护性.
好友表可以如下:

自增主键 用户ID 好友ID

#4


我就想知道这张中间表的结构是怎样的?是不是只两个字段id 和 friend_id呢?friend_id中数据存放的格式是怎样的?也是像我所想的那样用分隔符吗?还请详细指教。

#5


不用分隔符,这样就好了:这样可以进行很多操作,如某个用户被多少人加为好友,等等.维护起来也方便

1 用户1 好友1
2 用户1 好友2
3 用户2 好友1

#6


好友表设计如下:
friendship(user_id,friend_id)
其中主键是(user_id,friend_id)的组合。此表只含有两个字段

事例如下:
user_id      friend_id
100001        100002
100001        100003
100001        100005
100002        100001
100002        100006
100002        100007



100001        100002


#7


不好意思
最后一句是多余的,把他删掉
100001        100002

#8


OK,多谢各位,结账:)

#1


好友关系单独作成张表。

#2


Firend 中间表

id  主表的用户ID
firedn id 好友的ID

#3


同意楼上的,很多时候,我们需要牺牲一些空间来换时间,或者牺牲空间时间来换操作性维护性.
好友表可以如下:

自增主键 用户ID 好友ID

#4


我就想知道这张中间表的结构是怎样的?是不是只两个字段id 和 friend_id呢?friend_id中数据存放的格式是怎样的?也是像我所想的那样用分隔符吗?还请详细指教。

#5


不用分隔符,这样就好了:这样可以进行很多操作,如某个用户被多少人加为好友,等等.维护起来也方便

1 用户1 好友1
2 用户1 好友2
3 用户2 好友1

#6


好友表设计如下:
friendship(user_id,friend_id)
其中主键是(user_id,friend_id)的组合。此表只含有两个字段

事例如下:
user_id      friend_id
100001        100002
100001        100003
100001        100005
100002        100001
100002        100006
100002        100007



100001        100002


#7


不好意思
最后一句是多余的,把他删掉
100001        100002

#8


OK,多谢各位,结账:)