【高分求评】部门结构设计
部门设计如下:
iSysCode 自动编号 int
iCode 部门编号 int
iClassCode 部门树编号 bigint
cName 部门名称 varchar 45
cMemo 备注 varchar 100
iStatusCode 部门状态 int
1. isysCode
是系统编号,系统里除要手工处理重复记录时使用,或对部门编辑时使用
但我没有把它做为部门编号
a) 自增长的,不同与业务联系
b) 一旦删除,后面要做大量的工作处理回复
2. iCode
是每次增加我从数据库取最大iCode再加上,范围是从1000001到999999,是关联字段
a)这样设计主要使部门编号有规则,如果有需要可以再设一个范围,后面好区分,甚至两个范围同时增加部门
b)如果误删除一个部门,可以直接增上,难度比iSysCode小
3. iClassCode
是用来显示树结构的,第一级长度为两位,子部门长度增2,如一级部门为11,则2级部门为1101,1102,而1101下面的部门为110101,110102
a) 层次明显,对于一些默认部门一看编号就明白了
b) 程序中可以避免很多地方递归操作,当然树还是要有递归的,需要的时候直接字符串处理就可以
缺点是,插入时要计算,而且尤其是部门移动时要更改所有子部门的编码
上个表看起来,编号的字段太多,而且还要程序实现,不如直接一个iSysCode,一个ParentID来的方便,如下表
id
cName
iParentID
iStatusCode
有利有弊,拿出来算是抛砖引玉,请大方之家不吝批评指正
------解决方案--------------------如果部门需要设计成树形结构,可以:
部门编号
部门名称
级别
是否末级
上级部门编码
备注
状态
------解决方案--------------------iCode 部门编号 smallint
iClassCode 部门树编号 smallint (ParentID)
cName 部门名称 varchar 45
cMemo 备注 varchar 100
iStatusCode 部门状态 tinyint
------解决方案--------------------iSysCode 自动编号 int
iCode 部门编号 varchar 20
ParentID 上级部门自动编号 int
cName 部门名称 varchar 45
cMemo 备注 varchar 100
iStatusCode 部门状态 int
------解决方案--------------------部门ID DepartmentID
部门编号 DepartmentNo
部门名称 DepartmentName
上级部门 SuperiorID
级别 Grade
------解决方案--------------------提点不成熟的意见哈,突发奇想式的,有问题多包含哈!
一般来说部门分级都是比较固定的,不会太多,估计大多也就是三级左右,故我想说的是对于固定分级的管理来说的(最好 <=4级)。
拿三级举例,那么我就想可不可以分成三个表,分别是一级部门表,二级部门表,三级部门表。
一级部门表内容
部门编号 DepartmentNo
部门名称 DepartmentName
备注
状态
二/三级部门表内容
部门编号
上级部门编号
部门名称
备注
状态
如果这样设计的话将会非常便于统计和查询,当然只限于分级固定且分级不是太多的情况,嘿嘿不知道俺说的如何,高手给个建议。
------解决方案--------------------楼上的朋友,分成2张表会增加很多的麻烦。有些时候,部门分类不只3级。
而且制作2张表,不见得查询快,第2张表就存在上下级对应关系,第一张表就显得多余了。
------解决方案--------------------可能是我没写清楚,我的意思是分三张表,并且我已经说明了是用于分级固定的情况。
二级部门表内容
部门编号
上级部门编号
部门名称
备注
状态
三级部门表内容
部门编号
上级部门编号
部门名称
备注
状态
------解决方案--------------------因为我考虑的是一个企业很多时候部门分级就是固定的那么几级,不会太多的,也不会太乱。
------解决方案--------------------关于查询快的问题,其实我没有说这样分表会查询效率高,但是这样分的话在应用程序中统计查询会很方便语句也好写。