当前位置:首页 » 文件传输 » 数据访问结构化方式
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据访问结构化方式

发布时间: 2022-08-27 04:42:59

‘壹’ 汇编:寻址方式在结构化数据访问中的应用

; 你的程序里已经用了变量名,就是那个用于存放结果的table,但原始数据部分,没有定义变量名。
; 只有数据,没有名称,这是不好的习惯,就像人没有名字一样。
; 不用变量名也可以,但仅限于数据类型很少的情况,而且,必须精准计算不同类型数据的开始地址。
; 本程序通过编译,运行正确
; 若到DEBGU里调试,可输入:
G10D
然后输入:
d112 L150
查看,下面是根据题目编制的程序:
Code Segment
Assume CS:Code,DS:Code
; 年份
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
; 总收入
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
; 雇员人数
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
xor bx,bx ;年份数据偏移地址
mov si,168 ;雇员人数数据偏移地址(21x4x2)
lea di, table ;结果偏移地址
mov cx,21 ;21年
Calculate: mov ax,[bx]
stosw
mov ax,[bx][2]
stosw ;年份存在TABLE中0-3内存单元
mov al,20h ;空格
stosb ;第4单元空格
mov ax,[bx][84] ;读取总收入低字
push ax
stosw ;5-6单元为总收入低字
mov ax,[bx][86] ;读取总收入高字
add bx,4 ;年份数据指针加4个字节
push ax
stosw ;7-8单元为总收入高字
mov al,20h ;空格
stosb ;第9单元空格
lodsw ;读取雇员人数
mov bp,ax
stosw ;AB两个单元存放雇员
mov al,20h ;空格
stosb ;C单元空格
pop dx
pop ax
div bp ;总收入/雇员人数=人均收入,ax=商数,dx=余数
stosw ;DE单元存放人均收入
mov al,20h ;空格
stosb ;F单元空格
loop Calculate
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Even
table: ;存放结果
Code ENDS
END Start ;编译到此结束

‘贰’ 将非结构化数据转化为结构化数据有哪些方法

非结构化数据转化为结构化数据有以下几个方法:
1. 传统方法——树
虽然绝大多数数据是非结构化格式的,但是结构化数据普遍存在于各类商业应用软件和系统中,例如产品数据存储,交易日志,ERP和CRM 系统中都存在大量结构化数据,这些结构化数据仍应用着陈旧的数据技术处理,如基于规则的系统,决策树等。这样的方法需要人工进行特征提取,操作繁琐且需要耗费大量人力进行数据标签。
非结构化数据,也就是通常使用的杂乱无章的文本数据。非结构化数据通常是不能用结构化数据的常规方法以传统方式进行分析或处理的,所以这也成为AI领域一个常见的难题,要理解非结构化数据通常需要输入整段文字,以识别其潜在的特征,然后查看这些特征是否出现在池中的其他文本中。因此,在处理此类任务时,深度学习以其出色的特征提取能力一骑绝尘,于是所有人都开始想着把神经网络用在结构化数据上——建个全连接层,把每一列的内容作为输入,再有一个确定好的标签,就可以进行训练和推理了。
2. 新型利器——深度学习
需要寻找结构化数据的语义,目前要解决的问题主要有:
①数据清洗。要在结构化数据 AI 应用上有所成果,首先需要解决人工数据清洗和准备的问题,找到极少或者没有人为干预的自动化方法,才能使得这一应用可落地可拓展。
②异构数据。处理结构化数据的其中一大挑战在于,结构化数据可能是异构的,同时组合了不同类型的数据结构,例如文本数据、定类数据、数字甚至图像数据。其次,数据表有可能非常稀疏。想象一个 100 列的表格,每列都有 10 到 1000 个可能值(例如制造商的类型,大小,价格等),行则有几百万行。由于只有一小部分列值的组合有意义,可以想象,这个表格可能的组合空间有多么“空”。
③语义理解。找到这些结构化数据的语义特征。处理结构化数据并不仅仅依赖于数据本身的特征 (稀疏,异构,丰富的语义和领域知识),数据表集合 (列名,字段类型,域和各种完整性约束等)可以解码各数据块之间的语义和可能存在的交互的重要信息。也就是说,存储在数据库表中的信息具有强大的底层结构,而现有的语言模型(例如 BERT)仅受过训练以编码自由格式的文本。
3. 结构化数据清洗
除了某些特定的需求外,经过预处理之后的结构化数据,应该满足以下特点:
①所有值都是数字–机器学习算法取决于所有数据都是数字;
②非数字值(在类别或文本列中的内容)需要替换为数字标识符;
③标识并清除具有无效值的记录;
④识别并消除了无关的类别;
⑤所有记录都需要使用相同的一致类别。

‘叁’ 结构性数据和非结构性数据的区别是什么

结构化数据是以固定字段驻留在一个记录或文件内。它事先被人为组织过,也依赖于一种确保数据如何存储 处理和访问的模型。结构化查询语言(SQL)通常用于管理在数据库的结构化数据表。

非结构化数据是结构化的反面,是指没有一个预定义的数据模型或不是以一种预先已经定义好的方式进行组织。数据不必以某种方式组织,直接按照学科方式分组分类,主要是文本,但也可以图像、音频和视频。

让我们不要忘记社会媒体。Facebook、Twitter、LinkedIn、Pinterest等等——这些都含有非结构化和半结构化数据。有价值的数据,非常有利于大型和小型企业,。然而,在它们有用之前需要结构化。

半结构化数据是个跨结构化和非结构化的数据。它是结构化数据但不适合正式的关系数据库模型或其他序列来源。很多XML文件也可能属于这一类,虽然也有结构化和非结构化的XML文档。

‘肆’ 什么是结构化数据,非结构化数据和半结构化数据

结构化数据也称为行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。结构化数据标记是能让网站以更好的姿态展示在搜索结果当中的方式。做了结构化数据标记,便能使网站在搜索结果中良好地展示丰富网页摘要。

非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。非结构化数据其格式非常多样,标准也是多样性的,而且在技术上非结构化信息比结构化信息更难标准化和理解。

半结构化数据具有一定的结构性,是一种适于数据库集成的数据模型。也就是说,适于描述包含在两个或多个数据库(这些数据库含有不同模式的相似数据)中的数据。它也是一种标记服务的基础模型,用于Web上共享信息。

(4)数据访问结构化方式扩展阅读:

结构化数据的标记方式

1、使用HTML代码标记

HTML代码标记的方式主要有3种:微数据、微格式和RDFa。但对于一些外贸站站来说,标记是以微数据为主,少许时候也会用到微格式,视不用的页面类型而定。

2、使用微数据标记

使用微数据标记的话,主流是使用schema进行标记。但由于页面上有些项, schema并没推出相应的标记代码,从而也得仍旧使用data-vocabulary来标记, 这样的话页面代码上就会出现新旧代码并存的情况。

‘伍’ 数据库按数据的组织方式来分可以分为哪三种模型

1、层次模型:

①有且只有一个结点没有双亲结点(这个结点叫根结点)。

②除根结点外的其他结点有且只有一个双亲结点。

层次模型中的记录只能组织成树的集合而不能是任意图的集合。在层次模型中,记录的组织不再是一张杂乱无章的图,而是一棵"倒长"的树。

2、网状模型 :

①允许一个以上的结点没有双亲结点。

②一个结点可以有多个双亲结点。

网状模型中的数据用记录的集合来表示,数据间的联系用链接(可看作指针)来表示。数据库中的记录可被组织成任意图的集合。

3、关系模型:

关系模型用表的集合来表示数据和数据间的联系。

每个表有多个列,每列有唯一的列名。

在关系模型中,无论是从客观事物中抽象出的实体,还是实体之间的联系,都用单一的结构类型

(5)数据访问结构化方式扩展阅读

1、无条件查询

例:找出所有学生的的选课情况

SELECT st_no,su_no

FROM score

例:找出所有学生的情况

SELECT*

FROM student

“*”为通配符,表示查找FROM中所指出关系的所有属性的值。

2、条件查询

条件查询即带有WHERE子句的查询,所要查询的对象必须满足WHERE子句给出的条件。

例:找出任何一门课成绩在70以上的学生情况、课号及分数

SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.score

FROM student,score

WHERE score.score>=70 AND score.stno=student,st_no

这里使用UNIQUE是不从查询结果集中去掉重复行,如果使用DISTINCT则会去掉重复行。另外逻辑运算符的优先顺序为NOT→AND→OR。

例:找出课程号为c02的,考试成绩不及格的学生

SELECT st_no

FROM score

WHERE su_no=‘c02’AND score<60

3、排序查询

排序查询是指将查询结果按指定属性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。

例:查找不及格的课程,并将结果按课程号从大到小排列

SELECT UNIQUE su_no

FROM score

WHERE score<60

ORDER BY su_no DESC

4、嵌套查询

嵌套查询是指WHERE子句中又包含SELECT子句,它用于较复杂的跨多个基本表查询的情况。

例:查找课程编号为c03且课程成绩在80分以上的学生的学号、姓名

SELECT st_no,st_name

FROM student

WHERE stno IN (SELECT st_no

FROM score

WHERE su_no=‘c03’ AND score>80 )

这里需要明确的是:当查询涉及多个基本表时用嵌套查询逐次求解层次分明,具有结构程序设计特点。在嵌套查询中,IN是常用到的谓词。若用户能确切知道内层查询返回的是单值,那么也可用算术比较运算符表示用户的要求。

5、计算查询

计算查询是指通过系统提供的特定函数(聚合函数)在语句中的直接使用而获得某些只有经过计算才能得到的结果。常用的函数有:

COUNT(*) 计算元组的个数

COUNT(列名) 对某一列中的值计算个数

SUM(列名) 求某一列值的总和(此列值是数值型)

AVG(列名) 求某一列值的平均值(此列值是数值型)

MAX(列名) 求某一列值中的最大值

MIN(列名) 求某一列值中的最小值

例:求男学生的总人数和平均年龄

SELECT COUNT(*),AVG(st_age)

FROM student

WHERE st_sex=‘男’

例:统计选修了课程的学生的人数

SELECT COUNT(DISTINCT st_no)

FROM score

注意:这里一定要加入DISTINCT,因为有的学生可能选修了多门课程,但统计时只能按1人统计,所以要使用DISTINCT进行过滤。

‘陆’ 数据访问层常见的方法有哪几种

一、响应重定向方法

响应重定向方法是目前为止将一个网页重定向到另一个网页的最简单的方法的最简单的方法。当Web服务器接到一个重定向请求后,它会将一个响应头送给客户端,这将导致客户端发送一个新的请求到服务器。按句话说,一个重定向请求实际上是两个请求响应:一个是最初的请求响应,另一个是新的重定向请求响应。

在ASP.NET中实现重定向很容易。下面的代码演示了如何使用Response.Redirect方法实现网页重定向:

protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx");
}

要注意的是重定向请求只是一个GET请求,这就意味着我们不能从源页中通过重定向命令提交数据。但是我们可以在重定向中使用查询字符串来传递数据。如下面代码所示:

protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx?userName=" + UserName.Text));
}

上面的例子将一个查询字符串作为参数传递给了Response.Redirect方法的目标URL。我们可以通过如下的代码获得源数据。
protected void Page_Load(object sender, EventArgs e)
{
string userName = Request["userName"];
}

二、服务器传输方法

和依赖于客户端向另一个新页发请求不同,服务器传输是一种服务器重定向技术,这种技术通过简单的改变Web服务器所处理的代码来达到请求一个新页的目的。当被请求页和源页面在同一个服务器时,服务器传输要比 Response.Redirect方法更有效,这是由于这种技术可以避免额外的开销,仅仅使用服务器的资源就可以进行重定向。要注意的这种技术有一个副作用,在页面进行重定向时,客户端的URL仍然会保持源页面的URL,这可能会使客户认为他们所获得的数据是源页面产生的。当然,在大多数情况下,这不是问题,但是这将使调试变得更困难。

Server.Transfer方法还可以保存初始页的 HttpContext。因此,目标页可以访问源页面的值。我们可以使用FormsCollection属性来从目标页面中获得源页面的值。首先,要确定我们使用了被重载的方法,这个方法有两个参数:目标URL和一个Boolean类型的值,告诉服务器是否保存用于描述源页面值的Form。如下面的代码所示:

Server.Transfer("Menu.aspx",true);
然后,我们在目标页面中获得一个叫txtUserName的Textbox控件的值的代码如下:
object obj = Request.Form["txtUserName"];

三、Response.Redirect和Server.Transfer的比较

由于Response.Redirect方法要进行两次请求响应操作,因此,我们应该在对性能要求高的网站尽量避免使用这种方法。然而,只从技术上说,使用redirect方式确实可以从一个网页跳到另一个网页。相比之下,Server.Transfer会更有效率,但是跳转的范围仅限于同一个Web服务器的不同网页。从本质上说,我们可以使用 Server.Transfer来消除不必要的请求响应操作。如果我们需要重定位到不同服务器的网页,就需要使用Response.Redirect方法。

四、跨页提交概述

在ASP.NET 2.0中,我们可以通过实现IbuttonControl接口提交给不同的WebForm,来实现跨网页的提交。和Response.Redirect类似,跨网页提交是一个基于客户端的传输机制,但也有点象Server.Transfer,目标网页也可以访问源网页的数据。为了使用跨网页提交,我们需要在源网页中的PostBackUrl属性中指定目标URL。

五、实现跨网页提交

这部分将讨论一下如何在ASP.NET2.0中实现跨网页提交。为了开始我们的学习,假设有两个Web页,一个是源Web页,另一个是目标Web页。在源网页中初始化了使用按钮进行的跨网页提交操作。我们首先必须设置目标网页按钮的PostBackUrl属性,顺便说一句,所有实现了System.Web.UI.WebControls.IbuttonControl接口的Web控件都有跨网页提交的特性。下面的代码将演示这一过程。

PostBackUrl="~/target.aspx" text = "Post to a target page"/>
当我们设置PostBackUrl属性时,ASP.NET框架将相应的控件绑定到一个新的叫WebForm_DoPostBackWithOptions的JavaScript函数,产生的Html代码如下:

onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "","Target.aspx", false, false))" id="btnSubmit" />

对于上面的html代码来说,当用户单击按钮时,浏览器将提交目标URL(Target.aspx),而不是源URL。

六、从目标页面中获得源页面控件的值

ASP.NET2.0提供了一个叫PreviousPage的新的属性,这个属性无论在何时当前页面进行跨网页提交操作时都会指向源页面。要注意的是,当源页面和目标页面在不同的应用程序中时,这个属性包含null(这个null并不是未初始化的意思)。还有要注意的是当目标网页访问PreviousPage属性时可以获得源页面的数据,ASP.NET运行时装载并执行了源页面。这将引发ProcessChildRequest事件的发生。而且,它还会引发Page_Init事件、Page_Load和任何其他的源页面按钮单击事件。

因此,我们要避免由于不小心进行误操作,所以最好通过 IsCrossPostBack属性来确认是否为一个跨网页提交发生,如果这个属性值为true,那么目标网页就是通过一个跨网页提交动作而调用的。如果是通过另外一种方式调用的(如一般的请求、Response.Redirect或是一个Server.Transfer),这个属性的值为false。下面的例子演示了如何使用这个属性。

if ( PreviousPage.IsCrossPagePostBack)
{
//执行代码
}
//******************************************
这个PreviousPage属性在Server.Transfer和跨网页提交中都可以使用。在ASP.NET2.0中,我们可以在调用Server.Transfer操作后使用PreviousPage属性在目标页面中来获得源页面的数据,代码如下:
*******************************************//
{
Server.Transfer("menu.aspx");
}

protected void Redirect_Click(object sender, EventArgs e)

//在这个接收面中我们现在可以获得Web页面的数据,代码如下:

protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
TextBox txtBox = (TextBox)
PreviousPage.FindControl("txtUserName");
if (textBox != null)
string userName = textBox.Text;
//其他可执行的代码
}
}

要注意的是上面的代码必须将txtUserName控件转换为TextBox类型,以便可以访问其中的值。

七、使用PreviousPageType

PreviousPageType属性提供了在跨网页操作中访问源页面的强类型能力,下面让我们演示一下如何不通过任何类型转换来从源页面中获得控件值。代码如下:

< asp:Textbox ID="txtUserName" Runat="server" />
< asp:Textbox ID="txtPassword" Runat="server" />
< asp:Button ID="Submit" Runat="server" Text="Login"PostBackUrl="Menu.aspx" />

要注意的是单击按钮可以重定向到一个叫“Menu.asp”的目标页。这个目标页可以使用如下的代码获得用户名和密码:

八、保存视图状态

对于跨网页提交来说,ASP.NET2.0 内嵌了一个叫__POSTBACK的隐藏字段,这个字段包含了关于源页面的视图信息 -- 也就是由源页面提供了,包含了一个带有一个非空PostBackUrl属性值的服务端控件。目标页可以使用__POSTBACK中的信息来获得源页面的视图状态信息。代码如下:

if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
PreviousPage.IsValid)
{
TextBox txtBox = PreviousPage.FindControl("txtUserName");
Response.Write(txtBox.Text);
}

在上面的代码中核对了用于确保PreviousPage属性不为 null的检查代码。顺便提一下,如果目标页和源页面不在同一个应用程序中,这个PreviousPage属性的值为null。只有在进行跨网页提交操作时,IsCrossPagePostBack属性才为true。

这个跨网页提交的特性,是ASP.NET2.0中最强有力的特性之一,这种技术将允许在一个页面中提交到另外一个页面,并且可以在目标页面地无缝地操作源页面中的数据。

‘柒’ 如何将非结构化数据转化为结构化数据

随着机器学习的发展,过去传统的结构化数据分析方法已经不能满足我们的需求了。如何在神经网络中利用非结构化数据是很重要的一点。所以很多研究者致力于将非结构化数据处理成结构化数据的工具开发。将非结构化数据转化为结构化数据有以下几个方法:
1. 传统方法——树
虽然绝大多数数据是非结构化格式的,但是结构化数据普遍存在于各类商业应用软件和系统中,例如产品数据存储,交易日志,ERP和CRM 系统中都存在大量结构化数据,这些结构化数据仍应用着陈旧的数据技术处理,如基于规则的系统,决策树等。这样的方法需要人工进行特征提取,操作繁琐且需要耗费大量人力进行数据标签。
非结构化数据,也就是通常使用的杂乱无章的文本数据。非结构化数据通常是不能用结构化数据的常规方法以传统方式进行分析或处理的,所以这也成为AI领域一个常见的难题,要理解非结构化数据通常需要输入整段文字,以识别其潜在的特征,然后查看这些特征是否出现在池中的其他文本中。因此,在处理此类任务时,深度学习以其出色的特征提取能力一骑绝尘,于是所有人都开始想着把神经网络用在结构化数据上——建个全连接层,把每一列的内容作为输入,再有一个确定好的标签,就可以进行训练和推理了。
2. 新型利器——深度学习
需要寻找结构化数据的语义,目前要解决的问题主要有:
①数据清洗。要在结构化数据 AI 应用上有所成果,首先需要解决人工数据清洗和准备的问题,找到极少或者没有人为干预的自动化方法,才能使得这一应用可落地可拓展。
②异构数据。处理结构化数据的其中一大挑战在于,结构化数据可能是异构的,同时组合了不同类型的数据结构,例如文本数据、定类数据、数字甚至图像数据。其次,数据表有可能非常稀疏。想象一个 100 列的表格,每列都有 10 到 1000 个可能值(例如制造商的类型,大小,价格等),行则有几百万行。由于只有一小部分列值的组合有意义,可以想象,这个表格可能的组合空间有多么“空”。
③语义理解。找到这些结构化数据的语义特征。处理结构化数据并不仅仅依赖于数据本身的特征 (稀疏,异构,丰富的语义和领域知识),数据表集合 (列名,字段类型,域和各种完整性约束等)可以解码各数据块之间的语义和可能存在的交互的重要信息。也就是说,存储在数据库表中的信息具有强大的底层结构,而现有的语言模型(例如 BERT)仅受过训练以编码自由格式的文本。
3. 结构化数据清洗
除了某些特定的需求外,经过预处理之后的结构化数据,应该满足以下特点:
①所有值都是数字–机器学习算法取决于所有数据都是数字;
②非数字值(在类别或文本列中的内容)需要替换为数字标识符;
③标识并清除具有无效值的记录;
④识别并消除了无关的类别;
⑤所有记录都需要使用相同的一致类别。

‘捌’ 简述结构化方法与面向对象方法的概念以及特点

http://www.itise.com/phrase/200603101726185.html
看看这个网站
面向对象

中科永联高级技术培训中心(www.itise.com)

面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

谈到面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。其初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。许多有关面向对象的文章都只是讲述在面向对象的开发中所需要注意的问题或所采用的比较好的设计方法。看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地对自己有所裨益。这一点,恐怕对初学者甚至是从事相关工作多年的人员也会对它们的概念模糊不清。

面向对象是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

一、传统开发方法存在问题

1.软件重用性差
重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。

2.软件可维护性差
软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。

3.开发出的软件不能满足用户需要
用传统的结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。

用结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层的分解下去,直到仅剩下若干个容易实现的子处理功能为止,然后用相应的工具来描述各个最低层的处理。因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的 ,用户需求的变化往往造成系统结构的较大变化,从而需要花费很大代价才能实现这种变化。

二、面向对象的基本概念

(1)对象。
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

(2)对象的状态和行为。
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中

(3)类。
具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

(4)类的结构。
在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。

①一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。
②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。

(5)消息和方法。
对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。

类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。消息传递如图10-1所示。

二、面向对象的特征

(1)对象唯一性。
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

(2)分类性。
分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

(3)继承性。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。
采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

(4)多态性(多形性)
多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。
多态性增强了软件的灵活性和重用性。

三、面向对象的要素

(1)抽象。
抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。

类实现了对象的数据(即状态)和行为的抽象。

(2)封装性(信息隐藏)。
封装性是保证软件部件具有优良的模块性的基础。
面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。
对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。

(3)共享性
面向对象技术在不同级别上促进了共享
同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。
在同一应用中共享。在同一应用的类层次结构中,存在继承关系的各相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。使用继承来实现代码的共享,这也是面向对象的主要优点之一。
在不同应用中共享。面向对象不仅允许在同一应用中共享信息,而且为未来目标的可重用设计准备了条件。通过类库这种机制和结构来实现不同应用中的信息共享。

4.强调对象结构而不是程序结构

四、面向对象的开发方法

目前,面向对象开发方法的研究已日趋成熟,国际上已有不少面向对象产品出现。面向对象开发方法有Coad方法、Booch方法和OMT方法等。

1.Booch方法

Booch最先描述了面向对象的软件开发方法的基础问题,指出面向对象开发是一种根本不同于传统的功能分解的设计方法。面向对象的软件分解更接近人对客观事务的理解,而功能分解只通过问题空间的转换来获得。

2.Coad方法

Coad方法是1989年Coad和Yourdon提出的面向对象开发方法。该方法的主要优点是通过多年来大系统开发的经验与面向对象概念的有机结合,在对象、结构、属性和操作的认定方面,提出了一套系统的原则。该方法完成了从需求角度进一步进行类和类层次结构的认定。尽管Coad方法没有引入类和类层次结构的术语,但事实上已经在分类结构、属性、操作、消息关联等概念中体现了类和类层次结构的特征。

3.OMT方法

OMT方法是1991年由James Rumbaugh等5人提出来的,其经典着作为“面向对象的建模与设计”。

该方法是一种新兴的面向对象的开发方法,开发工作的基础是对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计,面向对象的建模和设计促进了对需求的理解,有利于开发得更清晰、更容易维护的软件系统。该方法为大多数应用领域的软件开发提供了一种实际的、高效的保证,努力寻求一种问题求解的实际方法。

4.UML(Unified Modeling Language)语言

软件工程领域在1995年~1997年取得了前所未有的进展,其成果超过软件工程领域过去15年的成就总和,其中最重要的成果之一就是统一建模语言(UML)的出现。UML将是面向对象技术领域内占主导地位的标准建模语言。
UML不仅统一了Booch方法、OMT方法、OOSE方法的表示方法,而且对其作了进一步的发展,最终统一为大众接受的标准建模语言。UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发全过程。

五、面向对象的模型

·对象模型

对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作,它是分析阶段三个模型的核心,是其他两个模型的框架。

1.对象和类

(1) 对象。
对象建模的目的就是描述对象。

(2) 类。
通过将对象抽象成类,我们可以使问题抽象化,抽象增强了模型的归纳能力。

(3) 属性。
属性指的是类中对象所具有的性质(数据值)。

(4) 操作和方法。

操作是类中对象所使用的一种功能或变换。类中的各对象可以共享操作,每个操作都有一个目标对象作为其隐含参数。
方法是类的操作的实现步骤。

2.关联和链
关联是建立类之间关系的一种手段,而链则是建立对象之间关系的一种手段。

(1) 关联和链的含义。
链表示对象间的物理与概念联结,关联表示类之间的一种关系,链是关联的实例,关联是链的抽象。

(2) 角色。
角色说明类在关联中的作用,它位于关联的端点。

(3) 受限关联。
受限关联由两个类及一个限定词组成,限定词是一种特定的属性,用来有效的减少关联的重数,限定词在关联的终端对象集中说明。
限定提高了语义的精确性,增强了查询能力,在现实世界中,常常出现限定词。

(4) 关联的多重性。
关联的多重性是指类中有多少个对象与关联的类的一个对象相关。重数常描述为“一”或“多”。
图10-8表示了各种关联的重数。小实心圆表示“多个”,从零到多。小空心圆表示零或一。没有符号表示的是一对一关联。

3.类的层次结构
(1) 聚集关系。
聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。

聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次,图10-10表示一个关于微机的多极聚集。

(2)一般化关系。
一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般---具体”的关系。一般化类称为你类,具体类又能称为子类,各子类继承了交类的性质,而各子类的一些共同性质和操作又归纳到你类中。因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形,如图10-11

4.对象模型
(1)模板。模板是类、关联、一般化结构的逻辑组成。
(2)对象模型。

对象模型是由一个或若干个模板组成。模板将模型分为若干个便于管理的子块,在整个对象模型和类及关联的构造块之间,模板提供了一种集成的中间单元,模板中的类名及关联名是唯一的。

·动态模型

动态模型是与时间和变化有关的系统性质。该模型描述了系统的控制结构,它表示了瞬间的、行为化的系统控制
性质,它关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度出发,表现了对象的相互行为。
该模型描述的系统属性是触发事件、事件序列、状态、事件与状态的组织。使用状态图作为描述工具。它涉及到事件、状态、操作等重要概念。
1.事件
事件是指定时刻发生的某件事。

2.状态
状态是对象属性值的抽象。对象的属性值按照影响对象显着行为的性质将其归并到一个状态中去。状态指明了对象
对输入事件的响应。

3.状态图

状态图是一个标准的计算机概念,他是有限自动机的图形表示,这里把状态图作为建立动态模型的图形工具。
状态图反映了状态与事件的关系。当接收一事件时,下一状态就取决于当前状态和所接收的该事件,由该事件引起的状态变化称为转换。
状态图是一种图,用结点表示状态,结点用圆圈表示;圆圈内有状态名,用箭头连线表示状态的转换,上面标记事件名,箭头方向表示转换的方向。

·功能模型

功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。图10-15给出了一个窗口系统的图标显示的数据流图。

数据流图中包含有处理、数据流、动作对象和数据存储对象。

1.处理
数据流图中的处理用来改变数据值。最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。

2.数据流
数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。

3.动作对象
动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。

4.数据存储对象
数据流图中的数据存储是被动对象,它用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。

六、面向对象的分析

面向对象分析的目的是对客观世界的系统进行建模。本节以上面介绍的模型概念为基础,结合“银行网络系统”的具体实例来构造客观世界问题的准确、严密的分析模型。
分析模型有三种用途:用来明确问题需求;为用户和开发人员提供明确需求;为用户和开发人员提供一个协商的基础,作为后继的设计和实现的框架。

(一) 面向对象的分析

系统分析的第一步是:陈述需求。分析者必须同用户一块工作来提炼需求,因为这样才表示了用户的真实意图,其中涉及对需求的分析及查找丢失的信息。下面以“银行网络系统”为例,用面向对象方法进行开发。
银行网络系统问题陈述: 设计支持银行网络的软件,银行网络包括人工出纳站和分行共享的自动出纳机。每个分理处用分理处计算机来保存各自的帐户,处理各自的事务;各自分理处的出纳站与分理处计算机通信,出纳站录入帐户和事务数据;自动出纳机与分行计算机通信,分行计算机与拨款分理处结帐,自动出纳机与用户接口接受现金卡,与分行计算机通信完成事务,发放现金,打印收据;系统需要记录保管和安全措施;系统必须正确处理同一帐户的并发访问;每个分处理为自己的计算机准备软件,银行网络费用根据顾客和现金卡的数目分摊给各分理处。
图10-18给出银行网络系统的示意图。

(二)建立对象模型

首先标识和关联,因为它们影响了整体结构和解决问题的方法,其次是增加属性,进一步描述类和关联的基本网络,使用继承合并和组织类,最后操作增加到类中去作为构造动态模型和功能模型的副产品。

1.确定类

构造对象模型的第一步是标出来自问题域的相关的对象类,对象包括物理实体和概念。所有类在应用中都必须有意义,在问题陈述中,并非所有类都是明显给出的。有些是隐含在问题域或一般知识中的。

按图10-19所示的过程确定类

查找问题陈述中的所有名词,产生如下的暂定类。
软件 银行网络 出纳员 自动出纳机 分行
分处理 分处理计算机 帐户 事务 出纳站
事务数据 分行计算机 现金卡 用户 现金
收据 系统 顾客 费用 帐户数据
访问 安全措施 记录保管

根据下列标准,去掉不必要的类和不正确的类。
(1) 冗余类:若两个类表述了同一个信息 ,保留最富有描述能力的类。如"用户"和"顾客"就是重复的描述,因为"顾客"最富有描述性,因此保留它。
(2) 不相干的类:除掉与问题没有关系或根本无关的类。例如,摊派费用超出了银行网络的范围。
(3) 模糊类:类必须是确定的,有些暂定类边界定义模糊或范围太广,如"记录保管"就模糊类,它是"事务"中的一部分。
(4) 属性:某些名词描述的是其他对象的属性,则从暂定类中删除。如果某一性质的独立性很重要,就应该把他归属到类,而不把它作为属性。
(5) 操作:如果问题陈述中的名词有动作含义,则描述的操作就不是类。但是具有自身性质而且需要独立存在的操作应该描述成类。如我们只构造电话模型,"拨号"就是动态模型的一部分而不是类,但在电话拨号系统中,"拨号"是一个重要的类,它日期、时间、受话地点等属性。

在银行网络系统中,模糊类是"系统"、"安全措施"、"记录保管"、"银行网络"等。属于属性的有:"帐户数据"、"收据"、"现金"、"事务数据"。属于实现的如:"访问"、"软件"等。这些均应除去。

2.准备数据字典

为所有建模实体准备一个数据字典。准确描述各个类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制。

3.确定关联

两个或多个类之间的相互依赖就是关联。一种依赖表示一种关联,可用各种方式来实现关联,但在分析模型中应删除实现的考虑,以便设计时更为灵活。关联常用描述性动词或动词词组来表示,其中有物理位置的表示、传导的动作、通信、所有者关系、条件的满足等。从问题陈述中抽取所有可能的关联表述,把它们记下来,但不要过早去细化这些表述。

下面是银行网络系统中所有可能的关联,大多数是直接抽取问题中的动词词组而得到的。在陈述中,有些动词词组表述的关联是不明显的。最后,还有一些关联与客观世界或人的假设有关,必须同用户一起核实这种关联,因为这种关联在问题陈述中找不到。

银行网络问题陈述中的关联:
·银行网络包括出纳站和自动出纳机;
·分行共享自动出纳机;
·分理处提供分理处计算机;
·分理处计算机保存帐户;
·分理处计算机处理帐户支付事务;
·分理处拥有出纳站;
·出纳站与分理处计算机通信;
·出纳员为帐户录入事务;
·自动出纳机接受现金卡;
·自动出纳机与用户接口;
·自动出纳机发放现金;
·自动出纳机打印收据;
·系统处理并发访问;
·分理处提供软件;
·费用分摊给分理处。
隐含的动词词组:
·分行由分理处组成;
·分理处拥有帐户;
·分行拥有分行计算机;
·系统提供记录保管;
·系统提供安全;
·顾客有现金卡。
基于问题域知识的关联:
·分理处雇佣出纳员;
·现金卡访问帐户。

使用下列标准去掉不必要和不正确的关联:

(1) 若某个类已被删除,那么与它有关的关联也必须删除或者用其它类来重新表述。在例中,我们删除了"银行网络",相关的关联也要删除。
(2) 不相干的关联或实现阶段的关联:删除所有问题域之外的关联或涉及实现结构中的关联。如"系统处理并发访问"就是一种实现的概念。
(3) 动作:关联应该描述应用域的结构性质而不是瞬时事件,因此应删除"自动出纳机接受现金卡","自动出纳机与用户接口"等。
(4) 派生关联:省略那些可以用其他关联来定义的关联。因为这种关联是冗余的。银行网络系统的初步对象图如图10-20所示。其中含有关联。

4.确定属性

属性是个体对象的性质,属性通常用修饰性的名词词组来表示.形容词常常表示具体的可枚举的属性值,属性不可能在问题陈述中完全表述出来,必须借助于应用域的知识及对客观世界的知识才可以找到它们。只考虑与具体应用直接相关的属性,不要考虑那些超出问题范围的属性。首先找出重要属性,避免那些只用于实现的属性,要为各个属性取有意义的名字。按下列标准删除不必要的和不正确的属性:

(1) 对象:若实体的独立存在比它的值重要,那么这个实体不是属性而是对象。如在邮政目录中,"城市"是一个属性,然而在人口普查中,"城市"则被看作是对象。在具体应用中,具有自身性质的实体一定是对象。
(2) 定词:若属性值取决于某种具体上下文,则可考虑把该属性重新表述为一个限定词。
(3) 名称:名称常常作为限定词而不是对象的属性,当名称不依赖于上下文关系时,名称即为一个对象属性,尤其是它不惟一时。
(4) 标识符:在考虑对象模糊性时,引入对象标识符表示,在对象模型中不列出这些对象标识符,它是隐含在对象模型中,只列出存在于应用域的属性。
(5) 内部值:若属性描述了对外不透明的对象的内部状态,则应从对象模型中删除该属性。
(6) 细化:忽略那些不可能对大多数操作有影响的属性。

5.使用继承来细化类

使用继承来共享公共机构,以次来组织类,可以用两种方式来进行。
(1) 自底向上通过把现有类的共同性质一般化为父类,寻找具有相似的属性,关系或操作的类来发现继承。例如"远程事务"和"出纳事务"是类似的,可以一般化为"事务"。有些一般化结构常常是基于客观世界边界的现有分类,只要可能,尽量使用现有概念。对称性常有助于发现某些丢失的类。
(2) 自顶向下将现有的类细化为更具体的子类。具体化常常可以从应用域中明显看出来。应用域中各枚举字情况是最常见的具体化的来源。例如:菜单,可以有固定菜单,顶部菜单,弹出菜单,下拉菜单等,这就可以把菜单类具体细化为各种具体菜单的子类。当同一关联名出现多次且意义也相同时,应尽量具体化为相关联的类,例如"事务"从"出纳站"和"自动出纳机"进入,则"录入站"就是"出纳站"和"自动出纳站"的一般化。在类层次中,可以为具体的类分配属性和关联。各属性和都应分配给最一般的适合的类,有时也加上一些修正。

应用域中各枚举情况是最常见的具体化的来源。

6.完善对象模型

对象建模不可能一次就能保证模型是完全正确的,软件开发的整个过程就是一个不断完善的过程。模型的不同组成部分多半是在不同的阶段完成的,如果发现模型的缺陷,就必须返回到前期阶段去修改,有些细化工作是在动态模型和功能模型完成之后才开始进行的。
(1) 几种可能丢失对象的情况及解决办法:
·同一类中存在毫无关系的属性和操作,则分解这个类,使各部分相互关联;
·一般化体系不清楚,则可能分离扮演两种角色的类
·存在无目标类的操作,则找出并加上失去目标的类;
·存在名称及目的相同的冗余关联,则通过一般化创建丢失的父类,把关联组织在一

‘玖’ 数据库结构

新一轮油气资源评价数据库是建立在国家层面上的数据库,数据库设计首先立足于国家能源政策和战略制定的宏观要求,还要结合油气资源评价的工作特征和各个评价项目及资源的具体情况。使用当前最流行和最成熟的数据库技术进行数据库的总体结构设计。

数据库的设计以《石油工业数据库设计规范》为指导标准,以《石油勘探开发数据》为设计基础,借鉴前人的优秀设计理念和思路,参考国内外优秀的资源评价数据库和油气资源数据库的设计技术优势,结合本轮资源评价的具体特点,按照面向对象的设计和面向过程的设计相结合的设计方法,进行数据库的数据划分设计。

油气资源评价数据库要满足新一轮全国油气资源评价工作的常规油气资源评价、煤层气资源评价、油砂资源评价、油页岩资源评价四个油气资源评价的数据需求。进行数据库具体数据内容设计。

并且,数据库的设计要为油气资源评价的快速、动态评价和远程评价工作的需求保留足够数据扩展接口,数据库具有良好开放性、兼容性和可扩充性。

(一)数据划分

数据库内存放的数据将支持资源评价的整个过程。为了能更好地管理库中数据,需要对整个过程中将用到的数据进行分类管理。具体分类方式如下(图4-11):

图4-11 数据分类示意图

1.按照应用类型划分

按照数据在资源评价过程中的应用类型划分,可以划分为基础数据、参数数据和评价结果数据。

基础数据是指从勘探生产活动及认识中直接获取的原始数据,这些数据一般没有经过复杂的处理和计算过程。如分析化验数据、钻井地质数据、盆地基础数据等。这些数据是整个评价工作的基础。

参数数据是指在评价过程中各种评价方法和软件直接使用的参数数据。

评价结果数据是指资源评价中产生的各种评价结果数据,如资源量结果数据、地质评价结果数据等。

2.按照评价对象划分

本次评价共分为大区、评价单元、计算单元三个层次,在研究中又使用了盆地、一级构造单元,在评价对象总体考虑中按照评价对象将数据划分为大区、评价单元、计算单元等类型。

3.按照获取方式划分

按照获取方式可以将数据分为直接获取、研究获取、间接获取几类。

4.按照存储类型划分

按照存储类型可以将数据划分为结构化数据和非结构化数据。

结构化数据是指能够用现有的关系数据库系统直接管理的数据,进一步又可以分为定量数据和定性数据两类。

非结构化数据是指不能用现有的关系数据库系统直接管理和操作的数据,它必须借助于另外的工具管理和操作。如图件数据、文档数据等。

库中数据类型的划分共分六个层次逐次划分,包括:数据存储类型→资源类型→评价对象→应用→获取方式→数据特征。

对于结构化存储的数据在应用层分为三类:基础数据、中间数据和结果数据,基础数据中包含用于类比的基础数据、用于统计分析的基础数据和直接用于公式运算的基础数据;结构化存储的数据在获取方式上可以继续划分,其中,用于公式运算的数据可以细化为专家直接录入、由地质类比获取、通过生产过程获取、通过地质研究过程获取及其他方式。中间数据可以从以下方式获取:标准、统计、类比、参数的关联。结果数据的获取有两种方式:公式运算结果和通过钻井、地质、综合研究等提交的文字报告。

对于非结构化存储的数据在应用层分为两类:图形数据和文档数据。

图形数据在获取方式上可以继续划分成四种方式:通过工程测量数据获取(如地理图件、井位坐标数据等)、通过地质研究过程获取(如沉积相图、构造区划图等)、由综合研究获取(如综合评价图等)、其他方式。

图形数据在表现方式上又可以进一步分为有坐标意义的图形(如构造单元划分图、地理图、井位图等)、数值图(如产烃率曲线图、酐洛根热降解图等)和无坐标含义图(如剖面图)等。

文档数据是指评价过程中产生的各种报告、项目运行记录等。

(二)数据库结构

从业务需求上,根据数据用途、数据类型和数据来源,可将本次的油气资源评价数据库分为三级:基础库、参数库、成果库(图4-12)。其结构如下:

图4-12 数据库结构示意图

1.基础库

基础库是油气资源评价工作的最基础的原始数据,有实测数据(物探数据、测井数据、钻井数据、开发数据等)、实验数据和经验数据等。

确定基础数据实际上是一项涉及油田勘探、开发等领域的多学科的复杂工作,是油气资源评价工作的研究过程和研究成果在数据库中的具体表现方式。在设计数据库的过程中,需要与参数研究专家经过多次反复,才能最终确定基础数据库,确保基础数据库能满足目前所有评价工作中计算的需要。

2.参数库

参数库用于存储油气资源评价工作所用到的参数数据,评价软件,直接从参数库中提取参数数据,用于计算。参数数据由基础数据汇总而来,也可以由专家根据经验直接得到。

本次评价中所涉及的参数大致可以分为以下几类:①直接应用的参数;②通过标准或类比借用的参数;③通过研究过程或复杂的预处理得到的参数。

3.成果库

成果库用于存储资源评价结果,包括各种计算结果、各种文档、电子表格、图片、图册等数据。

数据库的体系结构采用分布式多层数据库结构,包括三个组成部分:应用服务层、应用逻辑层和数据服务层。

数据库体系结构如图4-13所示。

图4-13 体系结构结构图

(1)应用服务层:应用服务层包含复杂的事务处理逻辑,应用服务层主要由中间件组件构成。中间件是位于上层应用和下层服务之间的一个软件层,提供更简单、可靠和增值服务。并且能够实现跨库检索的关键技术。它能够使应用软件相对独立于计算机硬件和操作系统平台,把分散的数据库系统有机地组合在一起,为应用软件系统的集成提供技术基础,中间件具有标准程序接口和协议,可以实现不同硬件和操作系统平台上的数据共享和应用互操作。而在具体实现上,中间件是一个用API定义的分布式软件管理框架,具有潜在的通信能力和良好的可扩展性能。中间件包含系统功能处理逻辑,位于应用服务器端。它的任务是接受用户的请求,以特定的方式向应用服务器提出数据处理申请,通过执行相应的扩展应用程序与应用服务层进行连接,当得到应用服务器返回的处理结果后提交给应用服务器,再由应用服务器传送回客户端。根据国内各大石油公司具体的需求开发相应的地质、油藏、生产等应用软件功能程序模块和各种算法模块。

(2)应用逻辑层:逻辑数据层是扩展数据服务层逻辑处理层,针对当前的底层数据库的数据结构,根据具体的需求,应用各种数据库技术,包括临时表、视图、存储过程、游标、复制和快照等技术手段从底层数据库中提取相关的数据,构建面向具体应用的逻辑数据库或者形成一个虚拟的数据库平台。逻辑数据层包含底层数据库的部分或全部数据处理逻辑,并处理来自应用服务层的数据请求和访问,将处理结果返回给逻辑数据层。

形成一个虚拟的数据库平台我们可以应用数据库系统中的多个技术来实现。如果系统中的一个节点中的场地或分片数据能够满足当前虚拟数据库,可以在应用服务层中使用大量的查询,生成一个以数据集结果为主的虚拟数据库平台,并且由数据集附带部分数据库的管理应用策略。或者对节点上的数据库进行复制方法进行虚拟数据库的建立。对与需要对多个节点上的数据库进行综合筛选,则要对各个节点上的数据库进行复制,合并各个复制形成一个应用逻辑层,从而建立一个虚拟数据平台。

(3)数据服务层:即数据库服务器层,其中包含系统的数据处理逻辑,位于不同的操作系统平台上,不同数据库平台(异构数据库),具体完成数据的存储、数据的完整性约束。也可以直接处理来自应用服务层的数据请求和访问,将处理结果返回给逻辑数据层或根据逻辑数据层通过提交的请求,返回数据信息和数据处理逻辑方法。

(三)数据建设标准

1.评价数据标准

系统数据库中的数据格式、大小、类型遵从国家及行业标准,参考的标准如表4-23。

表4-23 数据库设计参考标准

续表

系统中数据的格式及单位参考《常规油气资源评价实施方案》、《煤层气资源评价实施方案》、《油砂资源评价实施方案》、《油页岩资源评价实施方案》及数据字典。

2.图形图件标准

对于地质研究来说,地质类图件是比较重要的。各种地质评价图形遵循以下标准(表4-24)。

表4-24 系统图形遵循的相关标准

系统对图形的要求为必须为带有地理坐标意义的、满足上述标准体系要求的矢量图形,且采用统一的地理底图。图形格式采用:MapGIS图形交换格式、GeoInfo图形格式、ArcInfo图形交换格式、MapInfo图形交换格式和GeoMap图形交换格式。

图件的比例尺要求:

全国性图件:1∶400万或1:600万

大区图件:1:200万

盆地图件:1:40万或1:50万

评价单元图件:1:10万或1:20万

图件的内容要求符合《常规油气资源评价实施方案》、《煤层气资源评价实施方案》、《油砂资源评价实施方案》和《油页岩资源评价实施方案》的规定。

(四)数据内容

数据库中存储的数据包括常规油气相关数据、煤层气相关数据、油砂相关数据和油页岩相关数据;还有可采系数研究涉及的数据,包括研究所需基础数据和研究成果数据;以及趋势预测相关数据。

‘拾’ 访问数据库的方式有哪些啊

在ASP中可以通过三种方式访问数据库:

1、IDC(Internet Database Connector)方式;

2、ADO(ActiveX Data Objects)方式;

3、RDS(Remote Data Service)方式。

这三种访问方式对数据库的访问都是由Internet Information Server完成的。通过Web浏览器用HTTP协议向IIS(Internet信息服务器)发送请求,IIS执行对数据库的访问,并返回一个HTML格式的文档响应