连载之10
原创:胖子刘(转载请注明作者和出处,谢谢)
五、通用数据库模型分析
在我们数据库模型设计领域,有一个很有趣的比例——“5:3:2”,我称之为“五三二法则”。具体是什么含义呢?
这个“5”,表示大约50%的功能设计是跨行业通用的,不管你是做商业流通项目、还是电子政务项目、或者是网上拍卖系统,虽然各个项目所属行业不同,但是它们中的50%的设计思想都是相同的,这就是本章(第五章)所要讲述的“通用模型设计”。换句话说,本章所讲述的模型设计思想,你可以在任何项目中使用;“3”表示在某行业内部的各个不同的公司之间又有30%的设计思想是相同的,这就是下一章(第六章)所要说明的“行业模型设计”;“2”表示余下的20%才是某一特定公司所独有的业务需求,这部分内容我这个连载就不介绍了。
(一)人与组织
大部分的企业系统都会记录有关人与组织的信息,比如公司员工、供货商、销售客户、网上客户、会员卡客户、子公司、公司内部组织机构等信息。而大部分系统对这些信息进行数据库设计时,都是创建各自独立的表,没有抽取共有信息,因而造成了数据的冗余。
比如A公司为了开辟销售市场,通常会给与会员卡客户一定的优惠条件,那么显然不能排除持卡人为公司员工这种情形、也不能排除持卡人为公司的供货商这种情形。
假设B公司既是A公司的供货商、同时也是A公司的会员卡客户,如果按照各自独立的方式设计数据库表,则B公司的信息,如公司名称、联系人、联系电话、联系地址等信息必然要在A公司的“会员卡客户”表及“供货商”表作重复记录。如果B公司的某些信息,如联系电话和地址发生了变更,则A公司必须将会员卡客户表和供货商表中的记录同时修改,否则业务人员就会发现同一家公司(B公司)的信息,在系统内两个地方登记的不一样,那么,哪个是正确的?业务人员就会对软件数据的准确性产生怀疑,进而对整个系统持怀疑态度。
同样道理,在一些大型企业,内部各部门、各子公司之间有时也会按照销售的方式进行业务往来。“生产车间”是“产品营销部”的供货商,“生产车间”同时也是“原料采购部”的销售客户。有些大型企业集团还会建立集团内部银行,内部各部门、各子公司之间通过内部转帐支票的方式完成内部往来结算,各部门、各子公司之间采取相对独立的成本核算的经营方式。这样的话,如果每个部门、子公司都自己创建一套独立的“组织”表,那么同一个组织的信息就会存储在多个表里,这样就产生了数据重复。
如果同一数据重复存储在多个表里,一旦某个部门由于业务的发展而发生变更的时候,就会给系统使用者带来很大的麻烦——不但增加了数据修改的工作量,还必须要对所做的多处修改进行认真核对,以保证同一部门的信息在软件的各个地方都是一致的。
综上所述,为了解决数据在系统内部不必要的重复存储问题,关于这方面的数据库设计模式就用到了我们前面提到的“主扩展模式”。
文章来源:http://blog.csdn.net/liu7537/archive/2006/05/09/713973.aspx