❶ 建立空间数据库的原理、方法和步骤
一、目标任务
1.主要工作任务
《1∶25万内陆干旱区地下水资源评价塔里木盆地地下水勘查空间数据库》是在综合研究已有资料的基础上,补充野外实际工作,建立了58个标准图幅的1∶25万空间数据库。
2.技术要求
采用中国地质大学开发的MAPGIS软件平台,完全依照中国地质调查局提出的各项技术标准,执行中国地质调查局最新修订的《西北地下水资源勘查评价空间数据库工作指南》2.0版及其他相关标准。对选定的58幅1∶25万标准图幅综合水文地质图、地质图、生态环境水文地质图、地貌图、地下水开发利用规划图、地下水水化学类型图、地下水资源分布图、平原区地下水质量分区图、综合水文地质剖面图、重点流域等水位线图等图件进行数字化处理和空间数据库的建立。
参考标准或引用标准:
GB 2260中华人民共和国行政区划代码
GB 9649地质矿产术语分类代码
GB/14157水文地质术语
GB/T 14538-93综合水文地质图图例及色标(1∶200000~1∶500000)
GB/T 14848地下水质量标准
GB/T 13923-92,国土基础信息数据分类与代码(中国标准出版社,1992)
DZ/T 0197-1997数字化地质图图层及属性文件格式(国家行业标准)
西北地下水资源勘查评价空间数据库工作指南
3.提交成果
1)数据库成果(光盘汇交):见表6-1。
2)文档:属性表、图幅基本概况表、工作日志、自检表、互检表、质检组检查表、图面检查表。
表6-1 成果汇交光盘物理存储结构
3)塔里木盆地地下水勘查包括58个标准图幅的水文地质专业图件共7张彩色喷墨全要素图各1张、重点流域等水位线图3张和综合水文地质剖面图1张。
4)《1∶25万内陆干旱区地下水资源评价塔里木盆地地下水勘查空间数据库》建库报告一份。
二、工作方法及流程
(一)项目组织与实施
项目由新疆地质调查院组织,由水文地质工程地质、绘图、计算机等专业技术骨干组成,严格按照规范和技术要求实施。
(二)工作方法
概据任务书的要求,收集、购买已出版的塔里木盆地58幅图的地理信息数字化成果数据,采用中国地质大学开发的MAPGIS6.1软件平台,将此数据在经纬秒格式下进行拼接,按《西北地下水资源勘查评价空间数据库工作指南》标准对地理属性进行了修改。各类专业图件经过专业人员的编图,经审查合格后,采用彩色或灰度扫描,进行图形数字化,做到图元丢失率为0,误差小于0.02mm,其精度均达到设计要求。数据在矢量化过程中以作者原图为主的原则,属性内容以报告和图面内容相结合的方法采集,成果资料中没有的不予反映。
(三)工作流程
本次数据库建设完全按照《西北地下水资源勘查评价空间数据库工作指南》的具体要求,对相关数据资料进行整理。在MAPGIS支持环境下完成图形数据的输入和编辑,利用Access系统下创建的满足《西北地下水资源勘查评价空间数据库工作指南》数据结构要求的数据表,完成外挂属性数据的录入,并实现图层与属性数据的连接。
1.数据信息组成
根据新疆塔里木盆地地下水勘查总体设计书的要求,确定此次工作数据信息的内容为基础地理、基础地质、社会经济信息、水文地质信息(含水文地质条件、水文地质观测、地下水资源等)、环境地质信息、元数据信息,具体的数据信息与内容见表6-2。
表6-2 主要数据类型与数据特征
2.图层划分
新疆塔里木盆地空间数据库的建设,从基础资料图件到成果表达图件,多数内容涉及大量的矢量图形。因此,标准化处理必须确定各种图件的图层划分、图元、属性等方面的内容,以使图形库最大限度地达到共享。图形分层主要考虑到便于图形的操作、管理和计算,同时考虑数据本身的专业数据特点。图层划分详见表6-3 。
表6-3 塔里木盆地地下水勘查空间数据库图层划分
续表
注:#代表含水层编号,含水层未分时,#用“0”替代。
图6-1 工作流程示意图
3.数据准备阶段
作者原图及简单图件用二值或灰度,以300dpi精度扫描,复杂图件用彩色以300DPI精度扫描。所有图件的图式图例参数说明文件放入README文件夹中。
4.数据矢量化阶段
放大70倍进行图件的数字化处理。点线数字化时,要保证其准确性和自然光滑,有坐标的点采用单点展绘的方法直接投影到1∶25万图中,保证了精度。线数字化时,为确保拓扑时弧段不变形,未采用MAPGIS系统提供的线圆滑功能。
5.检查矢量化图件
喷绘数字化图件,对照原图进行自检、互检、抽检,并由水文地质专家进行100%的检查,确保矢量化后的图形数据与原图件一致性和完整性。
6.误差校正
塔里木盆地面积大,横跨4个带。各带图件经检查无误后,生成基于原图高斯北京投影带方式的理论图框,进行误差校正。每标准图幅采集13个控制点,除4个角点外,其余点均匀分布在图幅内。
7.无投影格式下重新拓扑
将检查无误的数据投影到经纬度格式。在经纬度下再进行各带各类图件的拼接,为确保套合精度,重新进行拓扑,录入面属性,再将参与做面的线从整体拓扑图层中弧转线中分离出来,做线属性。
8.喷绘图件
对参与整体拓扑的图层进行拓扑处理、错误检查、修改,然后编辑区颜色。将各图层形成工程文件后,彩喷出图。再由绘图专业人员和水文地质专家对照原图检查,检查出错误进行修改,再出图,再次检查,直至完全无误,最后彩喷成果图件。
9.填写属性卡片
属性卡片的内容以原图和原报告为主要依据。
10.录入属性
在MAPGIS属性库管理模块中将各图层ID号和图元编号做唯一。
11.转换文件格式
将经纬度格式下的属性文件,生成E00文件,转入ARCINFO中,形成最终的ARCINFO格式数据。
工作流程见图6-1。
❷ 如何合理和有效的进行数据库设计
通常情况下,可以从两个方面来判断数据库设计的是否规范:
1)一是看看是否拥有大量的窄表
窄表往往对于OLTP比较合适,符合范式设计原则
2)宽表的数量是否足够的少。
所谓的宽表就是字段比较多的表,包含的维度层次比较多,造成冗余也比较多,毁范式设计,但是利于取数统计
若符合这两个条件,我们可以说数据库设计的比较好.
当然这是两个泛泛而谈的指标。为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求。
要求一:表中应该避免可为空的列。
虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时候,需要进行特殊的处理。如此的话,就会增加数据库处理记录的复杂性。当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多。
所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免。若确实需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据库性能的影响降低到最少。
要求二:表不应该有重复的值或者列。
如现在有一个进销存管理系统,这个系统中有一张产品基本信息表中。这个产品开发有时候可以是一个人完成,而有时候又需要多个人合作才能够完成。所以,在产品基本信息表产品开发者这个字段中,有时候可能需要填入多个开发者的名字。
如进销存管理中,还需要对客户的联系人进行管理。有时候,企业可能只知道客户一个采购员的姓名。但是在必要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共同进行管理。因为在订单上,可能需要填入采购代表的名字;可是在出货单上,则需要填入仓库管理人员的名字等等。
为了解决这个问题,有多种实现方式。但是,若设计不合理的话在,则会导致重复的值或者列。如我们也可以这么设计,把客户信息、联系人都放入同一张表中。为了解决多个联系人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等。若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。
所以,我们在数据库设计的时候要尽量避免这种重复的值或者列的产生。笔者建议,若数据库管理员遇到这种情况,可以改变一下策略。如把客户联系人另外设置一张表。然后通过客户ID把供应商信息表跟客户联系人信息表连接起来。也就是说,尽量将重复的值放置到一张独立的表中进行管理。然后通过视图或者其他手段把这些独立的表联系起来。
要求三:表中记录应该有一个唯一的标识符。
在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来唯一的标识行记录,而不要通过名字、编号等字段来对纪录进行区分。每个表都应该有一个ID列,任何两个记录都不可以共享同一个ID值。另外,这个ID值最好有数据库来进行自动管理,而不要把这个任务给前台应用程序。否则的话,很容易产生ID值不统一的情况。
另外,在数据库设计的时候,最好还能够加入行号。如在销售订单管理中,ID号是用户不能够维护的。但是,行号用户就可以维护。如在销售订单的行中,用户可以通过调整行号的大小来对订单行进行排序。通常情况下,ID列是以1为单位递进的。但是,行号就要以10为单位累进。如此,正常情况下,行号就以10、20、30依次扩展下去。若此时用户需要把行号为30的纪录调到第一行显示。此时,用户在不能够更改ID列的情况下,可以更改行号来实现。如可以把行号改为1,在排序时就可以按行号来进行排序。如此的话,原来行号为30的纪录现在行号变为了1,就可以在第一行中显示。这是在实际应用程序设计中对ID列的一个有效补充。这个内容在教科书上是没有的。需要在实际应用程序设计中,才会掌握到这个技巧。
要求四:数据库对象要有统一的前缀名。
一个比较复杂的应用系统,其对应的数据库表往往以千计。若让数据库管理员看到对象名就了解这个数据库对象所起的作用,恐怕会比较困难。而且在数据库对象引用的时候,数据库管理员也会为不能迅速找到所需要的数据库对象而头疼。
其次,表、视图、函数等最好也有统一的前缀。如视图可以用V为前缀,而函数则可以利用F为前缀。如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最短的时间内找到自己所需要的对象。
要求五:尽量只存储单一实体类型的数据。
这里将的实体类型跟数据类型不是一回事,要注意区分。这里讲的实体类型是指所需要描述对象的本身。笔者举一个例子,估计大家就可以明白其中的内容了。如现在有一个图书馆里系统,有图书基本信息、作者信息两个实体对象。若用户要把这两个实体对象信息放在同一张表中也是可以的。如可以把表设计成图书名字、图书作者等等。可是如此设计的话,会给后续的维护带来不少的麻烦。
如当后续有图书出版时,则需要为每次出版的图书增加作者信息,这无疑会增加额外的存储空间,也会增加记录的长度。而且若作者的情况有所改变,如住址改变了以后,则还需要去更改每本书的记录。同时,若这个作者的图书从数据库中全部删除之后,这个作者的信息也就荡然无存了。很明显,这不符合数据库设计规范化的需求。
遇到这种情况时,笔者建议可以把上面这张表分解成三种独立的表,分别为图书基本信息表、作者基本信息表、图书与作者对应表等等。如此设计以后,以上遇到的所有问题就都引刃而解了。