基础元数据设计

阅读(1116) 标签: lmd,

描述数据库中各个表的数据结构,以及各类表间关系的文件叫做元数据文件;元数据文件使用DQL元数据层设计器编辑,存为json格式的文件,文件的默认扩展名为.lmd。它可以和报表DQL Server的驱动包一起部署在服务器端,客户端以标准JDBC的连接方式连接访问。

打开DQL元数据层设计器,在菜单栏中点击文件>新建,创建元数据文件:

这就是设计好的元数据文件,后面我们会逐步对元数据文件中的配置做详细介绍。

Ø 

元数据中的表有四种,普通表、SQL型表假表分表,在这里先介绍普通表。

普通表的物理表名必须和数据库中的表名或视图名完全一致。如果是带模式的表,则必须把表名定义成schema.table,如:dba.公司信息表名称的初始值和物理表名相同,也可以自行修改。

常规页面中,可以设定表或视图的字段,数据来源需要和表或视图在数据库中的字段名相同。字段名称的初始值和数据来源相同,可以自行修改。

新建普通表不仅可以手动点击菜单添加外,还可以直接将数据库中的一个或多个表导入到元数据中,导入方法如下所示:

在菜单栏中通过系统>数据源或者点击,可以设定数据源连接:

数据源连接窗口中,可以配置数据源的连接属性,或连接指定的数据源。在DQL元数据层设计器中,不允许同时连接多个数据源。在数据源连接列表中,dqldemo为默认的HSQL数据库。

连接数据源后,可以直接导入数据库中的物理表或视图为元数据的表,然后再添加修改主键、外键等属性。导入时,在工具栏中点击导入数据库表

然后在弹出窗口中选择需要导入的数据库表即可。

如果数据库中未设定主键及外键信息,则需要在元数据的表字段信息中修改。

如果选择了选项使用数据库中描述作为表和字段名称,则导入表时,表名和字段名来自数据库中表和字段的描述。

Ø  SQL型表

SQL表与数据库中的视图类似,它是执行SQL语句后返回的结果集所构成的表。

在快捷工具栏中,点击增加SQL型表,或者在菜单栏中选择相应选项,可以在元数据中新建SQL型表:

SQL型表需要设定表名称及SQL语句,设定完毕后,连接数据源后,可以执行读取结构,自动分析取结果集中的字段信息: 

执行时,在从数据库获取结果集后,数据来源为空时,会缺省使用字段名称进行查询。此规则适用于除假表外的所有表类型。

Ø  主键

用来唯一确定记录的字段,一般情况和数据库物理表的主键定义一致。导入数据库物理表的时候,能把数据库的主键一起读进来。也可以在元数据中修改主键字段,使之和数据库不一致。如果是SQL型表,读取结构时不会包含主键信息,主键需要设定。

设定主键,只需要勾选字段后面主键的复选框即可。

与数据库中的情况相似,一个表的主键可以是一个,也可以是多个;单一主键的值,或者多个主键值的组合,在一个表中应该具有唯一性

元数据中表的主键可以人工设定,在设定时一定要注意主键的合理性,在定义表的主键时,报表DQL Server并不会去验证主键设定是否合理。如果设定的主键值在表中不唯一,在查询或者汇总计算时就可能产生错误。

Ø  外键

与数据库中的概念相似,DQL中,表的外键字段指向另一张表主键,从而产生关联。导入数据库物理表的时候,会把数据库的外键定义一起读进来。在元数据中可以修改外键的定义,不需要和数据库的定义完全一致。

 

外键名称:外键的名称可以直接编辑,设定时不允许与本表的字段名相同,也不允许与本表的其它外键名称相同,否则引用外键时会产生错误;如果当前外键是由单外键字段组成的,那么外键名称通常可以不使用,而是用外键字段来代替;如果当前外键是由多个外键字段组合成的,那么在引用外键指向表的字段时,只能使用外键名称,如上图中fk1fk2fk3均为外键名称,选中外键的外键名称是fk2

对应表名:外键所指向的表名,当指向表的主键唯一且非外键时,那么这个表称为维表,如上图所示的维表是:产品。

引用字段:外键指向表的主键,当这个主键非外键时,它被称为,如上图所示的维是:产品.产品ID。当引用字段并非维时,即引用字段是外键,此时,引用字段会指向新的引用字段……这样的引用最终会指向一个维,这个维就是最初外键指向的

外键字段:当前表的字段,和引用字段一一对应,如上图中所示入库单表的外键字段是:产品ID

当日期型字段特别多时,使用菜单日期字段自动映射日期维,可使日期型字段自动对应日期假表。

DQL中,外键字段和维字段的地位是完全一样的,可以把外键字段看成维字段

任何表的主键都可以视为维字段。如果某个表的主键是外键,那么这个主键的维即为外键指向的维;如果主键并非外键,那么这个主键的维就是它本身。对于非主键的字段,只有当它是外键时才是维字段,字段的维即为外键指向的维。

举例:

根据上图所示,“回款单”表中的客户ID字段指向“客户”表的客户ID字段,“回款单”表与“客户”表之间的数据关系为多对一的关系,其中的相关概念描述如下:

外键字段:回款单”表的客户ID字段

维表:客户”表

维:客户”表的主键客户ID字段

DQL的时候,可以像引用属性一样引用外键表的字段,比如:SELECT 客户ID.客户名称,回款日期,金额 FROM 回款单,这里客户ID.客户名称引用的是客户ID指向的“客户”表的客户名称字段。

 

知识点:

1) 对于单一字段形成的外键,在使用DQL时,可以用外键字段.外键表的字段名的方式来直接使用。

2) 对于多字段组成的外键,在使用DQL时,可以用外键名称.外键表的字段名的方式来直接使用。

3) 使用外键名称.外键表的字段名方式引用,既可用于多字段组成的外键,也可用于单一字段形成的外键情况。

 

Ø  伪字段

通过设定主键和外键,使得表与表相互关联。如订单,根据外键关联,可以获得销售以及与销售表同维的雇员等表的信息,也可以获得客户以及与客户表同维的VIP客户等表的信息,再通过雇员的外键关联,可以获得城市表的信息,等等。

表的外键,同维的表的外键,通称为广义外键,广义外键的同维表的外键,同样属于广义外键,另外,广义外键的层函数也是一种广义外键。

表的字段,同维表的字段,广义外键的同维表的字段,通称为广义字段,广义字段的层函数也是一种广义字段。

用广义字段定义的表达式,通称为伪字段,按普通字段处理,但不作为外键。

外键指向表的同维表集合,通称为广义外键表但不包含主键外键时指向的本表同维表。

 

通过在元数据中设定伪字段,可以命名一些常用的广义字段,可以使得对它们的查询语句更为精简方便。例如:

如果在回款单中定义广义字段客户VIP结束如下:

伪字段可以相当于普通字段使用,如查询的DQL可以写成:SELECT 客户VIP结束年月 FROM 回款单,而不必写为SELECT 客户ID.结束时间#FROM 回款单。伪字段也可以作为汇总维度使用,如SELECT 回款单.COUNT(*) 本年到期VIP客户回款笔数 ON FROM 回款单 BY 客户VIP结束年月#

 

知识点:

1) 在元数据中定义的伪字段在DQL元数据文件中使用时与普通字段相同。