回 帖 发 新 帖 刷新版面

主题:听取意见

对于一个多对多的关系

比如一个会员可以加多个会员为好友.多个会员也可以与这个会员成为好友.我们如何表示这样的关系.

听听大家的意见.

回复列表 (共11个回复)

沙发

做一个会员表,再做一个好友表。

会员表保存会员信息。

好友表只存会员ID,和好友的会员ID两个字段,它们共同作为好友表的主键,而且它们都是会员表的会员ID的外键。

板凳

谢谢回复
这样的话  
关系表:

问题是这样:
会员ID , 好友ID
1          2
2          1

如果会员A加好友B.则好友B必需要加会员A.这样插入就是2次.而删除也是如此.数据库中 1,2 2,1的建立好友关系列数量也会上涨有没有更高的间解.回复就有分~~~灌水没有

3 楼

对于关系型数据库来说,2楼的方法是最合理的,没有冗余,不会产生逻辑错误。
数据库本身对于数据的检索是有优化的,数量不是问题。当然,前提是索引什么的弄好了。

4 楼

这个我清楚但想寻求更高明的方法:
希望大家多放想法.2楼的方法确实没有问题.建立关联表自然可以但缺点仍然存在.这样互为关系的表示方法我仍然不是很满意.我现在是想在寻求一种

问题在于好友增加的量.
A有20个好友
A->好友 : 有20列
好友->A : 就被迫产生20列(因为要求好友必须为双向同意)

这种表式方法自然满意.
但是删除时.进行(A->好友)删除.返回还要进行过来(好友->A)删除.这种操作也是无法通过内约束自动联级完成的.

假如(好友)用户被删除掉.操作也是如此

我不满意的地方就是: 其实(A->好友) 完全可以表示 (好友->A) 因为2列都为ID列.所以我想取掉其中的一个冗余数据.但是在查询上又会产生问题.我想问的是这个~ 

5 楼

刚仔细看了一下2楼的方法,确实有所欠缺。我觉得应该用下面的字段

ID    好友ID_1   好友ID_2
1      2           1
2      1           2

专门建一个表,用于储存好友关系。不会对基本数据(也就是用户表)有任何改动。
不知道我解释的对不对。




老婆在催我走了,明天再讨论

6 楼

你和老婆一个单位啊?不错啊.[em4]

我感觉这个方法意义也不大啊.大家继续

7 楼

我和老婆不在一个单位。这几个月上网很不方便,一两句话说不清楚。

任何技术都是有局限性的。我前面说的方法,看上去结构繁琐,实质都是在充分利用关系型数据库的特征。
你要是有兴趣,可以试试结构型数据库。

8 楼

结构型数据库不太懂啊

9 楼

我一直采用1楼的方法
两个字段,并且只为第一个字段设置索引
因为这样就足够了

同时,这并不存在什么数据冗余,你总不能强迫所有人都互为好友吧,我加你,你不一定愿意加我
“好友”只是一个形式

10 楼

Access和SQL都是关系型数据库,通俗点说就是二维的。
结构型数据库是多维的,最常见的就是XML。

其实数据库的类型有很多,不过普及度最高的就是这两种了。也就是说这两种结构的数据库通用性和可读性最好。其它的说实话我也没玩过,不过可以推测他们大都是专用型数据库。

我来回复

您尚未登录,请登录后再回复。点此登录或注册