一、概念
数据字典是一种通用的程序设计方法。
不论什么主体,这里的主体可能是人员、商品(超子)、网页、接口、数据库表、甚至需求分析等等。当主体有很多的属性,每种属性有很多的取值,而且属性的数量和属性取值的数量是不断变化的,特别是当这些数量变化很快时,就应该考虑引入数据字典的设计方法。
二、形式
数据字典有两种形式:
(1)把主体的属性代码化(如“性别”可以映射为“01”)放入独立的表中。不与主体放在一起(即将“学生”表的主体与其属性“性别”分隔开),主题中只保留属性的代码。这里属性的数量是不变的,而属性取值的数量是可以变化的(即“学生”依旧是“姓名”、“年龄”、“性别”三个属性,但“性别”(01)的数量可以随意设置(加上“中性”属性也未尝不可))
(2)用一个表来放结构相同的所有属性信息,不同属性的不同取值统一编码,用“类型”来区别不同的属性,主体中保留属性代码的列表。这样主体所拥有的属性数量就是可变的了。(不太懂……)
首先举简单的例子来说明第一种形式:
有一个“职员”表,该表有“国籍”、“证件”、“学历”等属性。
现在页面上需要一个选择“国籍”的下拉菜单,下拉菜单的内容是世界上所有的国家。我们可以通过在页面上直接添加所有国家的名字来实现。但这样操作效率很低,页面代码中数据过多。
如果这个下拉菜单需要在多个页面中用到,万一其中一个国家,如南斯拉夫改名了,我们就得在所以页面中手动对“南斯拉夫”进行改名操作……
又比如,如果一个代码的名称需要换一个,如“证件”属性,现在其中保存的值为“身份证”,有一天我们想将该值改为“居民身份证”,用sql语句当然可以修改,但是依然不太方便。
《职员表》
姓名 证件 性别
张三 身份证 男
李四 身份证 女
..
如果我们使用数据字典,这张表中存的就是
《职员表》
姓名 证件 性别
张三 001 男
李四 001 女
..
即此时还存在一张《证件表》只用来存放“证件”属性的值
《证件表》
证件id 证件名
001 身份证
002 暂住证
..
《证件表》就是第一种数据字典。要改变证件名称时,只要把其中的“身份证”改成“居民身份证”就好了,只需修改一次。而且,《职员表》不用做任何修改,页面上如果用到“证件”,也不用做修改。
还有在程序中有时需要判断业务逻辑时,用:“select * from 职员表 where证件= ***”,原来***是“身份证”,使用数据字典后,就是001。证件改名后,就不用手动到程序里去改,程序也就不用重新测试、发布等等。
但第一种数据字典也有局限性:
使用第一种数据字典后,程序中除“职员”类外,还就需要有一个“国籍”类、一个“证件”类和一个“学历”类,对应的数据库中也需要增加一张“国籍”表、一张“证件”表和一张“学历”表。“职员”类则需要包含一个对“国籍”类的引用、一个对“证件”类的引用和一个对“学历”类的引用,对应的数据库中“职员”表中也需要三个外键分别指向“国籍”表、“证件”表和“学历”表。这样的设计在类似“国籍”和“学历”这样的属性比较少时是可行的,但是随着系统复杂性的增加,系统中会出现大量结构类似的信息表和信息类,数量一直会增加到一个不可接受的地步。这里的“职员”,已经有了国籍、证件和学历三个属性,但如果职员还要增加“职位”属性,那么必然要多出个“职位表”,如果还有其它...那即,当取得一条主体的完全数据时,那将进行几十个表的联接(join)操作。
通过分析上述问题,可以发现的一个特征是:这些信息类的内容都是需要动态维护的,但是所需的属性是一样的,对应的数据库表中包含的字段也是一样的。关键的字段就是两个:“标识”和“名称”。“标识”用于表示不变的主键,“名称”用于表示程序界面上显示的文字。
还是以上面的例子为例。在系统中去掉《国籍表》、《证件表》、《学历表》….,引入《系统代码分类表》和《系统代码表》:
《系统代码表》的“分类”字段都指向《系统代码分类表》中的“分类标识”。这样,在程序需要获得国籍信息时,只要通过“Country”这个标识去《系统代码表》中检索就可以了。这样的设计也便于建立一个单独的程序模块来维护所有的这些公共信息。
采用第二种数据字典后,其表结构是:
职员ID、姓名
另外增加《属性表》,该表是《职员表》和《系统代码表》的关系表,其表结构是:
属性ID、职员ID、系统代码表_标识
《职员表》
职员ID 姓名
1 张三
2 李四
…
《属性表》
属性ID 职员ID 系统代码表_标识
1 1 001 (表示张三是中国籍)
2 1 501 (表示张三的证件是身份证)
3 2 002 (表示李四是美国籍)
4 2 501 (表示李四的证件是身份证)
…
可以看出《职员表》的设计大为简化,系统也更加灵活了,完全可以适应主体属性的大量变更了。程序的设计应用第二种数据字典时和数据库表的方法一样。
三、数据字典的优点
(1) 在一定程度上,通过系统维护人员即可改变系统的行为(功能),不需要开发人员的介入。使得系统的变化更快,能及时响应客户和市场的需求。
(2) 提高了系统的灵活性、通用性,减少了主体和属性的耦合度
(3) 简化了主体类的业务逻辑
(4) 能减少对系统程序的改动,使数据库、程序和页面更稳定。特别是数据量大的时候,能大幅减少开发工作量
(5) 使数据库表结构和程序结构条理上更清楚,更容易理解,在可开发性、可扩展性、可维护性、系统强壮性上都有优势。
四、数据字典的缺点
(1)数据字典是通用的设计,在系统效率上会低一些。
(2) 程序算法相对复杂一些。
(3) 对于开发人员,需要具备一定抽象思维能力,所以对开发人员的要求较高。
原文链接:https://blog.csdn.net/qq_39530754/article/details/85130249