Posted on 2008-03-14 10:47
三磊 阅读(238)
评论(2) 编辑 收藏
原先做的一个项目其中有一个“组织机构”的模块。我也不想多说了,反正我是实在看不下去了。
就自己想想做了一个表设计。
表设计的元数据:
---------------------------------------------------------------
| Name |
|
字段名 |
| Code |
|
字段代码 |
| DayaType |
|
数据类型 |
| Comment |
|
注释 |
| DefaultValue |
DV |
默认值 |
| 存GUID |
GUID |
VARCHAR(36) |
| Primary |
P |
主键 |
| Foreign |
F |
外键 |
| Mandatory |
M |
强制的 |
| Unique |
U
|
唯一性 |
----------------------------------------------------------------
下面是三个表(本人英语奇差,有些用的不对的单词,请各位帮忙更正。:p):
------------------------------------------------------------------------------------------------------------------
| TableName |
Organise |
组织机构(部门) |
| Code |
Data Type |
P |
F |
M |
U |
DV |
Comment |
| ID |
GUID |
T |
|
T |
T |
|
表主键 |
| Adder |
GUID |
|
T |
T |
|
'' |
添加者 |
| AddTime |
DateTime |
|
|
T |
|
'' |
添加时间 |
| Moder |
GUID |
|
T |
T |
|
'' |
最后修改者 |
| ModTime |
DateTime |
|
|
T |
|
'' |
最后修改时间 |
| DeleteTag |
TINYINT |
|
|
|
|
0 |
删除标识 1=删除 |
| Remark |
varchar(1000) |
|
|
|
|
'' |
备注 |
| BaseID |
GUID |
|
T |
T |
|
|
上一级组织(本表ID) |
| FullName |
VARCHAR(100) |
|
|
T |
T |
|
全称 |
| Code |
VARCHAR(20) |
|
|
|
|
|
代码 |
| Name |
VARCHAR(30) |
|
|
|
|
|
简称 |
| PrincipalID |
GUID |
|
T |
|
|
|
负责人(Personnel.ID) |
| Address |
VARCHAR(300) |
|
|
|
|
|
地址 |
| Postalcode |
Int |
|
|
|
|
|
邮编 |
| Phone |
VarChar(40) |
|
|
|
|
|
电话 |
| Fax |
VarChar(40) |
|
|
|
|
|
传真 |
| Email |
VarChar(40) |
|
|
|
|
|
邮箱 |
| Sort |
Int |
|
|
|
|
65535 |
顺序 |
| Panse |
Int |
|
|
|
|
|
停用标志 (1=停用) |
说明:本表中将机构和部门,还有一些临时的机构(比如工程指挥部)放在了一起。这两个名字不同,但其实质却是一样的。为方便,以下均称为:部门。
------------------------------------------------------------------------------------------------------------------
| TableName |
Personnel |
人员 |
| Code |
Data Type |
P |
F |
M |
U |
DV |
Comment |
| ID |
GUID |
T |
|
T |
T |
|
表主键 |
| Adder |
GUID |
|
T |
T |
|
'' |
添加者 |
| AddTime |
DateTime |
|
|
T |
|
'' |
添加时间 |
| Moder |
GUID |
|
T |
T |
|
'' |
最后修改者 |
| ModTime |
DateTime |
|
|
T |
|
'' |
最后修改时间 |
| DeleteTag |
TINYINT |
|
|
|
|
0 |
删除标识 1=删除 |
| Remark |
varchar(1000) |
|
|
|
|
'' |
备注 |
| Name |
varchar(30) |
|
|
T |
|
''
|
姓名 |
| Sex |
varchar(2) |
|
|
|
|
''
|
性别 |
| Birthday |
DateTime |
|
|
|
|
|
出生年月 |
| Certificate |
varchar(40) |
|
|
|
|
''
|
证件名 |
| CertificateNumber |
varchar(40) |
|
|
|
|
''
|
证件号码 |
| Address |
varchar(300) |
|
|
|
|
''
|
联系地址 |
| Phone |
varchar(40) |
|
|
|
|
''
|
联系电话 |
| MobileTelephone |
varchar(11) |
|
|
|
|
''
|
手机号码 |
| Degree |
varchar(8) |
|
|
|
|
''
|
学历 |
| GraduateSchool |
varchar(100) |
|
|
|
|
''
|
毕业院校 |
| Sort |
Int |
|
|
|
|
65535 |
顺序 |
| Field |
varchar(36) |
|
|
|
|
''
|
预留字段1 |
| Field |
varchar(36) |
|
|
|
|
''
|
预留字段2 |
说明:本表的 顺序 字段有以下2个表的排序,应该是没有用处,但为防万一,也是先留着。
-------------------------------------------------------------------------------------------------------------
| TableName |
PersonnelPlace |
职位 |
| Code |
Data Type |
P |
F |
M |
U |
DV |
Comment |
| ID |
GUID |
T |
|
T |
T |
|
表主键 |
| Adder |
GUID |
|
T |
T |
|
'' |
添加者 |
| AddTime |
DateTime |
|
|
T |
|
'' |
添加时间 |
| Moder |
GUID |
|
T |
T |
|
'' |
最后修改者 |
| ModTime |
DateTime |
|
|
T |
|
'' |
最后修改时间 |
| DeleteTag |
TINYINT |
|
|
|
|
0 |
删除标识 1=删除 |
| Sort |
Int |
|
|
|
|
65535 |
顺序(全局排序) |
| Name |
varchar(40) |
|
|
T |
|
''
|
名称 |
| Responsibility |
varchar(2000) |
|
|
|
|
''
|
职责 |
| OrganiseID |
varchar(36) |
|
T |
T |
|
''
|
属于的组织(Organise.ID) |
| Remark |
varchar(1000) |
|
|
|
|
'' |
备注 |
说明:职位是组织机构中比较头疼的东西。
1、本设计是将职位放在部门的层面上,也就是说,有两个部门,每个部门都有一个主任,那么在本设计中,职位表就会有2条主任的记录。
2、本表中顺序有一个是 全局排序 。也就所有职位在一起的一个排序过程。这个是为了应付政府部门中负责的排序体系。不同机构不同部门的人员在一起,包括座位,显示的记录顺序等等都有先后,仅仅有部门排序和部门内排序并不够。2个部门的人在一起,两个主任肯定是排前面,然后是副主任,接着是其他若干人员。
------------------------------------------------------------------------------------------------------------------
| TableName |
Organise_Personnel |
组织人员关系(n*n) |
| Code |
Data Type |
P |
F |
M |
U |
DV |
Comment |
| ID |
GUID |
T |
|
T |
T |
|
表主键 |
| Adder |
GUID |
|
T |
T |
|
'' |
添加者 |
| AddTime |
DateTime |
|
|
T |
|
'' |
添加时间 |
| Moder |
GUID |
|
T |
T |
|
'' |
最后修改者 |
| ModTime |
DateTime |
|
|
T |
|
'' |
最后修改时间 |
| DeleteTag |
TINYINT |
|
|
|
|
0 |
删除标识 1=删除 |
| Sort |
Int |
|
|
|
|
65535 |
顺序(人在该组织中的排序) |
| OrganiseID |
varchar(36) |
|
T |
|
|
''
|
所属组织(Organise.ID) |
| PersonnelID |
varchar(36) |
|
T |
|
|
''
|
人员(Personnel.ID) |
| PersonnelPlaceID |
varchar(36) |
|
T |
|
|
''
|
在该组织中的职位(PersonnelPlace.ID) |
| Remark |
varchar(1000) |
|
|
|
|
'' |
备注 |
说明:
1、前面职位表已经有一个全局的排序。本来全局排序的先后放到部门以后也是不会有问题。但这中间如果有什么工程的时候,可能某部门的乙是该工程的指挥长,虽然在部门中另一个人甲是副指挥长,虽然甲在职位上要排在乙前面,但在该工程中,却是要乙排在甲前面。所以又同时要部门(本例是该指挥部)排序。
2、部门和人员是多对多的关系,一个部门中有多个人,这点不会有问题。但同时一个人也会对应多个部门,比如既是某部门主任,同时也是某指挥部指挥长。
-------------------------------------------------------------------------------------------------------------------
最后,本人工作经验尚浅。不足之处万望指正。