元数据介绍

 

需求背景

在软件系统开发过程中,对于一般的只包括增、删、改、查等行为的单表维护功能、主子表功能等规则性很强并且覆盖面很广的功能,界面层和数据库层都是稳定的,唯一变化的是逻辑层,而开发人员在前台界面和数据库访问上的开发要花费大量的时间。为了提高开发效率,可以将界面层和数据库层进行抽象,通过某种解决方案,让开发人员对数据结构和界面进行配置,同时只需编写功能相关的逻辑代码就可以快速开发出一个业务功能。

软件系统上线后,稳定一段时间,项目顺利结束。但随着业务的扩展,常常会出现业务特性变化(不是业务逻辑)的需求,对应到软件系统中,就是业务功能的变化和数据库结构的变化。这时往往会导致数据库层、业务层、界面层各个层面的修改,数据库结构和代码的修改对于软件系统是很大的变动,而且技术难度较大,用户无法完成。而开发方也因为人员流动导致开发人员不熟悉该软件系统,修改起来很有难度。因此需要一个比较好的解决方案允许用户自定义数据、自定义界面。

GAP平台的数据字典组件可以很好的解决上面提到的场景,不仅提高了开发效率,而且增强了系统的可扩展性,可维护性。

 

功能介绍

GAP数据字典组件包含三方面的内容:元数据管理、基础数据管理、控制数据管理。元数据管理,是对于数据库表、数据库列、表间关系的管理,可以实现动态修改数据结构而不需要改动程序;基础数据管理可以保证数据的一致性、准确性,并且有利于多个系统间的数据交换;控制数据管理包括界面定制、界面解析等内容,方便用户的界面自定义。

 

版本信息

  1. 当前版本为2.1版本
  2. 增加了工具栏视图,页面布局,范围查询页面控件,网上书店高级应用等

 

应用场景

在软件开发领域,没有任何一种技术可以解决所有软件开发问题,因此任何技术、解决方案、组件都有自己的应用场景,数据字典也不例外。

数据字典的目标是提高软件开发效率,增强系统的可扩展性,可维护性。数据字典面向的领域是企业应用领域。

 

元数据介绍

  • 元数据(metadata)最常见的定义为有关数据的结构数据,或者再简单一点就是关于数据的信息。数据库中的元数据就是表信息,表内的列信息,表间关系信息,字段约束信息。
  • Oracle数据库
    • Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。

 

  1.1 静态数据字典
    Oracle数据字典中,对象名称多数以"USER.","ALL.","DBA."为前缀。"USER."视图中记录通常记录执行查询的帐户所拥有的对象的信息,"ALL."视图中记录包括"USER"记录和授权至PUBLIC或用户的对象的信息,"DBA."视图包含所有数据库对象,而不管其所有者。
  1.2 动态数据字典
    Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。 Oracle中这些动态性能视图都是以v$开头的视图,比如v$access。
  1.3 通过sql语句获取数据字典信息
    * 获取用户表信息
      select table_name from user_tables
    * 根据表名获取表内字段信息
      select * from user_tab_columns where table_name=?
    * 获取主键信息
      select * from user_cons_columns where constraint_name in (select constraint_name from user_constraints where constraint_type ='P')
    * 获取外键信息
      select a.constraint_name as constraintName,a.table_Name as pktableName,a.column_name as pkcolumnName,b.table_name as fkTableName,b.column_name as fkColumnName from user_cons_columns a ,user_cons_columns b, user_constraints c
where a.constraint_name =c.constraint_name and b.constraint_name=c.r_constraint_name and c.constraint_type='R'
  • SQL Server数据库
    • SQL Server数据库提供三种方式来获取元数据信息:系统存储过程,系统视图和系统表。
    a.使用系统存储过程与系统函数访问元数据

系统存储过程与系统函数在系统表和元数据之间提供了一个抽象层,使得我们不用直接查询系统表就能获得当前数据库对象的元数据。

  • 常用的与元数据有关的系统存储过程有以下一些:

  • 常用的与元数据有关的系统函数有以下一些:

  • 由于我们无法直接利用到存储过程与函数的返回结果,因此只有在我们关心的只是查询的结果,而不需要进一步利用这些结果的时候,我们会使用系统存储过程与系统函数来查询元数据。

 

  例如,如果要获得当前服务器上所有数据库的基本信息,我们可以在查询分析器里面运行:

  EXEC sp_databases

  GO

  在返回结果中我们可以看到数据库的名称、大小及备注等信息。

  但是如果要引用这部分信息,或者存储这部分信息以供后面使用,那么我们必须借助中间表来完成这个操作:

  CREATE TABLE #sp_result

  (

  DATABASE_NAME sysname,

  DATABASE_SIZE int,

  REMARKS varchar(254) NULL

  )

  GO

  INSERT INTO #sp_result

  EXEC ('sp_databases')

  GO
  • b.使用系统视图访问元数据
    • 系统视图基于 SQL-92 标准中针对架构视图的定义,这些视图独立于系统表,提供了关于 SQL Server 元数据的内部视图。系统视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。因此对于应用程序来说,只要是符合 SQL-92 标准的数据库系统,使用系统视图总是可以正常工作的。
    常用的系统视图有以下一些:

  • 由于这些信息架构都是以视图的方式存在的,因此我们可以很方便地获得并利用需要的信息。
    • 例如,我们要得到某个表有多少列,可以使用以下语句:

 

  SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS

  WHERE TABLE_NAME='mytable'
  • c.使用系统表访问元数据 虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL Server 将所有数据库对象的信息均存放在系统表中,作为 SQL Server 的管理、开发人员,了解各个系统表的作用将有助于我们了解 SQL Server 的内在工作原理。 SQL Server 的系统表非常多,其中最常用的与元数据查询有关的表有如下一些:

  • 将系统存储过程、系统函数、信息架构视图与系统表结合使用,可以方便地让我们获得所有需要的元数据信息。

 

  示例:

  1、 获得当前数据库所有用户表的名称。

  SELECT OBJECT_NAME (id)

  FROM sysobjects

  WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0

  其中主要用到了系统表 sysobjects以及其属性 xtype,还有就是用到了 OBJECTPROPERTY 系统函数来判断是不是安装 SQL Server 的过程中创建的对象。

  2、 获得指定表上所有的索引名称

  SELECT name FROM sysindexes

  WHERE id = OBJECT_ID ('mytable') AND indid > 0
  • DB2数据库
    • DB2是IBM公司的产品,因为以前没有用过,这次费了我很多的无用功,不过DB2的控制中心做的还是不错的,比SQL Server实用多了。 DB2的元数据信息可以通过系统视图查询出来。

猜你喜欢

转载自1014529140.iteye.com/blog/2322071