其中动态列与_GUID表中的动态列代表含义一样。
表5动态维护型标准修改单详细信息表
字段名称
|
数据类型
|
主键
|
外键
|
说明
|
ID
|
int
|
是
|
|
自动编号
|
DynamicAID
|
int
|
|
是
|
修改单ID号
|
Operation
|
tinyint
|
|
|
0Insert;1update; 2delete;
|
flag
|
tinyint
|
|
|
修改标识:0原信息; 1更改后信息
|
动态列
|
nvarchar(50)
|
|
|
同_GUID表
|
UpdateTime
|
Datetime
|
|
|
更新时间
|
IDName
|
nvarchar(200)
|
|
|
修改删除时GUID表的ID
|
动态维护型标准版本信息表(_GUID_Version):这个表中记录了标准的版本信息
表6动态维护型标准版本信息表
字段名称
|
数据类型
|
主键
|
外键
|
说明
|
ID
|
int
|
是
|
|
自动编号
|
ver
|
varchar(50)
|
|
|
版本号
|
updateTime
|
Datetime
|
|
|
更新时间
|
summary
|
varchar(50)
|
|
|
说明信息
|
4.5、标准动态维护的实现
4.5.1标准内容的导入
根据第二部分标准结构化,将数据元标准与代码集标准的属性字段抽取出来写入MDB文件或EXCEL文件。C#中OLEDB组件支持ACCESS数据库MDB文件和EXCEL文件的读取。利用OLEDB技术读取结构化的标准内容,按照流程图(图1)的流程,在数据库中创建对应的表并把MDB文件中的内容存入数据库。首先生成一个GUID码,然后判断这个GUID码在数据库中是否有表名与之重复,如果没有重复就创建_GUID、_GUID_Version、_GUID_DynamicPA三个表并把MDB文件中的内容存入_GUID和_GUID_Version表中。

图1标准内容导入流程图
4.5.2对标准内容的动态维护。
对于标准内容的动态维护基本可以总结为对具体内容的添加,修改,删除。我们引入了一个修改单的概念,修改单的示例页面为下图。如图2所示,修改单填写了要维护的标准和维护的具体内容和操作方式。

图2标准内容维护

图3标准内容动态维护流程图
在图3中可以清楚的看出_GUID_DynamicPA中存放的是标准信息各个版本之间内容的变化,这里用flag字段标识是否为新版本,用operate字段标识对于标准维护操作的类型。在保存完版本之间内容变化后,我们根据修改单的内容去对_GUID表进行操作,使_GUID表的数据始终为最新版本的内容。这样我们就完成了对于标准内容的动态维护。
4.5.3最新、历史版本数据的查询,各个版本之间差异的比较。
数据修改单提交后,系统的数据库中就已经存放了标准内容的历史记录。但是如何对这些记录进行查询,如何对标准内容各版本之间进行比较仍然是个问题。下面介绍对于历史版本的查询和各个版本之间比较的具体实现方法。
4.5.3.1最新、历史版本数据的查询的实现
首先,系统得到用户要查询的标准的GUID码,然后查询GUID码所对应的_GUID_Version表。列出所有的版本信息让用户选择要查询的数据的版本。如果用户要查询最新版本的数据内容,则直接取_GUID表中的内容即可。如果用户要查看历史版本的信息,首先要得到所选择的版本信息的更新时间,以时间为条件,去_GUID_DynamicPA表中查询出所有大于版本信息更新时间的记录,并按_GUID_DynamicPA中的ID降序排列,这样就得出了在要查询的历史版本和最新版本的时间间隔之内所做的所有操作(为了下面叙述简洁,假设把这些数据放在名称叫OPER的表中)。现在我们要做的工作就是利用_GUID表中的最新版本的内容与OPER表中的所有数据恢复到要查询的历史版本。
恢复历史版本的具体步骤:
(1)建立临时表#GUID并复制_GUID表中的数据。
(2)循环开始,依次从OPER表中取一条记录。如果没有记录了,执行9。
(3)如果记录中的operate字段为0,则执行6。
(4)如果记录中的operate字段为2,则执行7。
(5)如果记录中的operate字段为1并且flag字段为1,则执行8。
(6)从#GUID表中删除该记录。执行2。
(7)把该记录插入到#GUID表中。执行2。
(8)取下一条记录的内容并更新到#GUID表中的相应位置。执行2。
(9)循环结束。
最终#GUID表中的值就是用户要查询的历史版本。查询结果截图为图4:

图4标准最新内容查询
4.5.3.1版本之间比较的实现
由于表_GUID_DynamicPA中记录着每个标准数据内容的更改记录,所以要实现数据内容版本之间的比较的结果就可以从这个表中得到。
首先用户选择任何2个要进行比较的版本,然后查询_GUID_Version中所选版本信息所对应的更新时间。这样我们就得到2个更新时间(假设为startTime和finishTime),我们再以这2个时间作为条件,查询_GUID_DynamicPA表,最终得到结果。具体的SQL语句如下:
select操作=casewhen(operation=0)then'添加'when(operation=1andflag=0)then'由'when(operation=1andflag=1)then'改为'when(operation=2)then'删除'else'未知操作'end,动态列(就是导入到_GUID表中的列)fromdbo.[_GUID_dynamicPA]whereupdatetimeisnotnullandupdatetime>=startTimeandup
datetime
具体显示页面如下:

图5标准最新内容查询
5、结束语
本文从当前标准管理系统不能够对标准内容进行很好的动态维护出发,对于如何对标准进行动态维护提出设计方案并且运用asp.net与sqlsever实现。 2/3 首页 上一页 1 2 3 下一页 尾页 |