标签:
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