Freeshare查看“我发布的资源” 引发的思考

在改一个bug时觉得代码冗余,遂求宋神指点改进,在讨论的过程中,不小心整理了一下freesahre的权限体系,如下图所示,将个人版和企业版比作微博企业版(虽然没有用过,但是可以想象)就可以很好的理解了,因为多了一层企业的概念,所以多了一层权限。个人版就像一个特有的企业,是没加入任何一个企业的用户和群组的归属。企业版为不同企业之间的群组、资源进行隔离。

Freeshare查看“我发布的资源” 引发的思考_第1张图片
freeshare权限体系

另外在设计查看“我发布的资源”和“我的草稿”数据库查询时,提出新的思路:

1、查出作者为我的全部资源id1

2、查出我的企业版群组gid1,再查出属于这些群组的资源id2

3、查出我的个人版群组gid2,再查出属于这些群组的资源id3

4、id1与id2的交集即为我企业版中发布的资源id4

5、id1与id3的交集即为我个人版中发布的资源id5

6、(id4并id5)差 id1即为我的草稿资源id6(不属于任何一个群组的资源,仅自己可见)

之后分页展示时再每次取10条找到resource。

优点:查询语句简单,逻辑都放在java中处理,基本的dao层方法可以为别的逻辑复用

缺点:与数据库中的分页查询方法相比效率低,数据很大时会出现内存溢出,因为id1、2、3都是查出全部数据

现在依然沿用原来的数据库多表查询的方法,宋神说join命令会使两个表的全部内容join,效率很低,但是网上有人测试表示尽量使用Join 而不是Where来列出关联条件,特别是多个表联合的时候。原因是:

(1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料,以及本测试)是Join的效率不比Where差。

(2)使用Join可以帮助检查语句中的无效或者误写的关联条件,提高代码可读性

http://tech.163.com/07/0309/14/395APR410009158J.html

也有人说where速度快,原理性的还需自己去了解。

你可能感兴趣的:(Freeshare查看“我发布的资源” 引发的思考)