凯锐

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 连载之14
原创:胖子刘(转载请注明作者和出处,谢谢)
4.       当事人类别
企业系统在记录当事人信息的时候,总会记录其所属类别。这样可以分门别类的统计各类当事人的业务信息、便于经营数据的分析和对比,为公司经营战略提供决策依据。
关于当事人的分类方式很多且不固定。比如按照人员年收入水平可以作如下分类——1万元以下、1万-5万元、5万-10万元、10万-20万元、20万元以上;按照组织的规模可以分为——特大型企业、大型企业、中型企业、小型企业和个体工商户等。
面对以上情况,有些系统在设计的时候,喜欢在当事人表中增加“年收入水平”和“组织规模”两个字段,分别用于存储当事人所属类别信息。这种设计很死板且不方便扩展。比如企业根据业务的需要新增了一种分类方式:按照行业类别分类如下——通信、IT、能源、电力、制造业、物流运输、政府机关、零售业等。采取这种设计必要修改表结构,增加一个“行业类别”字段,相应的程序代码也要随之修改。
在我们这里,“当事人”和“当事人类型”是典型的多对多关系,由于关联表有独立的业务需求(企业希望保持当事人类别变动历史,以便进行更详细的分析),所以我们采用“多对多模式”的第1种情况设计如下:图15
为了满足企业的这种需求,我们在关联表(当事人类别表)中增加了起始和截止时间两个属性,记录当事人类别的变化历史。例如,假设某当事人在2004年1月1日至2004年12月31日这段时间的收入水平为“1万元以下”,在2005年1月1日至2005年12月31日这段时间收入水平增加到“1万-5万元”,在2006年1月1日至2006年5月22日这段时间的收入水平又下降到了“1万元以下”,这样当事人类别表中可添加3条记录。其中第1条和第3条记录针对外键字段(当事人类型ID、当事人ID)来说是重复的,但是外键字段加上起始日期后,就不再重复、可以作为整条记录的唯一标识,所以我们在这3个字段上创建了一个唯一索引。
如果企业不需要变动历史,只关心当前最新状态,那么“当事人类别”表中的起始和截止日期删掉即可。为了简化开发,还可以删掉“当事人类别ID”字段,只保留“当事人ID”和“当事人类型ID”、并在这两个字段上创建主键即可。
“当事人类型”表是一个“简单自联结模式”的表,通过这种模式来记录企业所有的当事人分类名称和分类项目,同时标记分类名称为非叶子(是否为叶子属性值=false)、分类项目标记为叶子(是否为叶子属性值=true)。
按照当前所举的例子,“当事人类型”表存储的数据记录为如下形式:
当事人类型ID
描述
排序号
父ID
是否为叶子
1
年收入水平
2
NULL
0
2
组织规模
3
NULL
0
3
行业类别
4
NULL
0
4
1万元以下
1
1
1
5
1万-5万元
2
1
1
6
5万-10万元
3
1
1
7
10万-20万元
4
1
1
8
20万元以上
5
1
1
9
特大型企业
1
2
1
10
大型企业
2
2
1
11
中型企业
3
2
1
12
小型企业
4
2
1
13
个体工商户
5
2
1
14
通信
1
3
1
15
IT
2
3
1
16
能源
3
3
1
17
电力
4
3
1
18
制造业
5
3
1
19
物流运输
6
3
1
20
政府机关
7
3
1
21
零售业
8
3
1

文章来源:http://blog.csdn.net/liu7537/archive/2006/05/22/748896.aspx
posted on 2006-06-17 18:08  凯锐  阅读(279)  评论(0编辑  收藏  举报