新聞中心
隨著項(xiàng)目的進(jìn)度推進(jìn),數(shù)據(jù)庫(kù)的表越來(lái)越多,字段也頻繁的變更。如何對(duì)這些變更作出文檔說(shuō)明,既要方便,又要有可維護(hù)性。比如,可以為所有的表創(chuàng)建WORD文檔來(lái)說(shuō)明,各個(gè)表的含義和字段的意義,但是如果數(shù)據(jù)庫(kù)表或字段變更頻繁的話,更新WORD文檔是個(gè)相對(duì)麻煩的工作。在博客園中曾經(jīng)有技術(shù)人員專門創(chuàng)建文檔生成工具,以程序的方式直接生成WORD文檔,使為數(shù)據(jù)庫(kù)創(chuàng)建文檔的可行性提高很多,輕松點(diǎn)擊鼠標(biāo)就可以做完的工作,非常容易。

創(chuàng)新互聯(lián)自2013年起,先為溫江等服務(wù)建站,溫江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為溫江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
SQL Doc
推薦給各位的數(shù)據(jù)庫(kù)文檔工具箱中,排名第一的是RedGate公司的SQL Doc。
創(chuàng)建新項(xiàng)目,連接數(shù)據(jù)庫(kù)服務(wù)器,選擇數(shù)據(jù)庫(kù),在右邊的窗格中為表或它的字段創(chuàng)建描述信息。
使用SQL Profiler查詢跟蹤器,檢測(cè)到它進(jìn)行如下的SQL語(yǔ)句
- 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'記錄編號(hào)'
它使用附加屬性的方式,為表或字段創(chuàng)建備注信息,直接存放在數(shù)據(jù)庫(kù)中。
回到SQL Server Management Studio中查看,看到它直接附加在字段的擴(kuò)展屬性中。
方便的地方不僅僅在這里,當(dāng)你右鍵點(diǎn)擊表,以Script Table As生成表的創(chuàng)建腳本時(shí),它的最后一行,會(huì)添加屬性
- 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]
- GO
- EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'記錄編號(hào)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ADBBSYSMSG', @level2type=N'COLUMN',@level2name=N'RECNUM'
- GO
到目前為止,這是我發(fā)現(xiàn)的最優(yōu)秀的數(shù)據(jù)庫(kù)文檔工具。新的2.1版本支持SQL Server 2008 R2。
Management Table Description
在沒有找到SQL Doc之前,我一直尋找一種方法能為數(shù)據(jù)庫(kù)創(chuàng)建文檔,又便于維護(hù)。經(jīng)過(guò)摸索,自己創(chuàng)建了如下工具,以維護(hù)數(shù)據(jù)庫(kù)文檔。
這個(gè)工具的原理,和上面的SQL Doc一樣,也是運(yùn)用擴(kuò)展屬性。關(guān)鍵部分的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} 默認(rèn)是dbo,但是AdventureWorks出現(xiàn)大量不是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是對(duì)表進(jìn)行注釋,添加擴(kuò)展屬性,fieldSql是對(duì)字段添加擴(kuò)展屬性,下面的兩行分別用于讀取。整個(gè)工具,最關(guān)鍵的部分也是這里,這些是我用查詢跟蹤器,跟蹤出來(lái)的。盡管可以直接用SQL Server Management Studio直接完成這個(gè)工作,但是沒有這個(gè)小工具直觀,把這些做成工具,方便維護(hù)。
Custom Table 自定義表
這種方法比較保守,也很穩(wěn)定。在數(shù)據(jù)庫(kù)中專門創(chuàng)建數(shù)據(jù)表,來(lái)存放表及其字段的含義,再設(shè)計(jì)工具對(duì)此進(jìn)行更新和維護(hù)。以金蝶系統(tǒng)為例子,它就是應(yīng)用這個(gè)方法。
要查詢表及其字段的文檔信息,需要執(zhí)行如下的語(yǔ)句
- select * from t_tabledescription
- select * from t_fielddescription
--要查具體的某張表描述,執(zhí)行該語(yǔ)句:
- select * from t_fielddescription where FTableID=(select FTableID from t_tabledescription where FTableName='t_Item')
此外,金碟的輔助工具,查看表描述信息,也做的簡(jiǎn)單實(shí)用。
金碟的產(chǎn)品線眾多,不同產(chǎn)品數(shù)據(jù)表的用途會(huì)有差異,比如這里的適用于服裝鞋帽版。
這種方法簡(jiǎn)單直觀,直接在表中存放描述信息。需要提供更新工具,讀取查看工具,如果能導(dǎo)出成WORD/EXCEL那就更加完美了。
網(wǎng)站名稱:ASP.NETWeb開發(fā)框架之六數(shù)據(jù)庫(kù)文檔方法
分享路徑:http://m.fisionsoft.com.cn/article/coocois.html


咨詢
建站咨詢
