博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Web开发框架之六 数据库文档方法,工具和实践
阅读量:7032 次
发布时间:2019-06-28

本文共 4260 字,大约阅读时间需要 14 分钟。

随着项目的进度推进,数据库的表越来越多,字段也频繁的变更。如何对这些变更作出文档说明,既要方便,又要有可维护性。比如,可以为所有的表创建WORD文档来说明,各个表的含义和字段的意义,但是如果数据库表或字段变更频繁的话,更新WORD文档是个相对麻烦的工作。在博客园中曾经有技术人员专门创建文档生成工具,以程序的方式直接生成WORD文档,使为数据库创建文档的可行性提高很多,轻松点击鼠标就可以做完的工作,非常容易。

SQL Doc

推荐给各位的数据库文档工具箱中,排名第一的是RedGate公司的SQL Doc。

创建新项目,连接数据库服务器,选择数据库,在右边的窗格中为表或它的字段创建描述信息。

使用SQL Profiler查询跟踪器,检测到它进行如下的SQL语句

exec sp_executesql N'if (SELECT count(*) FROM ::fn_listextendedproperty (@propertyName, @myLevel0Type, @myLevel0Name, @myLevel1Type, @myLevel1Name, @myLevel2Type, @myLevel2Name))> 0 begin     EXEC sp_updateextendedproperty  @propertyName, @propertyValue, @myLevel0Type, @myLevel0Name, @myLevel1Type, @myLevel1Name, @myLevel2Type, @myLevel2Name; end else begin     EXEC sp_addextendedproperty @propertyName, @propertyValue, @myLevel0Type, @myLevel0Name, @myLevel1Type, @myLevel1Name, @myLevel2Type, @myLevel2Name; end',N'@propertyName nvarchar(14),@myLevel0Type nvarchar(6),@myLevel0Name nvarchar(3),@myLevel1Type nvarchar(5),@myLevel1Name nvarchar(10),@myLevel2Type nvarchar(6),@myLevel2Name nvarchar(6),@propertyValue nvarchar(4)',@propertyName=N'MS_Description',@myLevel0Type=N'SCHEMA',@myLevel0Name=N'dbo',@myLevel1Type=N'TABLE',@myLevel1Name=N'ADBBSYSMSG',@myLevel2Type=N'COLUMN',@myLevel2Name=N'RECNUM',@propertyValue=N'记录编号'

它使用附加属性的方式,为表或字段创建备注信息,直接存放在数据库中。

回到SQL Server Management Studio中查看,看到它直接附加在字段的扩展属性中。

方便的地方不仅仅在这里,当你右键点击表,以Script Table As生成表的创建脚本时,它的最后一行,会添加属性

CREATE TABLE [dbo].[ADBBSYSMSG](    [RECNUM] [int] IDENTITY(1,1) NOT NULL,    [SYSMSG_ID] [nvarchar](16) NOT NULL,    [MESSAGE] [nvarchar](255) NOT NULL,    [CREATED_DATE] [datetime] NOT NULL,    [CREATED_BY] [nvarchar](10) NOT NULL,    [REVISED_DATE] [datetime] NOT NULL,    [REVISED_BY] [nvarchar](10) NOT NULL, CONSTRAINT [PK_ADBBSYSMSG] PRIMARY KEY CLUSTERED (    [SYSMSG_ID] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 70) ON [PRIMARY]) ON [PRIMARY]GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'记录编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ADBBSYSMSG', @level2type=N'COLUMN',@level2name=N'RECNUM'GO

到目前为止,这是我发现的最优秀的数据库文档工具。新的2.1版本支持SQL Server 2008 R2。

 

Management Table Description

在没有找到SQL Doc之前,我一直寻找一种方法能为数据库创建文档,又便于维护。经过摸索,自己创建了如下工具,以维护数据库文档。

这个工具的原理,和上面的SQL Doc一样,也是运用扩展属性。关键部分的C#代码如下所示

string tablesql = @"  if(select count(1) from fn_listextendedproperty(N'MS_Description'," +   "   N'SCHEMA',N'{2}',N'TABLE',N'{0}',NULL,NULL))>0 " +  "    EXEC sp_updateextendedproperty N'MS_Description',N'{1}', " +  "    N'SCHEMA',N'{2}', N'TABLE',N'{0}',NULL,NULL  " +  "   ELSE   " + "   EXEC sp_addextendedproperty  N'MS_Description',N'{1}', " + "  N'SCHEMA',N'{2}',N'TABLE',N'{0}'   ";        //更新字段的描述 {2} 默认是dbo,但是AdventureWorks出现大量不是dbo的情况        string fieldSql=@"if(select count(1) from fn_listextendedproperty(N'MS_Description',N'SCHEMA', "+       " N'{3}',N'TABLE',N'{0}',N'COLUMN', N'{1}'))>0   "+       " EXEC sp_updateextendedproperty N'MS_Description',N'{2}',  "+       "    N'SCHEMA',N'{3}', N'TABLE',N'{0}',N'COLUMN', N'{1}'  "+       "  ELSE   "+       "  EXEC sp_addextendedproperty  N'MS_Description',N'{2}', "+        "      N'SCHEMA',N'{3}',N'TABLE',N'{0}',N'COLUMN', N'{1}'   ";        //读取表的描述        string getTableDescription = " select value from  " +        " fn_listextendedproperty(N'MS_Description',N'SCHEMA',N'{1}',N'TABLE'," +        " N'{0}',NULL, NULL)  ";        //读取字段的描述        string getFieldDescription=" select objname,value from  "+        " fn_listextendedproperty(N'MS_Description',N'SCHEMA',N'{1}',N'TABLE',"+        " N'{0}',N'COLUMN', NULL)  ";

tableSql是对表进行注释,添加扩展属性,fieldSql是对字段添加扩展属性,下面的两行分别用于读取。整个工具,最关键的部分也是这里,这些是我用查询跟踪器,跟踪出来的。尽管可以直接用SQL Server Management Studio直接完成这个工作,但是没有这个小工具直观,把这些做成工具,方便维护。

 

Custom Table 自定义表

这种方法比较保守,也很稳定。在数据库中专门创建数据表,来存放表及其字段的含义,再设计工具对此进行更新和维护。以金蝶系统为例子,它就是应用这个方法。

要查询表及其字段的文档信息,需要执行如下的语句

select * from t_tabledescription select * from t_fielddescription
--要查具体的某张表描述,执行该语句: select * from t_fielddescription where FTableID=(select FTableID from t_tabledescription where FTableName='t_Item')

此外,金碟的辅助工具,查看表描述信息,也做的简单实用。

金碟的产品线众多,不同产品数据表的用途会有差异,比如这里的适用于服装鞋帽版。

这种方法简单直观,直接在表中存放描述信息。需要提供更新工具,读取查看工具,如果能导出成WORD/EXCEL那就更加完美了。

转载地址:http://ceual.baihongyu.com/

你可能感兴趣的文章
mtr 命令详解(跟踪路由)
查看>>
java设计模式_外观模式
查看>>
nginx中root和alias的区别
查看>>
Spark SQL
查看>>
静态断言
查看>>
赵世-传统行业的移动推广之道
查看>>
梁德伟-唯品会物流信息部技术部应用架构实践总结
查看>>
Newzoo:2017年全球游戏市场预测报告
查看>>
ios小游戏感悟
查看>>
SimpleSwitch
查看>>
SDWellSegmentedControl
查看>>
API接口安全性设计
查看>>
使用magent代理memcached集群
查看>>
Words Seven
查看>>
Maven自定义插件
查看>>
Dubbo线程数量到底设置多少合适?
查看>>
go实现Ringbuf
查看>>
大型纪录片《互联网时代》
查看>>
apache 配置虚拟目录
查看>>
Hibernate、Mybait,Mysql、Postgresql适用场景
查看>>