扩展表的实质就是用数据表的形式来存储和表现数据表。一般的数据表有行(数据)有列(结构),而扩展表的功能就是存储列和行。也就是说,根据扩展表里的内容,我们可以搭建出若干张数据表。从外观上看,用户只是在对一些很基础的数据表进行增删改的操作。而实际上,我们是把用户对表的定义、对表结构的修改、对表内数据的修改都做到扩展表中。这样做的用处是,在一些数据库表的格式已经定义完毕后,如果需求变更(比如要添加列,但又不好直接显示),则不需要改变原表的结构,只需要在扩展表中定义需要扩展的部分的结构就可以了。而且,对于扩展表所存储的数据表而言,由于其结构(列)也是作为一条条数据行所存储的,结构的变更很灵活和方便。
要做扩展表,要存储的内容包括对应的实际数据模块、扩展表的栏位(列)、扩展部分的数据(行)等。首先来看扩展表的主表:
OID: 唯一标识(PK)
INF_CODE: 模块代码
INF_URL: URL地址
INF_STATUS:状态
INF_DESC: 描述
OID是GUID标识符。模块代码是标识对应的数据模块。URL地址是用来显示时使用的,标识目标地址。INF_STATUS标识该模块的扩展表是否使用。INF_DESC用来描述该模块的信息。
接下来,就要存储数据表的结构(列)了。这是扩展栏位表:
OID: 唯一标识
FLD_INFOID: 扩展表标识 (FK)
FLD_CODE: 栏位编码
FLD_NAME: 栏位名称
FLD_SEQN: 栏位顺序
FLD_DATATYPE:栏位数据类型
FLD_STATUS:栏位状态
FLD_DESC: 栏位描述
栏位编码相当于数据库中的列名,而栏位名称则相当于数据库中数据显示出来时列要显示的名称。栏位编码的作用是,如果名称改变,仍然可以找到这一列,而不用大动干戈的修改程序(谁让需求总是比女孩的心情变得还快呢^_^)
栏位的顺序是指该扩展表显示时各栏位的显示顺序。栏位的数据类型只限定成字符串(string)、数值(decimal)、下拉选择(dropdown)、日期(datetime)四种。下拉选择是允许用户(开发员)自定义该栏位可以允许的选项。在往该列添加数据时,将以下拉框的形式展现。
既然定义了下拉选择类型,我们就应该允许用户的自定义下拉值。因此,扩展表的第三张表就是存储下拉选择时的可选值的选择值表:
OID: 唯一标识
OPT_FLDOID: 扩展栏位标识(FK)
OPT_VALUE: 索引值
OPT_KEY: 索引键
OPT_DEFAULT:是否为默认选择
OPT_STATUS: 状态
OPT_DESC: 描述
这张表的内容也是一目了然的。扩展栏位表和选择值表合起来,我们就有了一个关于数据表结构(列)的完整轮廓。接下来,我们需要存储数据表的数据了。
存储数据行要关联的信息是扩展表的模块和关联该行数据的原始行标识。也即,对应CPU的扩展信息,不仅要关联到CPU这个模块上,还要关联到CPU表中的一条具体的数据上。因此,具体的数据行标识的扩展信息表设计成这样:
OID: 唯一标识
REC_INFOOID:扩展表标识(FK)
REC_OBJOID: 对象标识
REC_STATUS:状态
REC_DESC: 描述
扩展表标识是用来标记对应的模块,而对象标识就是关联到该模块的具体某一条数据上。两者合起来,我们可以确定在哪里和如何在原始数据的地方显示这条扩展信息的内容。
最后,我们还需要一份扩展信息明细表,用来存储真正的扩展表的所要存的数据。这份明细表如下:
OID: 唯一标识
RCD_RECORDOID:扩展信息标识(FK)
RCD_FLDOID: 扩展栏位标识(FK)
RCD_RECODE: 扩展值
通过如上的五张表,我们成功的建立了一个扩展表的结构。通过这个扩展表,我们可以自定义数据表的结构和数据。以表的形式存储表,这就是扩展表的意义和特别之处。
扩展表设计
最新推荐文章于 2024-04-08 14:54:26 发布