主题:听取意见
linxuanxu
[专家分:9360] 发布于 2008-01-19 16:24:00
对于一个多对多的关系
比如一个会员可以加多个会员为好友.多个会员也可以与这个会员成为好友.我们如何表示这样的关系.
听听大家的意见.
回复列表 (共11个回复)
沙发
happyboy2007 [专家分:3900] 发布于 2008-01-19 16:45:00
做一个会员表,再做一个好友表。
会员表保存会员信息。
好友表只存会员ID,和好友的会员ID两个字段,它们共同作为好友表的主键,而且它们都是会员表的会员ID的外键。
板凳
linxuanxu [专家分:9360] 发布于 2008-01-19 17:02:00
谢谢回复
这样的话
关系表:
问题是这样:
会员ID , 好友ID
1 2
2 1
如果会员A加好友B.则好友B必需要加会员A.这样插入就是2次.而删除也是如此.数据库中 1,2 2,1的建立好友关系列数量也会上涨有没有更高的间解.回复就有分~~~灌水没有
3 楼
liulei001 [专家分:12820] 发布于 2008-01-19 21:56:00
对于关系型数据库来说,2楼的方法是最合理的,没有冗余,不会产生逻辑错误。
数据库本身对于数据的检索是有优化的,数量不是问题。当然,前提是索引什么的弄好了。
4 楼
linxuanxu [专家分:9360] 发布于 2008-01-20 17:15:00
这个我清楚但想寻求更高明的方法:
希望大家多放想法.2楼的方法确实没有问题.建立关联表自然可以但缺点仍然存在.这样互为关系的表示方法我仍然不是很满意.我现在是想在寻求一种
问题在于好友增加的量.
A有20个好友
A->好友 : 有20列
好友->A : 就被迫产生20列(因为要求好友必须为双向同意)
这种表式方法自然满意.
但是删除时.进行(A->好友)删除.返回还要进行过来(好友->A)删除.这种操作也是无法通过内约束自动联级完成的.
假如(好友)用户被删除掉.操作也是如此
我不满意的地方就是: 其实(A->好友) 完全可以表示 (好友->A) 因为2列都为ID列.所以我想取掉其中的一个冗余数据.但是在查询上又会产生问题.我想问的是这个~
5 楼
liulei001 [专家分:12820] 发布于 2008-01-21 22:02:00
刚仔细看了一下2楼的方法,确实有所欠缺。我觉得应该用下面的字段
ID 好友ID_1 好友ID_2
1 2 1
2 1 2
专门建一个表,用于储存好友关系。不会对基本数据(也就是用户表)有任何改动。
不知道我解释的对不对。
老婆在催我走了,明天再讨论
6 楼
linxuanxu [专家分:9360] 发布于 2008-01-22 12:29:00
你和老婆一个单位啊?不错啊.[em4]
我感觉这个方法意义也不大啊.大家继续
7 楼
liulei001 [专家分:12820] 发布于 2008-01-25 22:17:00
我和老婆不在一个单位。这几个月上网很不方便,一两句话说不清楚。
任何技术都是有局限性的。我前面说的方法,看上去结构繁琐,实质都是在充分利用关系型数据库的特征。
你要是有兴趣,可以试试结构型数据库。
8 楼
linxuanxu [专家分:9360] 发布于 2008-01-26 11:36:00
结构型数据库不太懂啊
9 楼
jzyray [专家分:20610] 发布于 2008-01-26 12:47:00
我一直采用1楼的方法
两个字段,并且只为第一个字段设置索引
因为这样就足够了
同时,这并不存在什么数据冗余,你总不能强迫所有人都互为好友吧,我加你,你不一定愿意加我
“好友”只是一个形式
10 楼
liulei001 [专家分:12820] 发布于 2008-01-29 21:12:00
Access和SQL都是关系型数据库,通俗点说就是二维的。
结构型数据库是多维的,最常见的就是XML。
其实数据库的类型有很多,不过普及度最高的就是这两种了。也就是说这两种结构的数据库通用性和可读性最好。其它的说实话我也没玩过,不过可以推测他们大都是专用型数据库。
我来回复