欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

——表设计有关问题

更新时间: 2014-01-05 02:30:22 责任编辑: Author_N1

 

求助——表设计问题
有个用户关系表    Relation(user1ID,user2ID,remarks)

1 用户关系有针对单个用户的属性,比如说关系备注remarks

所以当用户1 与用户2建立关系时;用户1会写备注remark
而用户2同意时,也会建立一条数据,

所有数据有两行
(A,B,something)
(B,A,something)

现在问题来了,当用户2同意了用户1的请求,用户1的数据才真正有效
两种方案:
1 Relation表增加ischeck字段  Relation(user1ID,user2ID,remarks,ischeck)
当用户A向用户B发请求时,在表里插入一行数据,ischeck=0;当用户A 同意后,update 一下用户A的数据将ischeck=0 改为 ischeck=1;
这样 用户A查自己的相关用户时 这样就可以  
select user2ID from Relation where user1ID=A and ischeck=1
优点:用户A 查自己关联用户时,查询简单
缺点:每两个用户建立关系时,有2次插入操作1次更新操作;对于使用很频繁的表,更新操作会造成表锁,会影响性能


2 表结构不变
用户A查自己相关用户时,
select user2ID from Relation T1 JOIN Relation T2
on T1.user1ID=T2.user2ID and T1.user2ID=T2.user1ID
where T1.user1ID=A

优点:每两个用户建立关系时,有2次插入操作,无更新操作,避免了表的锁;
缺点:查询时会有一个表的自链接


大家觉得哪个方案性能会好一些




--参考方法--
最终执行效率参考 执行计划
1:第一种方案,单页存储行数多,查询速度快。
每两个用户建立关系时,有1次插入操作1次更新操作.应该是一次插入操作。
2:第二种方案,单页存储行数少,数据存在冗余。

如果更新操作不频繁的话,个人建议采用第一种。
不过具体的还要看一下执行效率,查看一下语句的执行计划
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:30:22
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/10608/
本文WWW.DOC100.NET DOC100.NET版权所有。