您的当前位置:首页正文

逻辑数据库设计 - 可变属性(继承)

2023-11-09 来源:帮我找美食网

EVA设计

对于这种继承下来的可变属性时,有一种办法是创建另外一张表,将属性当成行来存储。

技术分享

其中存储的数据类似下面这样:

技术分享

这样的设计称为:实体-属-值,简称:EVA,或者又叫开放架构、无模式。

这种设计有如下3种好处:

1、这两张表的列都很少。

2、新增的属性不会对现有的表结构造成影响,不需要新增列。

3、避免由于空值而造成的表内容混乱。

但是这样也有如下缺点:

1、查询属性

本来,我们想要按出厂日期查询,只需要:

  SELECT ElectricId,DateOfManufacture FROM Electric

但是这种方式不行,它需要这样:

  SELECT ElectricId,AttrValue AS ‘DateOfManufacture‘  FROM Attribute  WHERE AttrName = ‘DateOfManufacture‘

2、无法声明强制属性

本来,我们要确保DateOfManufacture(出厂日期)这个属性有值,在传统数据库设计中,只需要很简单的声明一个NOT NULL就OK了。

但是现在在EVA设计中,每个属性对应的是Attribute中的一行。我们需要建立一个约束来检查对于每个ElectricId都存在一行,并且这行的AttrName是DateOfManufacture。并且这行记录的AttrValue不为空,并且符合日期格式。

3、无法使用SQL的数据类型

由于AttrValue的格式只能声明为Varchar或NVarchar类型,因此用户输入的日期格式可能是各种各样,甚至有的根本就不是日期格式。

由于数据类型不能够由限制,因此我们执行如下SQL语句也不会报错。

  INSERT Attribute VALUES(1,‘DateOfManufacture‘,‘我不是一个日期‘)  --这样的语句也不报错

4、无法确保引用完整性

加入上面的设计,我们需要添加一个品牌属性。可选值必须是存在的比如,三星,康佳,海尔等等。在传统的数据库设计中,我们只需要设计一张品牌表,并给本表添加一个品牌Id字段,建立外键约束就可以了。

但是,在EVA设计中,因为品牌属性对应的是一行,因此我们无法使用外键来确保引用完整性。如果我们不处理,那么用户输入的品牌属性的值可能是不存在的。

5、重复记录

在EVA设计中,我们可能将同一个属性了两次。

因为,我们连续执行如下SQL语句两次也是不报错的:

  INSERT Attribute VALUES(1,‘DateOfManufacture‘,‘2013-09-09‘)  INSERT Attribute VALUES(1,‘DateOfManufacture‘,‘2013-09-10‘)

由于可能存在重复记录,因此我们按出厂日期统计出厂产品数量也并不可靠。同时,按日期统计,也很复杂。

  SELECT ElcDate, COUNT(*) AS Per_Date   FROM (SELECT DISTINCT ElectricId,AttrValue AS ElcDate FROM Attribute WHERE AttrName = ‘DateOfManufacture‘)  GROUP BY ElcDate

这是Oracle中的写法。

6、重组列

在传统数据库设计中,加入我们要显示一条完整的记录,我们只需要:

  SELECT * FROM Electric

但是现在,我们要:

技术分享
  SELECT i.ElectricId,    i1.AttrValue AS ‘Name‘,    i2.AttrValue AS ‘DateOfManufacture‘,    i3.AttrValue AS ‘Screen‘  FROM Electric AS i    LEFT OUTER JOIN Attribute AS i1 ON i.ElectricId = i1.ElectricId AND i1.AttrName=‘Name‘    LEFT OUTER JOIN Attribute AS i2 ON i.ElectricId = i2.ElectricId AND i2.AttrName=‘DateOfManufacture‘    LEFT OUTER JOIN Attribute AS i3 ON i.ElectricId = i3.ElectricId AND i3.AttrName=‘Screen‘
技术分享

不在多说,总而言之,以上的设计,并非一个非常耐得住推敲的设计。

解决方案

一、单表继承

单表继承的设计是将所有相关的类型都存在一张表中,为所有类型的所有属性都保留一列。同时使用一个属性来定义每一行表示的子类型。

例如,对于以上电器的需求,单表继承的数据设计如下:

技术分享

单表继承的方式可以理解为,所有子类的字段,都往单表里放,存储的时候,当某子实体没有的时候,相应的类为空,都是预留一列作为标记类型。

单表继承的缺点就是:

  •   列过多。
  •   过多NULL值。
  •   当要增加属性的时候,要改动表结构。
  • 综上所述:单表继承只是适合使用子类的特殊属性列不多的情况。

    二、实体表继承

    实体表继承可以理解为:子表在设计的时候,将父表的所有的属性全部都在本表定义多一次。

    回到上面的例子,如果用实体表继承的话,对应的设计如下:

    技术分享

    实体表继承相比于单表继承,有一个好处,就是防止在一行内存储太多和当前子类型无关的属性。比如在冰箱表里没有了屏幕列,而在单表继承中,是由Scree列的NULL值的。另外,也不用在加多一个列用于标记当前是什么电器。

    实体表继承的致命缺点:

    重复列过多

    重复列过多,很容易让人摸不着头脑。

    三、类表继承

    我的推荐,我最喜欢,我认为最可靠的方式

    类表继承模拟了高级程序语言中的继承,把表当成面向对象里的类。创建一张基表,包含所有子类型的公共属性。对于每个子类型,创建一个独立的表,通过外键和基类表相连。

    对以以上例子,类表继承的设计如下:

    技术分享

    类表继承,相比于实体类继承,明显的有点在于,少了很多重复列。子类表中,主键同时也是外键。

    我认为这是一个比较好的方法。

    四、半结构化

    半结构化,实际上跟单表继承差不多。单表继承是多个列,而半结构化使用一个新特性,比如一个xml类型的列,来存储子类的属性。

    对于以上例子,半结构化的设计如下:

    技术分享

    子类的信息,存在一个XML列中,你爱设置什么节点就什么节点。反正查询起来也不麻烦。不够要记住的是,要有一个Type列,来标记哪行是哪种电器。不然就全乱套了。

    由于,现在SQLServer对XML的支持越来越强大,这也是一个不错的选择。

    逻辑数据库设计 - 可变属性(继承)

    标签:

    小编还为您整理了以下内容,可能对您也有帮助:

    数据库逻辑结构设计包含哪些内容

    逻辑结构设计是将概念结构设计阶段完成的概念模型,转换成能被选定的数据库管理系统(DBMS)支持的数据模型。这里主要将E-R模型转换为关系模型。需要具体说明把原始数据进行分解、合并后重新组织起来的数据库全局逻辑结构,包括所确定的关键字和属性、重新确定的记录结构和文件结构、所建立的各个文件之间的相互关系,形成本数据库的数据库管理员视图。

    逻辑结构设计一般分为三步进行:

    1.从E-R图向关系模式转化数据库的逻辑设计主要是将概念模型转换成一般的关系模式,也就是将E-R图中的实体、实体的属性和实体之间的联系转化为关系模式。在转化过程中会遇到如下问题:

    (1)命名问题。命名问题可以采用原名,也可以另行命名,避免重名。

    (2)非原子属性问题。非原子属性问题可将其进行纵向和横行展开。

    (3)联系转换问题。联系可用关系表示。

    2.数据模型的优化数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该适当修改数据模型的结构,提高查询的速度。

    3.关系视图设计关系视图的设计又称为外模式的设计,也叫用户模式设计,是用户可直接访问的数据模式。同一系统中,不同用户可有不同的关系视图。关系视图来自逻辑模式,但在结构和形式上可能不同于逻辑模式,所以它不是逻辑模式的简单子集。

    关系视图主要有三个作用:

    (1)通过外模式对逻辑模式的屏蔽,为应用程序提供了一定的逻辑性。

    (2)更好地适应不同用户对数据的不同需求。

    (3)为不同用户划定了访问数据的不同范围,有利于数据的保密。

    数据库逻辑设计的主要工作是什么?

    将E-R图转换到关系模式时,实体与联系都可以表示成:关系。

    数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。首先,从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性。实体集也可以转换成关系。

    E-R图提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    注意事项:

    实体-联系数据模型中的联系型,存在3种一般性约束:一对一约束(联系)、一对多约束(联系)和多对多约束(联系),它们用来描述实体集之间的数量约束:

    (1)一对一接触(1:1)

    对于两个实体集A和B,如果A中的每个值在B中最多有一个对应的实体值,反之亦然,则称为实体集A和实体集B具有A一一对应关系。

    一个学校只有一个校长,一个校长只服务一个学校,所以学校和校长之间是一对一的联系。

    (2)一对多连接(1∶N)

    对于A和B两个实体集,如果每个值在一个有多个实体在B值对应于它,反之,每个实体价值B最多一个实体对应的价值,然后实体集A和B是一对多的关系。

    例如,在一所学校里,教师与课程“教学”是一对多的关系,即每位教师可以教授几门课程,但每门课程只能由一位教师教授。一个专业有几个学生,每个学生只学习一个专业,那么专业和学生之间就有一对多的联系

    什么是数据库的逻辑结构设计

    数据库设计过程包括:

    现实世界→需求分析→概念设计→逻辑设计→物理设计

    概念设计--利用数据模型进行概念数据库的模式设计。它不依赖任何DBMS(数据库管理系统)常用的数据模型为ERM(实体联系模型),用到的术语有:实体、属性、联系、键。

    逻辑设计--把概念设计得到的概念数据库模式变为逻辑数据模式,它依赖于DBMS。用到的术语有:函数依赖、范式、关系分解。

    带你深入了解数据库设计中的英文术语表

    Access method(访问方法):此步骤包括从文件中存储和检索记录。

      Alias(别名):某属性的另一个名字。在SQL中,可以用别名替换表名。

      Alternate keys(备用键,ER/关系模型):在实体/表中没有被选为主健的候选键。

      Anomalies(异常)参见更新异常(update anomalies)

      Application design(应用程序设计):数据库应用程序生命周期的一个阶段,包括设计用户界面以及使用和处理数据库的应用程序。

      Attribute(属性)(关系模型):属性是关系中命名的列。

      Attribute(属性)(ER模型):实体或关系中的一个性质。

      Attribute inheritance(属性继承):子类成员可以拥有其特有的属性,并且继承那些与超类有关的属性的过程。

      Base table(基本表):一个命名的表,其记录物理的存储在数据库中。

      Binary relationship(二元关系):一个ER术语,用于描述两个实体间的关系。例如,panch Has Staff。

      Bottom-up approach(自底向上方法):用于数据库设计,一种设计方法学,他从标识每个设计组建开始,然后将这些组件聚合成一个大的单元。在数据库设计中,可以从表示属性开始底层设计,然后将这些属性组合在一起构成代表实体和关系的表。

      Business rules(业务规则):由用户或数据库的管理者指定的附加规则。

      Candidate key(候选键,ER关系模型):仅包含标识实体所必须得最小数量的属性/列的超键。

      Cardinality(基数):描述每个参与实体的可能的关系数目。

      Centralized approach(集中化方法,用于数据库设计):将每个用户试图的需求合并成新数据库应用程序的一个需求集合

      Chasm trap(深坑陷阱):假设实体间存在一根,但某些实体间不存在通路。

      Client(客户端):向一个或多个服务器请求服务的软件应用程序。

      Clustering field(群集字段):记录总的任何用于群集(集合)航记录的非键字段,这些行在这个字段上有相同的值。

      Clustering index(群集索引):在文件的群集字段上定义的索引。一个文件最多有一个主索引或一个群集索引。

      Column(列):参加属性(attribute)。

      Complex relationship(复杂关系):度数大于2的关系。

      Composite attribute(复合属性):由多个简单组件组成的属性。

      Composite key(复合键):包含多个列的主健。

      Concurrency control(并发控制):在多用户环境下同时执行多个十五并保证数据完整性的一个DBMS服务。

      Constraint(约束):数据库不允许包含错误数据的一致性规则。

      Data conversion and loading(数据转换和加载):数据库应用生命周期重的一个阶段,包括转换现有数据到新数据库中以及酱下耨应用程序转换到新的数据库上运行。

      Data dictionary(数据字典):参见系统目录(system catalog)。

      Data independence(数据独立性):使用数据的应用程序的数据描述部分。这意味着,如果将新的数据结构添加到数据库中,或者数据库中现有的结构被修改了,那么使用此数据库的就会受到影响,除非应用程序不直接依赖于被修改的部分。

      Data model(数据模型):描述数据、数据间关系以及数据的约束的概念的一个集成的集合。

      Data rendancy(数据冗余):参见冗余数据(rendant data)。

      Data security(数据安全):包括对数据库对象(如表和视图)的访问和使用以及用户可以在这些对象上实施的操作。

      Database(数据库):是逻辑上相关的数据(以及这些数据的描述)的一个共享的集合,用于解决公司对信息的需求。

      Database design(数据库设计):数据库应用生命周期中的一个阶段,包括创建一个支持公司的操作和目标的数据库的设计。

      Database integrity(数据库完整性):指存储数据的正确定和一致性。完整性通常用约束来表达。

      Database Management System,DBMS(数据库管理系统):一个能够让用户定义、创建和维护数据库并控制对数据库的访问的软件系统。

      Database planning(数据库规划):能尽可能有效的实现数据库应用的各阶段的管理活动。

      Database server(数据库服务器):同服务器。

      DBMS engine(DBMS引擎):同服务器。

      DBMS selection(DBMS选择):数据库应用生命周期中的一个阶段,包括选择一个合适的DBMS来支持数据库应用。

      Degree of a relationship(关系的度):一个关系中参与的实体的个数。
     Denormalization(反规范化):形式上,这个术语指的是对基本表结构的修改,这样新的表比原始的表的规范化程度要低。但也可以用此属于更宽泛地形容将两个表和并成一个新表的情形,而这个新表与原来的表具有相同的范式,但比原表包含更多的空值。

      Derived attribute(派生属性):表示其值可以从一个相关属性和属性集的值派生得到的属性,这个属性在实体中不是必须的。

      Design methodology(设计方法学):一种结构化的方法,它使用过程、工具和文档来支持和简化设计过程。

      Disjoint constraint(无连接约束):描述子类的成员间的关系,并指明超类某个成员是否有可能成为一个或多个子类的成员。

      Domain(域):一个或多个属性的取值范围。

      Entity(实体):具有相同性质的对象的集合,它是由用户或公司标识并可独立存在的。

      Entity integrity(实体完整性):在一个基本表中,主健列的值不能为空。

      Entity occurrence(实体出现):实体中的一个可标识的对象。

      Entity-Relationship model(实体关系模型):公司的实体、属性和关系的详细逻辑表示。

      Fact-finding(事实发现):使用诸如面谈和提问等技术收集关于系统的事实、需求和性能的形式化过程。

      Fan trap(扇形陷阱):但从第三个实体扇出的两个实体有1:*关系时出现扇形陷阱,但这两个实体在他们之间应该有直接关系以提供必要的信息。

      Field(字段):同元组(Tuple)。

      File(文件):存储在副主存储器中的相关记录的一个命名集合。

      File-based system(基于文件的系统):一个文件集合,用来管理(创建、插入、删除、更新和检索)一个或多个文件中的数据,并产生基于这些文件中的数据的应用(通常是报表)。

      File organization(文件组织):当文件存储在磁盘上时,对文件中的记录的安排方式。

      First normal form(1NF,第一范式):表中的每个列的交叉处以及记录包含切进包含一个值的表。

      Foreign key(外健):一个表中的一个列或者多个列的集合,这些列匹配某些其他(也可能是同一个)表中的候选键。

      4GL, Fourth-Generation Language(*语言):一种非过程化语言,比如SQL,他只需要用户定义必须完成什么操作,4GL负责将所进行的操作翻译成如何实现这些操作。

      Full functional dependency(完全函数依赖):一个列在功能上依赖于复合主健,但不依赖于主健的任何一个子集的条件。

      Functional dependency(函数依赖):描述表中列之间的关系。

      Generalization(泛化):通过标识实体间的公共特征使实体间差别最小化的过程。

      Generalization hierarchy(泛化层次结构):同类型层次(type hierarchy)。

      Global data model(全局数据模型):代表整个公司(和被模型化的公司的一部分)的数据模型。

      Implementation(实现):数据库应用生命周期中的一个阶段,包括数据库和应用程序设计的物理实现。

      Index(索引):一种允许DBMS将特定的记录更快的放置到文件中,从而加快对用户查询的响应的数据结构。

      Infomation system(信息系统):能够在整个公司范围内收集、管理、控制和分发数据/信息的资源。

      Inheritance(继承):参见属性继承(attribute inheritance)。

      Integrity constaints(完整性约束):防止出现数据库中的数据不一致的约束。

      IS-A hierarchy(IS-A层次结构):同类型层次结构(type hierarchy)。

      Local logical data model(局部逻辑数据模型):代表特定用户视图或用户视图的组合的数据模型。

      Logical database design(逻辑数据库设计):基于特定的数据模型构建公司的数据的模型的过程,但不依赖于特定的DBMS以及其他的物理条件。
     Meta-data(元数据):关于数据的数据,参见系统目录(system catalog)。

      Mision objective(使命目标):标识数据库必须支持的特定任务。

      Mission statement(使命语句):定义数据库应用程序的主要目标。

      Multiplicity(多样性):定义与某个相关实体的一次出现有关的实体的出现数目。

      Multi-valued attribute(多值属性):为一个实体的出现保存多个值的属性。

      Nonkey attribute/column(非键属性/列):不是键的一部分的属性/列。

      Normal forms(范式):规范化过程的一个阶段。前三个范式分别为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。

      Normalization(规范化):一种产生带有需要的特性的技术,这种特性能支持用户和公司的需求。

      Null(空值):表示当前不知道或对于这条记录来说不可使用的一个列的值。

      Operational maintenance(操作维护):数据库应用生命周期的一个阶段,包括监视和维护系统安装后的运行。

      Participation constraint(参与约束,EER模型):确定超类中的每个出现是否必须作为子类的一个成员进行参与。

      Participation constraint(参与约束,ER模型):确定是否所有或者仅仅是某些实体出现参与到关系中。

      Physical database design(物理数据库设计):在二级存储上产生数据库实现的描述的过程,它描述基本表、文件的组织、用于获得有效访问的索引以及所有与完整性约束和安全性*有关的说明。

      Primary index(主索引):在文件的有序键字段上构建的索引。一个文件最多可以有一个主索引或一个群集索引。

      Primary key(主健,ER模型):用来标识每个实体的出现的候选键。

      Primary key(主健,关系模型):在一个表中用来标识记录性的候选键。

      Privileges(权限):允许用户在给定基本表和视图上执行的操作。

      Prototyping(原型):数据库的应用程序生命周期的一个阶段,包括勾践数据库应用程序的工作模型。

      Query-by-Example(QBE):一种用于关系型DBMS的非过程化的数据库语言。QBE是一个图形化的“点-按”查询数据库的方法。

      RDBMS:关系型DBMS。

      Record(记录):同元组(Tuple)。

      Recovery control(恢复控制):当时百事,将数据库还原到正确状态的过程。

      Rcursive relationship(递归关系):一种关系,挡同一个实体在不同的角色中参与多次时就会出现递归关系。例如Staff Supervises Staff。

      rendant data(冗余数据):在多个表中存储的重复数据。

      Referential integrity(参照完整性):如果一个表中存在外健,则外健值必须匹配主表中的某些记录的候选键的值。

      Relation(关系):一个关系是一张表,它也有列和行。

      Relational model(关系模型):以表(或关系)的形式表示数据的数据模型。

      Relational database(关系数据库):规范化表的集合。

      Relation (关系):实体间有意义的关系。

      Relationship occurrence(关系出现):两个实体出现之间的可标识的联系。

      Requirements collection and analysis(需求收集于分析):数据库应用程序生命周期的一个阶段,包括收集和分析数据库应用程序所要支持的关于公司的信息,并使用这些信息来标识新的数据库应用需求。

      Row(行):同元组(Tuple)。

      Second normal form(第二范式):一个已经是第一范式的表,同时满足所有的非主健列只能从构成主健的全部列中获得。

      Secondary index(二级索引):在数据文件的非有序字段上定义的索引。

      Security(安全):指防止数据库被非授权的用户访问,包括有意的和无意的。RDBMS通常提供两种类型的安全:数据安全和系统安全。

      Server(服务器):为发出请求的客户提供服务的软件应用程序。参见两层/三层客户端-服务器体系结构。

      Simple attribute(简单属性):只有一个组件的属性。

      Single -valued attribute(单值属性):对于一个实体出现只有一个值的属性。

      Specialization(特化):通过标识用来区分实体间成员的特征来花实体间成员的差别的过程。

      Specialization hierarchy(特化层次结构):同类型层次结构(Type hierarchy)。

     SQL(Structured Query Language,结构化查询语言):一种用于RDBMS的非过程化数据库语言。换言之,你只需要指定你需要那些信息,而不需要指定如何得到这些信息。SQL已经被国际标准化组织(ISO)标准化了,因此SQL是定义和操纵RDBMS的正式和实际上的标准语言。

      Strong entity(强实体):一个不依赖于其他实体的主健的存在而存在的实体。

      Subclass(子类):为(超类)实体中的某些出现并保持特定属性和关系并有不同角色的实体

      Superclass(超类):为实体中的所有出现保存公共属性和关系的实体。可参见特化和泛化。

      Superkey(超键,ER模型):一个属性或属性集,诶译的标识了每个实体地出现。

      Superkey(超键,关系模型):一个列或者列集,的标识了表中地一个记录。

      System catalog(系统目录):保存关于数据库地结构、用户、应用程序等信息地数据。

      System definition(系统定义):数据库应用声明周期重的一个阶段,包括定义数据库应用程序以及他的主要用户视图地范围和边界。

      System security(系统安全):在系统级保护数据库地访问和使用,不如用户名和密码。

      Table(表):同关系(relation)。

      Ternary relationship(三元关系):三个实体间的关系。例如panch,staff和member之间的Registers关系。

      Testing(测试):数据库应用生命周期的一个阶段,包括执行应用程序并有意地发现错误。

      Third normal form,3NF(第三范式):一个已经是1NF和2NF的表,同时满足所有的非主健的列的值仅能从主健列得到,而不能从其他列得到。

      3GL, Third-Generation Language(第三代语言):一种过程化的语言,比如COBOL、C、C++,它需要用户(通常是程序员)指定必须要干什么事情以及如何干这些事情。

      Three-tier client-server architecture(三层客户端-服务器体系结构):由处理用户界面的客户和处理业务逻辑的应用程序服务器以及数据处理曾组成,而数据库服务器是用来来运行DBMS的。

      Top-down approach(自顶向下方法,用于数据库设计):一种设计方法,此种方法从定义系统的主要结构开始,然后将这些结构逐步细分成更小的单元。在数据库设计中,通过标识实体和数据间的关系开始这个顶层的步骤,然后逐步添加细节,比如你希望保存的关于实体和关系的信息(成为属性)以及在实体、关系和属性上的所有约束。

      Transaction(事务):由用户和应用程序执行的一个动作或一系列动作,这些动作访问或修改数据库的内容。

      Transaction Processing Monitor,TPM(事务处理监视器):控制数据在客户端和服务器键转换的程序,以便为联机事务处理(OLTP)提供一个一致的环境。

      Transitive dependency(传递依赖):假设A、B、C是表中的列,如果B依赖于A(A-->B),并且C依赖于B(B- ->C),则C通过B传递而依赖于A(假设A不依赖于B或C)。如果在主健上存在一个传递依赖,则此表就不是3NF的。必须从表中去掉传递依赖以达到3NF的要求。

      Tuple(元组):关系中的一行记录。

      Two-tier client-server architecture(两层客户端-服务器体系结构):由处理主要业务和数据处理逻辑以及与用户的接口的客户端应用程序和管理和控制数据库访问的服务器程序组成。

      Type hierarchy(类型层次结构):一个是提以及它的子类和他们的超类,等等。

      UML(Unified Modeling Language,统一建模语言):在20世纪80年代和90年代引入的诸多面向对象分析与设计方法重的一种较新的方法。

      Update anomalies(更新异常):当用户视图更新一个包含冗余数据的标识可能引起的不一致。有三种类型的异常:插入、删除和更新。

      User view(用户视图):从特定的作业(比如经理或管理者)角度或业务应用领域(比如市场、职员或库存控制)定义的数据库应用的需求。

      View(视图):一个“虚拟底表”,它不实际存在数据库中,但他由 DBMS从现有底它所涉及的基本表中产生。

      View integration approach(视图综合法,用于数据库设计):每个用户视图的需求,用来构建代表用户试图底独立数据模型。在数据库设计阶段,结果数据库模型被合并成一个更大的模型。

      

    带你深入了解数据库设计中的英文术语表

    Access method(访问方法):此步骤包括从文件中存储和检索记录。

      Alias(别名):某属性的另一个名字。在SQL中,可以用别名替换表名。

      Alternate keys(备用键,ER/关系模型):在实体/表中没有被选为主健的候选键。

      Anomalies(异常)参见更新异常(update anomalies)

      Application design(应用程序设计):数据库应用程序生命周期的一个阶段,包括设计用户界面以及使用和处理数据库的应用程序。

      Attribute(属性)(关系模型):属性是关系中命名的列。

      Attribute(属性)(ER模型):实体或关系中的一个性质。

      Attribute inheritance(属性继承):子类成员可以拥有其特有的属性,并且继承那些与超类有关的属性的过程。

      Base table(基本表):一个命名的表,其记录物理的存储在数据库中。

      Binary relationship(二元关系):一个ER术语,用于描述两个实体间的关系。例如,panch Has Staff。

      Bottom-up approach(自底向上方法):用于数据库设计,一种设计方法学,他从标识每个设计组建开始,然后将这些组件聚合成一个大的单元。在数据库设计中,可以从表示属性开始底层设计,然后将这些属性组合在一起构成代表实体和关系的表。

      Business rules(业务规则):由用户或数据库的管理者指定的附加规则。

      Candidate key(候选键,ER关系模型):仅包含标识实体所必须得最小数量的属性/列的超键。

      Cardinality(基数):描述每个参与实体的可能的关系数目。

      Centralized approach(集中化方法,用于数据库设计):将每个用户试图的需求合并成新数据库应用程序的一个需求集合

      Chasm trap(深坑陷阱):假设实体间存在一根,但某些实体间不存在通路。

      Client(客户端):向一个或多个服务器请求服务的软件应用程序。

      Clustering field(群集字段):记录总的任何用于群集(集合)航记录的非键字段,这些行在这个字段上有相同的值。

      Clustering index(群集索引):在文件的群集字段上定义的索引。一个文件最多有一个主索引或一个群集索引。

      Column(列):参加属性(attribute)。

      Complex relationship(复杂关系):度数大于2的关系。

      Composite attribute(复合属性):由多个简单组件组成的属性。

      Composite key(复合键):包含多个列的主健。

      Concurrency control(并发控制):在多用户环境下同时执行多个十五并保证数据完整性的一个DBMS服务。

      Constraint(约束):数据库不允许包含错误数据的一致性规则。

      Data conversion and loading(数据转换和加载):数据库应用生命周期重的一个阶段,包括转换现有数据到新数据库中以及酱下耨应用程序转换到新的数据库上运行。

      Data dictionary(数据字典):参见系统目录(system catalog)。

      Data independence(数据独立性):使用数据的应用程序的数据描述部分。这意味着,如果将新的数据结构添加到数据库中,或者数据库中现有的结构被修改了,那么使用此数据库的就会受到影响,除非应用程序不直接依赖于被修改的部分。

      Data model(数据模型):描述数据、数据间关系以及数据的约束的概念的一个集成的集合。

      Data rendancy(数据冗余):参见冗余数据(rendant data)。

      Data security(数据安全):包括对数据库对象(如表和视图)的访问和使用以及用户可以在这些对象上实施的操作。

      Database(数据库):是逻辑上相关的数据(以及这些数据的描述)的一个共享的集合,用于解决公司对信息的需求。

      Database design(数据库设计):数据库应用生命周期中的一个阶段,包括创建一个支持公司的操作和目标的数据库的设计。

      Database integrity(数据库完整性):指存储数据的正确定和一致性。完整性通常用约束来表达。

      Database Management System,DBMS(数据库管理系统):一个能够让用户定义、创建和维护数据库并控制对数据库的访问的软件系统。

      Database planning(数据库规划):能尽可能有效的实现数据库应用的各阶段的管理活动。

      Database server(数据库服务器):同服务器。

      DBMS engine(DBMS引擎):同服务器。

      DBMS selection(DBMS选择):数据库应用生命周期中的一个阶段,包括选择一个合适的DBMS来支持数据库应用。

      Degree of a relationship(关系的度):一个关系中参与的实体的个数。
     Denormalization(反规范化):形式上,这个术语指的是对基本表结构的修改,这样新的表比原始的表的规范化程度要低。但也可以用此属于更宽泛地形容将两个表和并成一个新表的情形,而这个新表与原来的表具有相同的范式,但比原表包含更多的空值。

      Derived attribute(派生属性):表示其值可以从一个相关属性和属性集的值派生得到的属性,这个属性在实体中不是必须的。

      Design methodology(设计方法学):一种结构化的方法,它使用过程、工具和文档来支持和简化设计过程。

      Disjoint constraint(无连接约束):描述子类的成员间的关系,并指明超类某个成员是否有可能成为一个或多个子类的成员。

      Domain(域):一个或多个属性的取值范围。

      Entity(实体):具有相同性质的对象的集合,它是由用户或公司标识并可独立存在的。

      Entity integrity(实体完整性):在一个基本表中,主健列的值不能为空。

      Entity occurrence(实体出现):实体中的一个可标识的对象。

      Entity-Relationship model(实体关系模型):公司的实体、属性和关系的详细逻辑表示。

      Fact-finding(事实发现):使用诸如面谈和提问等技术收集关于系统的事实、需求和性能的形式化过程。

      Fan trap(扇形陷阱):但从第三个实体扇出的两个实体有1:*关系时出现扇形陷阱,但这两个实体在他们之间应该有直接关系以提供必要的信息。

      Field(字段):同元组(Tuple)。

      File(文件):存储在副主存储器中的相关记录的一个命名集合。

      File-based system(基于文件的系统):一个文件集合,用来管理(创建、插入、删除、更新和检索)一个或多个文件中的数据,并产生基于这些文件中的数据的应用(通常是报表)。

      File organization(文件组织):当文件存储在磁盘上时,对文件中的记录的安排方式。

      First normal form(1NF,第一范式):表中的每个列的交叉处以及记录包含切进包含一个值的表。

      Foreign key(外健):一个表中的一个列或者多个列的集合,这些列匹配某些其他(也可能是同一个)表中的候选键。

      4GL, Fourth-Generation Language(*语言):一种非过程化语言,比如SQL,他只需要用户定义必须完成什么操作,4GL负责将所进行的操作翻译成如何实现这些操作。

      Full functional dependency(完全函数依赖):一个列在功能上依赖于复合主健,但不依赖于主健的任何一个子集的条件。

      Functional dependency(函数依赖):描述表中列之间的关系。

      Generalization(泛化):通过标识实体间的公共特征使实体间差别最小化的过程。

      Generalization hierarchy(泛化层次结构):同类型层次(type hierarchy)。

      Global data model(全局数据模型):代表整个公司(和被模型化的公司的一部分)的数据模型。

      Implementation(实现):数据库应用生命周期中的一个阶段,包括数据库和应用程序设计的物理实现。

      Index(索引):一种允许DBMS将特定的记录更快的放置到文件中,从而加快对用户查询的响应的数据结构。

      Infomation system(信息系统):能够在整个公司范围内收集、管理、控制和分发数据/信息的资源。

      Inheritance(继承):参见属性继承(attribute inheritance)。

      Integrity constaints(完整性约束):防止出现数据库中的数据不一致的约束。

      IS-A hierarchy(IS-A层次结构):同类型层次结构(type hierarchy)。

      Local logical data model(局部逻辑数据模型):代表特定用户视图或用户视图的组合的数据模型。

      Logical database design(逻辑数据库设计):基于特定的数据模型构建公司的数据的模型的过程,但不依赖于特定的DBMS以及其他的物理条件。
     Meta-data(元数据):关于数据的数据,参见系统目录(system catalog)。

      Mision objective(使命目标):标识数据库必须支持的特定任务。

      Mission statement(使命语句):定义数据库应用程序的主要目标。

      Multiplicity(多样性):定义与某个相关实体的一次出现有关的实体的出现数目。

      Multi-valued attribute(多值属性):为一个实体的出现保存多个值的属性。

      Nonkey attribute/column(非键属性/列):不是键的一部分的属性/列。

      Normal forms(范式):规范化过程的一个阶段。前三个范式分别为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。

      Normalization(规范化):一种产生带有需要的特性的技术,这种特性能支持用户和公司的需求。

      Null(空值):表示当前不知道或对于这条记录来说不可使用的一个列的值。

      Operational maintenance(操作维护):数据库应用生命周期的一个阶段,包括监视和维护系统安装后的运行。

      Participation constraint(参与约束,EER模型):确定超类中的每个出现是否必须作为子类的一个成员进行参与。

      Participation constraint(参与约束,ER模型):确定是否所有或者仅仅是某些实体出现参与到关系中。

      Physical database design(物理数据库设计):在二级存储上产生数据库实现的描述的过程,它描述基本表、文件的组织、用于获得有效访问的索引以及所有与完整性约束和安全性*有关的说明。

      Primary index(主索引):在文件的有序键字段上构建的索引。一个文件最多可以有一个主索引或一个群集索引。

      Primary key(主健,ER模型):用来标识每个实体的出现的候选键。

      Primary key(主健,关系模型):在一个表中用来标识记录性的候选键。

      Privileges(权限):允许用户在给定基本表和视图上执行的操作。

      Prototyping(原型):数据库的应用程序生命周期的一个阶段,包括勾践数据库应用程序的工作模型。

      Query-by-Example(QBE):一种用于关系型DBMS的非过程化的数据库语言。QBE是一个图形化的“点-按”查询数据库的方法。

      RDBMS:关系型DBMS。

      Record(记录):同元组(Tuple)。

      Recovery control(恢复控制):当时百事,将数据库还原到正确状态的过程。

      Rcursive relationship(递归关系):一种关系,挡同一个实体在不同的角色中参与多次时就会出现递归关系。例如Staff Supervises Staff。

      rendant data(冗余数据):在多个表中存储的重复数据。

      Referential integrity(参照完整性):如果一个表中存在外健,则外健值必须匹配主表中的某些记录的候选键的值。

      Relation(关系):一个关系是一张表,它也有列和行。

      Relational model(关系模型):以表(或关系)的形式表示数据的数据模型。

      Relational database(关系数据库):规范化表的集合。

      Relation (关系):实体间有意义的关系。

      Relationship occurrence(关系出现):两个实体出现之间的可标识的联系。

      Requirements collection and analysis(需求收集于分析):数据库应用程序生命周期的一个阶段,包括收集和分析数据库应用程序所要支持的关于公司的信息,并使用这些信息来标识新的数据库应用需求。

      Row(行):同元组(Tuple)。

      Second normal form(第二范式):一个已经是第一范式的表,同时满足所有的非主健列只能从构成主健的全部列中获得。

      Secondary index(二级索引):在数据文件的非有序字段上定义的索引。

      Security(安全):指防止数据库被非授权的用户访问,包括有意的和无意的。RDBMS通常提供两种类型的安全:数据安全和系统安全。

      Server(服务器):为发出请求的客户提供服务的软件应用程序。参见两层/三层客户端-服务器体系结构。

      Simple attribute(简单属性):只有一个组件的属性。

      Single -valued attribute(单值属性):对于一个实体出现只有一个值的属性。

      Specialization(特化):通过标识用来区分实体间成员的特征来花实体间成员的差别的过程。

      Specialization hierarchy(特化层次结构):同类型层次结构(Type hierarchy)。

     SQL(Structured Query Language,结构化查询语言):一种用于RDBMS的非过程化数据库语言。换言之,你只需要指定你需要那些信息,而不需要指定如何得到这些信息。SQL已经被国际标准化组织(ISO)标准化了,因此SQL是定义和操纵RDBMS的正式和实际上的标准语言。

      Strong entity(强实体):一个不依赖于其他实体的主健的存在而存在的实体。

      Subclass(子类):为(超类)实体中的某些出现并保持特定属性和关系并有不同角色的实体

      Superclass(超类):为实体中的所有出现保存公共属性和关系的实体。可参见特化和泛化。

      Superkey(超键,ER模型):一个属性或属性集,诶译的标识了每个实体地出现。

      Superkey(超键,关系模型):一个列或者列集,的标识了表中地一个记录。

      System catalog(系统目录):保存关于数据库地结构、用户、应用程序等信息地数据。

      System definition(系统定义):数据库应用声明周期重的一个阶段,包括定义数据库应用程序以及他的主要用户视图地范围和边界。

      System security(系统安全):在系统级保护数据库地访问和使用,不如用户名和密码。

      Table(表):同关系(relation)。

      Ternary relationship(三元关系):三个实体间的关系。例如panch,staff和member之间的Registers关系。

      Testing(测试):数据库应用生命周期的一个阶段,包括执行应用程序并有意地发现错误。

      Third normal form,3NF(第三范式):一个已经是1NF和2NF的表,同时满足所有的非主健的列的值仅能从主健列得到,而不能从其他列得到。

      3GL, Third-Generation Language(第三代语言):一种过程化的语言,比如COBOL、C、C++,它需要用户(通常是程序员)指定必须要干什么事情以及如何干这些事情。

      Three-tier client-server architecture(三层客户端-服务器体系结构):由处理用户界面的客户和处理业务逻辑的应用程序服务器以及数据处理曾组成,而数据库服务器是用来来运行DBMS的。

      Top-down approach(自顶向下方法,用于数据库设计):一种设计方法,此种方法从定义系统的主要结构开始,然后将这些结构逐步细分成更小的单元。在数据库设计中,通过标识实体和数据间的关系开始这个顶层的步骤,然后逐步添加细节,比如你希望保存的关于实体和关系的信息(成为属性)以及在实体、关系和属性上的所有约束。

      Transaction(事务):由用户和应用程序执行的一个动作或一系列动作,这些动作访问或修改数据库的内容。

      Transaction Processing Monitor,TPM(事务处理监视器):控制数据在客户端和服务器键转换的程序,以便为联机事务处理(OLTP)提供一个一致的环境。

      Transitive dependency(传递依赖):假设A、B、C是表中的列,如果B依赖于A(A-->B),并且C依赖于B(B- ->C),则C通过B传递而依赖于A(假设A不依赖于B或C)。如果在主健上存在一个传递依赖,则此表就不是3NF的。必须从表中去掉传递依赖以达到3NF的要求。

      Tuple(元组):关系中的一行记录。

      Two-tier client-server architecture(两层客户端-服务器体系结构):由处理主要业务和数据处理逻辑以及与用户的接口的客户端应用程序和管理和控制数据库访问的服务器程序组成。

      Type hierarchy(类型层次结构):一个是提以及它的子类和他们的超类,等等。

      UML(Unified Modeling Language,统一建模语言):在20世纪80年代和90年代引入的诸多面向对象分析与设计方法重的一种较新的方法。

      Update anomalies(更新异常):当用户视图更新一个包含冗余数据的标识可能引起的不一致。有三种类型的异常:插入、删除和更新。

      User view(用户视图):从特定的作业(比如经理或管理者)角度或业务应用领域(比如市场、职员或库存控制)定义的数据库应用的需求。

      View(视图):一个“虚拟底表”,它不实际存在数据库中,但他由 DBMS从现有底它所涉及的基本表中产生。

      View integration approach(视图综合法,用于数据库设计):每个用户视图的需求,用来构建代表用户试图底独立数据模型。在数据库设计阶段,结果数据库模型被合并成一个更大的模型。

      

    2015年计算机二级《C语言》考试上机测试选择题

    一、选择题(每小题1分,共40小题,共40分)

      1.算法的空间复杂度是指( )。

      A.算法程序的长度

      B.算法程序中=的指令条数

      C.算法程序所占的存储空间

      D.算法执行过程中所需要的存储空间

      2.下列叙述中正确的是( )。

      A.一个逻辑数据结构只能有一种存储结构

      B.逻辑结构属于线性结构,存储结构属于非线性结构

      C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

      D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

      3.简单的交换排序方法是( )。

      A.快速排序

      B.选择排序

      C.堆排序

      D.冒泡排序

      4.关于结构化程序设计原则和方法的描述错误的是( )。

      A.选用的结构只准许有一个入口和一个出口

      B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现

      C.不允许使用GOT0语句

      D.语言中若没有控制结构,应该采用前后一致的方法来模拟

      5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。

      A.可重用性差

      B.安全性差

      C.非持久性

      D.冗余性

      6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。

      A.模拟现实世界中不同事物之间的联系

      B.强调模拟现实世界中的算法而不强调概念

      C.使用现实世界的概念抽象地思考问题从而自然地解决问题

      D.不强调模拟现实世界中的算法而强调概念

      7.对如下二叉树进行后序遍历的结果为( )。

      2015年计算机二级《C语言》考试上机测试题(1)

      A.ABCDEF

      B.DBEAFC

      C.ABDECF

      D.DEBFCA

      8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。

      A.模块间的关系

      B.系统结构部件转换成软件的过程描述

      C.软件层次结构

      D.软件开发过程

      9.两个或两个以上模块之间关联的紧密程度称为( )。

      A.耦合度

      B.内聚度

      C.复杂度

      D.数据传输特性

      10.下列描述错误的是( )。

      A.继承分为多重继承和单继承

      B.对象之间的通信靠传递消息来实现

      C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征

      D.类是具有共同属性、共同方法的对象的集合

      11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。

      A.DB包含DBS和DBMS

      B.DBMS包含DB和DBS

      C.DBS包含DB和DBMS

      D.没有任何关系

      12.下列合法的声明语句是( )。

      A.int_abc=50;

      B.double int=3+5e2.5;

      C.long do=1L:

      D.float 3_asd=3e-3;

      13.设x、Y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是( )。

      A.x&&Y

      B.x<=Y

      C.x‖y+z&&y-z

      D.!((x  14.若ch为char型变量,k为int型变量(已知字符a的ASCIl码是97),则执行下列语句后输出的结果为( )。

      ch=’b’;

      k=10:

      printf("%X,%o,",ch,ch,k);

      printf("k=%%d\n",k);

      A.因变量类型与格式描述符的类型不匹配,输出无定值

      B.输出项与格式描述符个数不符,输出为0值或不定值

      C.62,142,k一%d

      D.62,142,k一%l0

      15.有下列程序: 、

      fun(int X,int y){return(x+y);)

      main()

      { int a=1,b=2,c=3,sum;

      sum=fun((a++,b++,a+b),c++);

      printf("%d\n",sum);

      }

      执行后的输出结果是( )。

      A.6

      B.7

      C.8

      D.9

      16.假定x和Y为double型,则表达式x=2,y—x+3/2的值是( )。

      A.3.500000

      B.3

      C.2.000000

      D.3.000000

      17.有如下程序:

      main()

      {int x=1,a=0,b=0;

      switch(x)

      {

      case 0:b++;

      case l:a++;

      case 2:a++;b++;

      )

      printf("a=%d,b=%d\n",a,b);

      )

      该程序的输出结果是( )。

      A.a=2,b=1

      B.a=1,b=1

      C.a=1,b=0

      D.a=2,b=2

      18.下列程序的输出结果是( )。

      main()

      {int i=1,j=2,k=3;

      if(i++= =1&&(++j= =3= =‖k++= =3))

      printf("%d%d%d\n",i,J,k);

      )

      A.1 2 3

      B.2 3 4

      C.2 2 3

      D.2 3 3

      19.下列程序的输出结果是( )。

      #include

      main()

      { int a=0,i;

      for(i=1;i<5;i++)

      { switch(i)

      { case 0:

      case 3:a+=1;

      case l:

      case 2:a+=2;

      default:a+=3;

      )

      printf("%d",i);

      )

      A.19 B.1 C.6 D.8

      20.有以下程序:

      main()

      {int X,i;

      for(i=1;i<=50;i++)

      {x=i;

      if(X%2=O)

      if(x%3=O)

      if(X%7=0) .

      printf("%d,i)";

      )

      )

      输出结果是( )。

      A.28

      B.27

      C.42

      D.41

      21.以下程序的输出结果是( )。

      main()

      {int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;

      for(i=1;i<3;i++)

      for(j=0;j<=i;j++)s+=a[i][j];

      printf("%d\n",s);

      }

      A.18

      B.19

      C.20

      D.21

      22.有下列程序:

      main()

      { int k=5;

      while(--k) printf("%d",k=1);

      printf("/n");

      )

      执行后的输出结果是( )。

      A.1

      B.2

      C.4

      D.死循环

      23.若有定义:“int a[2][3];”,则对a数组的第i行第J列元素的正确引用为( )。

      A.*(*(a+i)+j)

      B.(a+i)[j]

      C.*(a+i+j)

      D.*(a+i)+j

      24.下列能正确进行字符串赋值的是( )。

      A.char s[5]={"ABCDE"};

      B.char s[5]={’A’,’B’,’C’,’D’,’E’}; 、

      C.char*S;S="ABCDE";

      D.char*s;printf("%《",s);

      25.现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。

      2015年计算机二级《C语言》考试上机测试题(1)

       struct node

      {har data;

      struct node*next;)*P,*q,*r;

      现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。

      A.q-:>next=r->next;p--:>next=r;rm:>next=q;

      B.q-:>next=r;q->next=r->next;r->next=q;

      C.q-:>next=r->next;r->next=q;p->next=r;

      D.q-:>next=q;p->next=r;q->next=r->next;

      26.有下列程序:

      main()

      {int i,j,x=0;

      for(i=0,i<2;i++)

      {x++;

      for(j=0;j<=3;j++)

      {if(j%2)continue;

      x++:

      )

      x++:

      }

      printf("x=%d\n"x);

      }

      程序执行后的输出结果是( )。

      A.x=4

      B.x=8

      C.x=6

      D.x=12

      27.有下列程序:

      int funl(double a){return a*=a;} 、

      int fun2(double x,double y)

      {double a=0,b=0;

      a=funl(x);b=funl(y);return(int)(a+b);

      )

      main()

      {double w;w=fun2(1.1,2.0),……}

      程序执行后变量w中的值是( )。 、

      A.5.21 B.5 C.5.0 D.0.0

      28.有下列程序:

      main()

      {int i,s=0,t[]={1,2,3,4,5,6,7,8,9};

      for(i=0;i<9;i+=2)s+=*(t+i);

      printf("%d\n",s);

      }

      程序执行后的输出结果是( )。

      A.45

      B.20

      C.25

      D.36

      29.有下列程序:

      int fun(int n)

      {if(n= =1))return l;

      else

      return(n+fun(n-1)):

      }

      main()

      { int x;

      seanf("%d",&x);x=fun(x);printf("%d\n",x);

      }

      执行程序时,给变量x输入l0,程序的输出结果是( )。

      A.55

      B.54

      C.65

      D.45

      30.有下列程序:

      int fun(int x[],int n)

      { static int sum=0,i;

      for(i=0;i   return sum;

      }

      main()

      {int a[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;

      s=fun(a,5)+fun(b,4);printf("%d\n",s);

      程序执行后的输出结果是( )。 、

      A.45

      B.50

      C.60

      D.55

      31.有下列程序:

      main()

      f char*P[]={"3697","2584");

      int i,j;long num=0;

      for(i=0;i<2;i++)

      {j=0;

      while(p[i][j]!=’\0’)

      {if((p[i][j]-t\0’)%2)num=10*num+p[j][j]-’0’;

      j+=2;

      )

      )

      printf("%d\n",num);

      )

      程序执行后的输出结果是( )。

      A.35 B.37 C.39 D.3975

      32.以下程序的输出结果是( )。

      main()

      { char st[20]="hell0\O\t\\\”;

      printf("%d%d\n",strlen(st),sizeof(st));

      }

      A.9 9

      B.5 20

      C.13 20

      D.20 20

      33.若有下的定义:"int t[3][2];",能正确表示t数组元素地址的表达式是( )。

      A.&t[3][2]

      B.t[3]

      C.t[l]

      D.t[2][2]

      34.函数fseek(pf,OL,SEEK_END)中的SEEK_END代表的起始点是( )。

      A.文件开始

      B.文件末尾

      C.文件当前位置

      D.以上都不对

      35.下述程序的输出结果是( )。

      #include

      main()

      {int i;

      for(i=1;i<=10;i++)

      {if(i*i>=20)&&(i*i<=lOO))

      break;

      }

      printf("%d\n",i*i);

      )

      A.49

      B.36

      C.25

      D.64

      36.若有定义“int b[8],*p=b;”,则p+6表示( )。

      A.数组元素b[6]的值

      B.数组元素b[6]的地址

      C.数组元素b[7]的地址

      D.数组元素b[0]的值加上6

      37.设变量已正确定义,则以下能正确计算f=n!的程序是( )。

      A.f=0; for(i=1;i<=n;i++)f*=i;

      B.f=1;for(i=1;i  C.f=1;for(i=n;i>1;i++)f*=i;

      D.f=1;for(i=n;i>=2;i--)f*=i;

      38.下述程序执行的输出结果是( )。

      #include

      main()

      {char a[2][4]; ,

      strcpy(a。"are");strcpy(a[1],"you");

      a[o][3]=’&’;

      printf("%s\n",a);

      )

      A.are&you

      B.you

      C.are

      D.&

      39.设x=011050,则x=x&01252的值是( )。

      A.0000001000101000

      B.1111110100011001

      C.0000001011100010

      D.1100000000101000

      40.在“文件包含,,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是( )。

      A.直接按系统设定的标准方式搜索目录

      B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

      C.仅仅搜索源程序所在目录

      D.仅仅搜索当前目录

    2015年计算机二级《C语言》考试上机测试选择题

    一、选择题(每小题1分,共40小题,共40分)

      1.算法的空间复杂度是指( )。

      A.算法程序的长度

      B.算法程序中=的指令条数

      C.算法程序所占的存储空间

      D.算法执行过程中所需要的存储空间

      2.下列叙述中正确的是( )。

      A.一个逻辑数据结构只能有一种存储结构

      B.逻辑结构属于线性结构,存储结构属于非线性结构

      C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

      D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

      3.简单的交换排序方法是( )。

      A.快速排序

      B.选择排序

      C.堆排序

      D.冒泡排序

      4.关于结构化程序设计原则和方法的描述错误的是( )。

      A.选用的结构只准许有一个入口和一个出口

      B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现

      C.不允许使用GOT0语句

      D.语言中若没有控制结构,应该采用前后一致的方法来模拟

      5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。

      A.可重用性差

      B.安全性差

      C.非持久性

      D.冗余性

      6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。

      A.模拟现实世界中不同事物之间的联系

      B.强调模拟现实世界中的算法而不强调概念

      C.使用现实世界的概念抽象地思考问题从而自然地解决问题

      D.不强调模拟现实世界中的算法而强调概念

      7.对如下二叉树进行后序遍历的结果为( )。

      2015年计算机二级《C语言》考试上机测试题(1)

      A.ABCDEF

      B.DBEAFC

      C.ABDECF

      D.DEBFCA

      8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。

      A.模块间的关系

      B.系统结构部件转换成软件的过程描述

      C.软件层次结构

      D.软件开发过程

      9.两个或两个以上模块之间关联的紧密程度称为( )。

      A.耦合度

      B.内聚度

      C.复杂度

      D.数据传输特性

      10.下列描述错误的是( )。

      A.继承分为多重继承和单继承

      B.对象之间的通信靠传递消息来实现

      C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征

      D.类是具有共同属性、共同方法的对象的集合

      11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。

      A.DB包含DBS和DBMS

      B.DBMS包含DB和DBS

      C.DBS包含DB和DBMS

      D.没有任何关系

      12.下列合法的声明语句是( )。

      A.int_abc=50;

      B.double int=3+5e2.5;

      C.long do=1L:

      D.float 3_asd=3e-3;

      13.设x、Y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是( )。

      A.x&&Y

      B.x<=Y

      C.x‖y+z&&y-z

      D.!((x  14.若ch为char型变量,k为int型变量(已知字符a的ASCIl码是97),则执行下列语句后输出的结果为( )。

      ch=’b’;

      k=10:

      printf("%X,%o,",ch,ch,k);

      printf("k=%%d\n",k);

      A.因变量类型与格式描述符的类型不匹配,输出无定值

      B.输出项与格式描述符个数不符,输出为0值或不定值

      C.62,142,k一%d

      D.62,142,k一%l0

      15.有下列程序: 、

      fun(int X,int y){return(x+y);)

      main()

      { int a=1,b=2,c=3,sum;

      sum=fun((a++,b++,a+b),c++);

      printf("%d\n",sum);

      }

      执行后的输出结果是( )。

      A.6

      B.7

      C.8

      D.9

      16.假定x和Y为double型,则表达式x=2,y—x+3/2的值是( )。

      A.3.500000

      B.3

      C.2.000000

      D.3.000000

      17.有如下程序:

      main()

      {int x=1,a=0,b=0;

      switch(x)

      {

      case 0:b++;

      case l:a++;

      case 2:a++;b++;

      )

      printf("a=%d,b=%d\n",a,b);

      )

      该程序的输出结果是( )。

      A.a=2,b=1

      B.a=1,b=1

      C.a=1,b=0

      D.a=2,b=2

      18.下列程序的输出结果是( )。

      main()

      {int i=1,j=2,k=3;

      if(i++= =1&&(++j= =3= =‖k++= =3))

      printf("%d%d%d\n",i,J,k);

      )

      A.1 2 3

      B.2 3 4

      C.2 2 3

      D.2 3 3

      19.下列程序的输出结果是( )。

      #include

      main()

      { int a=0,i;

      for(i=1;i<5;i++)

      { switch(i)

      { case 0:

      case 3:a+=1;

      case l:

      case 2:a+=2;

      default:a+=3;

      )

      printf("%d",i);

      )

      A.19 B.1 C.6 D.8

      20.有以下程序:

      main()

      {int X,i;

      for(i=1;i<=50;i++)

      {x=i;

      if(X%2=O)

      if(x%3=O)

      if(X%7=0) .

      printf("%d,i)";

      )

      )

      输出结果是( )。

      A.28

      B.27

      C.42

      D.41

      21.以下程序的输出结果是( )。

      main()

      {int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;

      for(i=1;i<3;i++)

      for(j=0;j<=i;j++)s+=a[i][j];

      printf("%d\n",s);

      }

      A.18

      B.19

      C.20

      D.21

      22.有下列程序:

      main()

      { int k=5;

      while(--k) printf("%d",k=1);

      printf("/n");

      )

      执行后的输出结果是( )。

      A.1

      B.2

      C.4

      D.死循环

      23.若有定义:“int a[2][3];”,则对a数组的第i行第J列元素的正确引用为( )。

      A.*(*(a+i)+j)

      B.(a+i)[j]

      C.*(a+i+j)

      D.*(a+i)+j

      24.下列能正确进行字符串赋值的是( )。

      A.char s[5]={"ABCDE"};

      B.char s[5]={’A’,’B’,’C’,’D’,’E’}; 、

      C.char*S;S="ABCDE";

      D.char*s;printf("%《",s);

      25.现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。

      2015年计算机二级《C语言》考试上机测试题(1)

       struct node

      {har data;

      struct node*next;)*P,*q,*r;

      现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。

      A.q-:>next=r->next;p--:>next=r;rm:>next=q;

      B.q-:>next=r;q->next=r->next;r->next=q;

      C.q-:>next=r->next;r->next=q;p->next=r;

      D.q-:>next=q;p->next=r;q->next=r->next;

      26.有下列程序:

      main()

      {int i,j,x=0;

      for(i=0,i<2;i++)

      {x++;

      for(j=0;j<=3;j++)

      {if(j%2)continue;

      x++:

      )

      x++:

      }

      printf("x=%d\n"x);

      }

      程序执行后的输出结果是( )。

      A.x=4

      B.x=8

      C.x=6

      D.x=12

      27.有下列程序:

      int funl(double a){return a*=a;} 、

      int fun2(double x,double y)

      {double a=0,b=0;

      a=funl(x);b=funl(y);return(int)(a+b);

      )

      main()

      {double w;w=fun2(1.1,2.0),……}

      程序执行后变量w中的值是( )。 、

      A.5.21 B.5 C.5.0 D.0.0

      28.有下列程序:

      main()

      {int i,s=0,t[]={1,2,3,4,5,6,7,8,9};

      for(i=0;i<9;i+=2)s+=*(t+i);

      printf("%d\n",s);

      }

      程序执行后的输出结果是( )。

      A.45

      B.20

      C.25

      D.36

      29.有下列程序:

      int fun(int n)

      {if(n= =1))return l;

      else

      return(n+fun(n-1)):

      }

      main()

      { int x;

      seanf("%d",&x);x=fun(x);printf("%d\n",x);

      }

      执行程序时,给变量x输入l0,程序的输出结果是( )。

      A.55

      B.54

      C.65

      D.45

      30.有下列程序:

      int fun(int x[],int n)

      { static int sum=0,i;

      for(i=0;i   return sum;

      }

      main()

      {int a[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;

      s=fun(a,5)+fun(b,4);printf("%d\n",s);

      程序执行后的输出结果是( )。 、

      A.45

      B.50

      C.60

      D.55

      31.有下列程序:

      main()

      f char*P[]={"3697","2584");

      int i,j;long num=0;

      for(i=0;i<2;i++)

      {j=0;

      while(p[i][j]!=’\0’)

      {if((p[i][j]-t\0’)%2)num=10*num+p[j][j]-’0’;

      j+=2;

      )

      )

      printf("%d\n",num);

      )

      程序执行后的输出结果是( )。

      A.35 B.37 C.39 D.3975

      32.以下程序的输出结果是( )。

      main()

      { char st[20]="hell0\O\t\\\”;

      printf("%d%d\n",strlen(st),sizeof(st));

      }

      A.9 9

      B.5 20

      C.13 20

      D.20 20

      33.若有下的定义:"int t[3][2];",能正确表示t数组元素地址的表达式是( )。

      A.&t[3][2]

      B.t[3]

      C.t[l]

      D.t[2][2]

      34.函数fseek(pf,OL,SEEK_END)中的SEEK_END代表的起始点是( )。

      A.文件开始

      B.文件末尾

      C.文件当前位置

      D.以上都不对

      35.下述程序的输出结果是( )。

      #include

      main()

      {int i;

      for(i=1;i<=10;i++)

      {if(i*i>=20)&&(i*i<=lOO))

      break;

      }

      printf("%d\n",i*i);

      )

      A.49

      B.36

      C.25

      D.64

      36.若有定义“int b[8],*p=b;”,则p+6表示( )。

      A.数组元素b[6]的值

      B.数组元素b[6]的地址

      C.数组元素b[7]的地址

      D.数组元素b[0]的值加上6

      37.设变量已正确定义,则以下能正确计算f=n!的程序是( )。

      A.f=0; for(i=1;i<=n;i++)f*=i;

      B.f=1;for(i=1;i  C.f=1;for(i=n;i>1;i++)f*=i;

      D.f=1;for(i=n;i>=2;i--)f*=i;

      38.下述程序执行的输出结果是( )。

      #include

      main()

      {char a[2][4]; ,

      strcpy(a。"are");strcpy(a[1],"you");

      a[o][3]=’&’;

      printf("%s\n",a);

      )

      A.are&you

      B.you

      C.are

      D.&

      39.设x=011050,则x=x&01252的值是( )。

      A.0000001000101000

      B.1111110100011001

      C.0000001011100010

      D.1100000000101000

      40.在“文件包含,,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是( )。

      A.直接按系统设定的标准方式搜索目录

      B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

      C.仅仅搜索源程序所在目录

      D.仅仅搜索当前目录

    数据库逻辑模型

    数据库关系模型(数据库逻辑模型)是将数据概念模型转换为所使用的数据库管理系统(DBMS)支持的数据库逻辑结构,即将E-R图表示成关系数据库模式。数据库逻辑设计的结果不是唯一的,需利用规范化理论对数据库结构进行优化。

    在关系模型中,数据库的逻辑结构是一张二维表。在数据库中,满足下列条件的二维表称为关系模型:

    1)每列中的分量是类型相同的数据;

    2)列的顺序可以是任意的;

    3)行的顺序可以是任意的;

    4)表中的分量是不可再分割的最小数据项,即表中不允许有子表;

    5)表中的任意两行不能完全相同。

    由此可见,有序的航空物探测量剖面数据不满足数据库关系模型条件第3条“行的顺序可以是任意的”,因此,不能简单地直接利用关系数据库(如Oracle,SQL Server,Sybase等)来管理剖面数据,需将数据在数据库中的存储方式改为大字段存储,确保不因数据库数据的增加和删除等操作改变剖面数据有序特性。

    一、大字段存储

    (一)大字段存储技术

    大字段LOB(Large Object)技术是Oracle专门用于存放处理大对象类型数据(如多媒体材料、影像资料、文档资料等)的数据管理技术。LOB包括内部的和外部的两种类型。内部LOB又分CLOB(字符型)、BLOB(二进制型)等3种数据类型,其数据存储在数据库中,并且支持事务操作;外部LOB只有BFILE类型,其数据存储在操作系统中,并且不支持事务操作。LOB存放数据的长度最大可以达到4G字节,并且空值列(没有存放数据)不占空间(图2-6)。

    图2-6 大字段存储示意图

    由于外部LOB存放在操作系统文件中,其安全性比内部LOB差一些。此外,大字段的存储支持事务操作(批量提交和回滚等),而外部LOB不支持事务操作。所以,航空物探测量剖面数据采用BLOB来存储。对于BLOB类型,如果数据量小于4000字节,数据库通常采用行内存储,而数据量大于4000字节采用行外存储。分析航空物探测量剖面数据,每个场值数据占4个字节(单精度),目前航磁数据采样率为10次/s,4000字节只能存储100 s数据;一般情况下航空物探测量每条测线飞行时间至少在10 min以上,每条测线数据量远远大于4000字节。所以,航空物探测量剖面数据采用行外存储方式,即大字段列指定“Disable Storage In Row”的存储参数。

    由于大字段类型长度可变,最大可到4G。假设测线飞行时间为T,场值采样率为n次/s,测线场值数据量为4Tn,所以有4Tn≤4G。单条测线飞行时间T不会超过10 h(36000 s,航空物探测量1架次至少飞行1个往返2条测线),则场值的采样率n≤4G/4T=4×1024×1024×1024/4×36000次/s=29826次/s。采用大字段来存储测量数据,不仅能够减少数据表的记录数,提高查询效率,而且使得采样率的扩展不受。

    (二)大字段存储技术应用

    由于航空物探数据的数据量较大,现有的航磁测量数据按基准点方式(点存储)存储可达几亿个数据记录。若按磁场数据采样点存储方式(简称“场值存储方式”),则记录条数=(磁场数据采样率/坐标采样率)点存储方式的记录数,达几十亿条数据记录,且随着数据采样率的扩展、测点的加密,航空物探测量数据量随着时间的推移呈现快速增长之势。显然,如果采用常规的表结构来存储,势必造成数据的存储、管理、检索、浏览和提取都非常困难。另一方面,从航空物探专业应用需求来说,很少对单个测点的场值数据进行运算、分析等操作,一般至少是对一条测线或以上测线,多数时候是需要对整个测区的场值数据进行化极、上延、正反演拟合等。

    因此,在航空物探数据库表结构设计时,改变过去将基准点或场值点数据记录作为数据库最小管理对象的理念,采用了大字段存储技术,将测线作为数据库最小管理对象,将测线上的测量数据,如坐标数据和磁场、重力场数据分别存储在相应大字段中。在航空物探数据库建设中,大量采用数据库的大字段存储技术(详见《航空物探信息系统数据库结构设计》)。

    (三)大字段存储效率

    以航磁测量数据为例分析大字段存储技术优势。如果以场值存储方式存储测线数据,则每条记录包含架次号、测线号、基准号、地理坐标、投影坐标、磁场数据等,由于坐标数据采样率2次/s,磁场数据采样率10次/s,每5个磁场数据中,只有第1个磁场数据有坐标数据,其他4个坐标数据是内插出来,因此在测线记录中会产生大量冗余的数据坐标数据。采用点存储方式存储的测线数据记录数等于线上基准点数,若采用大字段存储方式,一条测线数据只存储为1条数据记录(图2-7),一般一条测线的测点数近万个,甚至更多,可见采用大字段存储大大减少测线数据存储记录数,提高数据的存取效率。

    以某测区的两条航迹线为例,分别采用3种方式测试数据库的数据存储效率。磁场数据的采样率10次/s,坐标数据采样率2次/s,两条测线上共有基准点8801个。以场值方式存储先内插坐标信息,使得每个场值数据都拥有自己的坐标,然后存入数据库,共有数据记录44005条,写入数据库时间为57.22 s,读取时间为1.03 s。第二种方式是以采样点的方式进行存储,共有8801条记录,写入数据库时间为9.47 s,读取需要0.91 s。第三种方式是以大字段的形式存储,只有2条记录,写入数据库1.03 s,读取时间为0.44 s(表2-2)。大字段数据存储记录数最少,存取效率最高。用整个测区数据测试效果更加明显。

    表2-2 三种数据存储方法的存取效率比较

    图2-7 大字段存储方式示意图

    二、联合主键

    主外键是关系型数据库建立表间关系的核心。在航空物探空间数据库建设过程中,要素类与要素类之间、要素类与对象类之间,以及对象类与对象类之间的关系的描述有3种形式,即拓扑关系——描述要素类与要素类之间结点、邻接和联通关系;叠加关系——描述要素类与要素类之间的相交、包含与分类关系;隶属关系——描述对象类与对象类之间的派生关系。前两种关系是采用空间数据模型建立的关系,而隶属关系是通过主键建立的对象类与对象类之间的关系。在建立一对一、一对多的表间关系时,需要在整个数据库表中确定具有唯一性的一个字段作为主键(主关键字)。

    按照传统的航空物探数据的档案管理模式,每个项目分配一个自然数作为档案号,项目的所有资料均与此档案号相联系。勘查项目和科研项目的档案号是编号的,且均从001开始。加之人工管理的原因,存在1个项目2个档案号和2个项目1个档案号的情况,因此现行的档案号与项目之间的对应关系不具备唯一性,不能作为项目的唯一标识,即不能作为数据库表的主键。项目编号也不能作为数据库表的主键,项目编号也只是近十年的事,以前的项目没有项目编号。

    综合考虑上述因素和项目具有分级、分类的特点,提出了构造项目唯一标识码(简称“项目标识”)的方法,并以此码作为数据库表的主键。

    项目标识(主键):AGS+项目类别(2位)+项目起始年份(4位)+档案号(6位)

    标识含义:AGS——航空物探的缩位代码;

    项目类别——2位代码,01代表勘查项目、02代表科研项目;

    起始年份——4位代码,项目开始年号;

    档案号——6位代码,为了与传统的项目管理方式相衔接,后面3~4位是

    项目档案管理模式下的档案号,不足部分补零。

    以上15位编码是一级项目的项目标识,二级及其以下级别的项目标识是在上一级项目标识基础上扩展2位数字代码,中间用“.”号隔开,数字为该级项目的序号。项目标识定义为30位编码,适用于六级以内的项目。例如:AGS022004000576.08.04.02,表示该项目为2004年开展的档案号为576的航空物探科研项目(一级项目)的第8课题(二级项目)第4子课题(项目)的第2专题。由此可见,该项目标识不仅仅是一个建立表间关系的关键字,同时还表达了不同级别项目间的隶属关系。在系统软件开发时,利用此关系生成了项目的分级树形目录,用户对项目的层次关系一目了然,便于项目查询。

    数据库的主键一经确定,相应地需要确定联合主键的组成及其表达方式。所谓联合主键就是数据资料的唯一标识,在一个数据库表中选择2个或者2个以上的字段作为主键。由于航空物探数据绝大部分与项目标识有关,加之数据的种类较多,分类复杂,单凭主键确定数据库表中记录的唯一性,势必需要构建极其复杂的主键,这种方法既不利于主键的数据操作,又会造成大量的数据冗余,合理地使用联合主键技术可以很好地解决资料唯一问题。以项目提交资料为例,提交的资料分为文字类资料、图件类资料和媒体类资料,我们对资料进行分类和编号,例如100代表文字资料(110——World文档,120——PDF文档),200代表图件资料(210——基础地理资料、220——基础地质资料,230——航迹线图,240——剖面图,250——等值线图等),300代表媒体资料(310——PPT文档,320——照片等),第1位(百位)表示该资料的类型,第2~3位表示该类资料的序号。

    在数据库管理和项目资料查询时,采用项目标识与资料分类编号作为联合主键(图2-8),可以高效地实现复杂数据的查询。在整个数据库系统中多处(项目查询、数据提取等模块)使用联合主键技术。

    图2-8 联合主键实例

    三、信息标准化

    为了实现数据共享,在航空物探数据库建模过程中,参考和引用了近百个国家信息化标准,编制了4个中心信息化标准和1个图件信息化工作指南。

    (一)引用的国家信息化标准

    1)地质矿产术语分类代码:地球物理勘查,地球化学勘查,大地构造学,工程地质学,结晶学及矿物学,矿床学,水文地质学,岩石学,地质学等。

    2)国家基础信息数据分类与代码,国土基础信息数据分类与代码,地球物理勘查技术符号,地面重力测量规范,地面磁勘查技术规程,地面高精度磁测技术规程,大比例尺重力勘查规范,地理信息技术基本术语,地理点位置的纬度、经度和高程的标准表示法,地名分类与类别代码编制规则。

    3)地球空间数据交换格式;数学数字地理底图数据交换格式;数字化地质图图层及属性文件格式。

    (二)本系统建立的信息化标准

    编写了“航空物探空间数据要素类和对象类划分标准”,“航空物探项目管理和资料管理分类代码标准”,“航空物探勘查分类代码标准”,“航空物探信息系统元数据标准”,“航空物探图件信息化工作指南”,以便与其他应用系统进行信息交换,实现数据库资料共享。

    航空物探空间数据要素类和对象类划分标准:根据物探方法、数据处理过程以及推断解释方法和过程,把与GIS有关的数据划分为不同类型的要素类-对象类数据,按专业、比例尺、数据内容对要素类和对象类进行统一命名,使空间数据库中的每个要素类和对象类的命名具有唯一性,防止重名出现。规定要素类-对象类数据库表结构及数据项数值类型。

    航空物探项目管理和资料管理分类代码标准:规定了航空物探项目管理和资料管理的相关内容,包括航空物探勘查项目和科研项目的项目立项、设计、实施、成果、评审、资料汇交等项目管理的全过程中的内容,以及项目成果资料和收集资料的归档、发送、销毁、借阅等资料管理与服务过程中的内容和数据项代码。

    航空物探勘查分类代码标准:在“地质矿产术语分类代码 地球物理勘查”(国家标准GB/T 9649.28—1998)增加了航磁、航重专业方面所涉及的数据采集、物性参数、方法手段、仪器设备、资料数据解释及成图图件等内容和数据项代码。

    航空物探信息系统元数据标准:规定了航空物探空间数据管理与服务的元数据(数据的标识、内容、质量、状况及其他有关特征)的内容。

    四、航迹线数据模型

    (一)航迹线模型的结构

    航空物探测量是依据测量比例尺在测区内布置测网(测线和切割线)。当飞机沿着设计的测线飞行测量时,航空物探数据收录系统按照一定的采样率采集采样点的地理位置、高度和各种地球物理场信息。采用属性数据分置的方法,将测线地理位置信息从航空物探测量数据中分离出来,形成航迹线要素类表,在此表中只存储与航迹线要素类有关的数据,如项目标识、测区编号、测线号、测线类型(用于区分测线、切割线、不同高度线、重复线等)、坐标、高度值等;将航迹线的对象类数据(磁场、重力场基础数据)分别以大字段形式存储在各自的二维表中,它们共享航迹线,解决了多源有序不同采样率的航空物探测量数据的数据存储问题,在满足要素类空间查询的同时,统一数据的存储方式(图2-9)。航迹线要素类隶属于测区要素类,它们之间为空间拓扑(包含)关系。测区从属于勘查项目,每个勘查项目至少有一个测区,它们之间为1对多关系。有关项目信息存放在项目概况信息对象类表中,各种表之间通过项目标识进行联接。

    图2-9 航迹线数据模型结构

    (二)航迹线的UML模型

    统一建模语言UML(Unified Modeling Language)是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。UML是面向对象技术领域内占主导地位的标准建模语言,成为可视化建模语言的工业标准。在UML基础上,ESRI定义了空间数据库建模的ArcGIS包、类库和扩展原则。

    图2-10 与航迹线有关的数据库表逻辑模型结构图

    在确定航迹线数据模型后,以它为基础,使用UML完成与航迹的有关的项目概况信息、测区信息、原始数据等数据库表逻辑模型设计(图2-10)。

    由UML模型生成Geodatabase模式时,模型中的每个类都对应生成一个要素类或对象类。类的属性映射为要素类或对象类的字段。基类属性中包含的字段,在继承类中不需重复创建。例如,每个类都包括项目标识等字段,可以创建一个包含公共属性的基类,其他类从该类继承公共的属性,而无需重复建基类中包含的属性。因为基类没有对应的要素类或对象类,所以将基类设置为抽象类型。要素类之间的关系采用依赖关系表示。

    五、数据库逻辑模型

    关系数据库的逻辑结构由一组关系模式组成,因而从概念结构到关系数据库逻辑结构的转换就是将概念设计中所得到的概念结构(ER图)转换成等价的UML关系模式(图2-11)。在UML模型图中,要素数据集用Geodatabase工作空间下的静态包表示。要素集包不能互相嵌套,为了容易组织,在生成物理模型后,在要素数据集包中自定义嵌套。要素数据集与空间参考有关,但是空间参考不能在UML中表达。要素类和二维表都是以类的形式创建的,区别是要素类继承Feature Class的属性,而二维表继承Object属性。为了表达每种元素的额外属性,比如设置字符型属性字段的字符串长度,设置要素类的几何类型(点、线或面)需要使用Geodatabase预定义的元素标记值。

    图2-11 逻辑设计关系转换

    基于航空物探数据的内在逻辑关系进行分析,使用统一建模语言(UML)构建数据实体对象间的关系类,定义了航空物探数据库的逻辑模型(图2-12)。

    数据库是农业信息化的重要基础,简述设计数据库的步骤及基本要求有哪些?

    步骤及基本要求如下:

    1.需求分析阶段(常用自顶向下)

    进行数据库设计首先必须准确了解和分析用户需求(包括数据与处理里)。需求分析是整个设计过程的基础,也是最困难,最耗时的一步。需求分析是否做得充分和准确,决定了在其上构建数据库大厦的速度与质量。需求分析做的不好,会导致整个数据库设计返了重做。

    需求分析的任务,是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后在此基础上确定新的系统功能,新系统还得充分考虑今后可能的扩充与改变,不仅仅能够按当前应用需求来设计。调查的重点是,数据与处理。

    达到信息要求,处理要求,安全性和完整性要求分析方法常用SA(Structured Analysis)结构化分析方法,SA方法从最上层的系统组织结构入手,采用自顶向下,逐层分解的方式分析系统。

    2.概念结构设计阶段(常用自底向上)

    概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象,形成了一个于具体DBMS的概念模型。

    3.逻辑结构设计阶段(E-R图)

    逻辑结构设计是将概念结构转换为某个DBMS所支持的数据居模型,并将进行优化。

    4.物理设计阶段

    物理设计是为逻辑数据结构模型选取一个最适合应用环境的物理结构(包括存储结构和存取方

    法)。

    5.数据库实施阶段

    数据库实施阶段,设计人员运营DBMS提供的数据库语言(如sql)及其宿主语言,根据逻辑设计

    和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行。

    6.数据库运行和维护阶段

    数据库应用系统经过试运行后,即可投入正式运行,在数据库系统运行过程中必须不断地对其进行

    评价,调整,修改。

    Top