求助——表设计问题

totola147 2013-04-25 02:29:56
有个用户关系表 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次插入操作,无更新操作,避免了表的锁;
缺点:查询时会有一个表的自链接


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



...全文
655 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
totola147 2013-05-03
  • 打赏
  • 举报
回复
引用 1 楼 daiyueqiang 的回复:
最终执行效率参考 执行计划 1:第一种方案,单页存储行数多,查询速度快。 每两个用户建立关系时,有1次插入操作1次更新操作.应该是一次插入操作。 2:第二种方案,单页存储行数少,数据存在冗余。 如果更新操作不频繁的话,个人建议采用第一种。 不过具体的还要看一下执行效率,查看一下语句的执行计划
谢谢
daiyueqiang2045 2013-04-26
  • 打赏
  • 举报
回复
最终执行效率参考 执行计划 1:第一种方案,单页存储行数多,查询速度快。 每两个用户建立关系时,有1次插入操作1次更新操作.应该是一次插入操作。 2:第二种方案,单页存储行数少,数据存在冗余。 如果更新操作不频繁的话,个人建议采用第一种。 不过具体的还要看一下执行效率,查看一下语句的执行计划

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧