如何使用PowerDesign进行数据库建模? *** 作方法都有什么呢?

如何使用PowerDesign进行数据库建模? *** 作方法都有什么呢?,第1张

如何使用PowerDesign进行数据库建模? *** 作方法都有什么呢?

*** 作方法

01首先打开PowerDesign软件,点击顶部的文件菜单,从下拉菜单中选择新建选项

02接下来,在d出的新界面中选择概念数据模型选项,然后给模型命名

03然后进入工作区后,我们拖动顶部的实体图标创建几个实体

04接下来双击实体,首先在d出的实体内容编辑界面为实体填写名称等信息

05然后切换到属性选项,设置该界面中实体所拥有的属性字段

06接下来,在设置完实体后,我们拖动关系图标向实体添加一个关系

07然后双击关系线,在关系界面设置实体间的关系类型,包括一对多、一对一、多对多

08接下来,我们单击顶部的Tools菜单,并在下拉菜单中选择Generate Physical Data Model选项

09最后在d出的界面中选择要建模的数据库版本,即可生成建模语言

*** 作方法

01首先打开PowerDesign软件,点击顶部的文件菜单,从下拉菜单中选择新建选项

02接下来,在d出的新界面中选择概念数据模型选项,然后给模型命名

03然后进入工作区后,我们拖动顶部的实体图标创建几个实体

04接下来双击实体,首先在d出的实体内容编辑界面为实体填写名称等信息

05然后切换到属性选项,设置该界面中实体所拥有的属性字段

06接下来,在设置完实体后,我们拖动关系图标向实体添加一个关系

07然后双击关系线,在关系界面设置实体间的关系类型,包括一对多、一对一、多对多

08接下来,我们单击顶部的Tools菜单,并在下拉菜单中选择Generate Physical Data Model选项

09最后在d出的界面中选择要建模的数据库版本,即可生成建模语言

系统提供了根据钻孔数据来构建地下水三维模型的功能,也提供了根据多源数据(剖面图、等值线、钻孔、离散点)构建三维实体模型的功能,但目前多源数据构建三维实体模型的方法还不够成熟和完善。

图5—131 从剖面图中整理提取得钻孔数据

图5—132 剖面图重构前后示意图

图5—133 剖面图的三维显示

图5—134 剖面图的三维查询

1.基于钻孔数据的实体模型的构建

根据研究区的钻孔数据以及从剖面上提取的虚拟钻孔数据可以很方便的构建地下水三维模型,如果虚拟钻孔越能够反映剖面上边界线的变化趋势,那么构建的三维实体模型精度就越高,基于钻孔数据的实体建模流程如图5—135所示。

下面详细论述该建模过程:

(1)选择钻孔,提取钻孔数据,构建构建含水组层面初始DEM三角网。对于特定的建模区域,可能会有数目众多的钻孔,这些钻孔能够提供的信息包括各个钻孔的位置(地理坐标)、钻孔的类型以及含水组的分层信息等。这些信息虽然繁多但相对规整,可以存贮在数据库中,形成特定区域的钻孔属性资料库以备重复使用。当用户构建研究区的三维含水组模型时,首先可选取研究区一定数目的钻孔,然后从钻孔数据库中提取各个钻孔的含水组分层信息作为建模的原始数据,供下面的各个建模步骤使用。

图5—135 基于钻孔数据的华北地下水建模流程

图5—136 含水组骨架模型示意图

然后从原始钻孔数据库中获取各钻孔的孔口位置,构建含水组层面初始DEM三角网。这个初始DEM三角网是构建含水组各个层面的基础,可根据其生成三维含水组模型的骨架结构。但显然,并非研究区内所有含水组在各个钻孔中都有揭露(如:图5—136中钻孔ZK02就缺失了含水组C—3)。对缺失含水组的处理方法有两种:①一般的多层DEM建模法是将其当作尖灭含水组进行处理(如图5—136(a)所示),假定缺失含水组在钻孔位置处尖灭,那么该含水组分界面的控制点应该与该层上一层的层底或下一层的层顶(如图5—136(a)中的P0点)重合。②另一种处理方式认为缺失含水组并非一定在钻孔位置处尖灭,该含水组可能被流水侵蚀掉一部分后在其他位置而非钻孔处发生尖灭,因此,可采用一定的插值算法求出缺失含水组在钻孔位置处的初始高程(即未被侵蚀前的含水组分界面高程),然后再作相应的调整处理。本文采用后一种方法构建华北地下水的模型。

(2)插值缺失含水组在钻孔位置处的初始高程。为求出缺失含水组在钻孔位置处的初始高程,可采用特定的插值算法(如距离反比加权法、自然邻近点法、克立格法等)进行计算。

(3)调整高程。对于插值出来的含水组面高程,需要与原始钻孔数据比较,并进行适当的调整处理。以图5—136(b)所示的情况为例,含水组面3在钻孔ZK02处的插值结果既有可能高于点P0(如点P1),也有可能低于点P0(如点P2);这取决于含水组面上已知控制点的高程和使用的插值算法。对于插值出来的含水组面高程高于点P0的情况,不需要进行任何特殊的处理,因为在建模的第(7)步(见下文)可以将其调整回来;对于插值结果低于点P0的情况,需要强行将其设定为与点P0的高程相等,因为插值出来的含水组面高程虽然与原始钻孔数据不符,但建模的第(7)步却不能将其调整回来,只能在第(3)步先进行高程调整处理。这样,经过第(2)、(3)步的工作,求出了缺失含水组在钻孔位置处的初始高程,为下面的建模工作(如含水组加密、插值等)奠定了基础。

(4)加密初始DEM三角网。对初始DEM三角网进行加密,生成“主TIN”(加密后的含水组层面DEM三角网)。所谓“主TIN”(Primary TIN),是指以钻孔孔口坐标为基准,结合建模区域边界条件,采用标准的三角网加密算法加密后生成的一个三角网。“主TIN”不仅定义了待构建的三维含水组模型的外边界,还能够表达建模区域各个含水组层面的拓扑关系。“主TIN”可以看做是确定建模区域含水组拓扑关系的一个“模板”,它可以沿着钻孔深度自上而下推延至建模区域的全部含水组。这样可以保证各个含水组层面具有确定的、上下一致的拓扑关系,能够极大地简化后续处理的复杂度,增强算法的稳健性。

(5)对加密后的含水组层面高程进行插值。分别提取各个含水组层面的控制点高程信息(包括钻孔数据库中的数据、地质剖面中的控制点数据、含水组等值线数据、含水组高程点数据),然后利用这些点插值求“主TIN”上各个未知点的高程值;如果“主TIN”上的点与钻孔的坐标(指二维平面坐标)一致,则该点的高程不需要插值,直接与钻孔所揭示的含水组控制点高程(在建模的第(3)步已经确定)一致。

(6)含水组层面相交处理。经过第(3)步和第(5)步插值处理后的TIN面可能会出现上下含水组层面交叉的情况,这需要通过含水组层面相交处理来消除。在上下含水组层面求交时,由于第(4)步所定义的“主TIN”具有上下严格一致的拓扑关系,这导致每个TIN面中特定位置的三角形只能与另一个TIN中对应位置的三角形相交,利用这一特性可大大减少TIN面求交的时间复杂度。

(7)调整含水组高程。经过含水组层面相交处理后的“主TIN”可能会出现本应位于下部含水组上的点的高程却高于其上部含水组的情况,这需要调整含水组高程,强行将其拉回到与其上一层相等的高程上。这一工作是通过比较“主TIN”中各个含水组层面对应的顶点高程来完成的。

(8)构建三维含水组模型。前面已经完成了生成各个含水组层面三角网的工作,现在只需要将上下相邻的含水组层面的三角网在竖向上“缝合”起来,即可以构成完整的三维含水组实体模型。这是一个相对简单的过程,只需以顶层(或底层)TIN中的一个三角形为起点,然后循环处理各个含水组以及各个含水组TIN面上的所有三角形即可完成。

2.基于多源数据的实体模型的构建

基于多源数据构建实体模型时首先构建各层的初始底界面模型,如图5-137所示;然后再与断层格局模型及其他底界面模型切割调整,最终形成与断层格局模型拓扑一致的含水组实体模型。

图5—137 基于多源数据的第三含水组底界面初始模型的构建

从目前的数据库及数据仓库建模方法来说,主要分为四类。

第一类是大家最为熟悉的关系数据库的三范式建模,通常我们将三范式建模方法用于建立各种 *** 作型数据库系统。

第二类是Inmon提倡的三范式数据仓库建模,它和 *** 作型数据库系统的三范式建模在侧重点上有些不同。Inmon的数据仓库建模方法分为三层,第一层是实体关系层,也即企业的业务数据模型层,在这一层上和企业的 *** 作型数据库系统建模方法是相同的;第二层是数据项集层,在这一层的建模方法根据数据的产生频率及访问频率等因素与企业的 *** 作型数据库系统的建模方法产生了不同;第三层物理层是第二层的具体实现。

第三类是Kimball提倡的数据仓库的维度建模,我们一般也称之为星型结构建模,有时也加入一些雪花模型在里面。维度建模是一种面向用户需求的、容易理解的、访问效率高的建模方法,也是笔者比较喜欢的一种建模方式。

第四类是更为灵活的一种建模方式,通常用于后台的数据准备区,建模的方式不拘一格,以能满足需要为目的,建好的表不对用户提供接口,多为临时表。

下面简单谈谈第四类建模方法的一些的经验。

数据准备区有一个最大的特点,就是不会直接面对用户,所以对数据准备区中的表进行 *** 作的人只有ETL工程师。ETL工程师可以自己来决定表中数据的范围和数据的生命周期。下面举两个例子:

1)数据范围小的临时表

当需要整合或清洗的数据量过大时,我们可以建立同样结构的临时表,在临时表中只保留我们需要处理的部分数据。这样,不论是更新还是对表中某些项的计算都会效率提高很多。处理好的数据发送入准备加载到数据仓库中的表中,最后一次性加载入数据仓库。

2)带有冗余字段的临时表

由于数据准备区中的表只有自己使用,所以建立冗余字段可以起到很好的作用而不用承担风险。

举例来说,笔者在项目中曾遇到这样的需求,客户表{客户ID,客户净扣值},债项表{债项ID,客户ID,债项余额,债项净扣值},即客户和债项是一对多的关系。其中,客户净扣值和债项余额已知,需要计算债项净扣值。计算的规则是按债项余额的比例分配客户的净扣值。这时,我们可以给两个表增加几个冗余字段,如客户表{客户ID,客户净扣值,客户余额},债项表{债项ID,客户ID,债项余额,债项净扣值,客户余额,客户净扣值}。这样通过三条SQL就可以直接完成整个计算过程。将债项余额汇总到客户余额,将客户余额和客户净扣值冗余到债项表中,在债项表中通过(债项余额×客户净扣值/客户余额)公式即可直接计算处债项净扣值。

另外还有很多大家可以发挥的建表方式,如不需要主键的临时表等等。总结来说,正因为数据准备区是不对用户提供接口的,所以我们一定要利用好这一点,以给我们的数据处理工作带来最大的便利为目的来进行数据准备区的表设计。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6762866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存