码迷,mamicode.com
首页 > 其他好文 > 详细

系统权限之组织架构

时间:2015-01-25 20:59:05      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

5年的时间,在4家公司呆过。我发现,它们的组织结构各有各的特点。

第一家公司,最老实了,部门-子部门-职员。

第二家公司,相对大点,集团-子公司-部门-子部门-职员

第三家公司,组织架构有点坑爹,有点乱!

部门-职员-所在公司

行业-行业经理-客户经理-顾问

第四家公司,更坑爹,这个组织架构没几个月就调整一次,中心重新划分、区重新划分、部门重组

集团-中心-部门-子部门-职员

区域-分店-部门-子部门-职员

 

反正能,上面的我都是随便列一列的。总结下,组织结构:

1、要有层级关系

2、父节点能够很快的找到子节点

3、节点能到很快的找到所有的子节点

4、能适应频繁的调整层级关系

要怎么设计呢?算了,我能力一般,就随便搞下吧!

 

先创建一个数据库【Zeje.Sys】

再创建一个表【SysOrg】

中文名称

数据类型

主键

注释

Id

int

 

OrgNo

nvarchar(100)

?

组织编号

OrgName

nvarchar(100)

?

组织名称

ParentId

int

?

 

OrgTree

nvarchar(4000)

?

组织树(表示层级)

AddPerson

varchar(50)

?

添加人

AddTime

datetime

?

添加时间

UpdatePerson

varchar(50)

?

更新人

UpdateTime

datetime

?

更新时间

DeletePerson

varchar(50)

?

删除人

DeleteTime

datetime

?

删除时间

 

 

Id、OrgNo、OrgTree三个字段各司其职咯!

1、Id用于权限管理各表间的关系表,因为用OrgNo的话,它的效率较低,你想想数字之间的比较跟字符串之间的比较,哪个速度快呢?——字符串的比较是一个一个字符的比较,而整形只需要比较一次。有个坑爹的同事跟我说bigint的比较效率高,害我一度想把它作为Id的类型,奶奶的!工资还比我高。后来后悔了,int就够了。

2、OrgNo用于业务数据表的,虽然字符串的比较是相对慢的,但是我们要大气点,土豪点,让它看上去顺眼点。

3、OrgTree这个有点意识,用它来组建树结构,用它来快速定位所有子节点,用它来快速定位父节点或者祖先节点也都是可以的。

至于怎么利用它?好吧!我把我们说得太奸诈了,下面就example吧!

 假如:

一级节点的OrgTree为 0001

二级节点的OrgTree为 00010001

三级节点的OrgTree为 000100010001

四级节点的OrgTree为 0001000100010001

那么,找一级节点的所有子节点的Sql语句是:

select * from SysOrg where OrgTree like ‘0001%‘

若找四级节点0001000100010001的祖先节点,那么Sql语句如下

select * from SysOrg where OrgTree in (‘0001‘,‘00010001‘,‘000100010001‘)

亦或

select * from SysOrg where CHARINDEX(OrgTree ,‘000100010001‘,0) > 0

系统权限之组织架构

标签:

原文地址:http://www.cnblogs.com/zeje/p/4248690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!