A. 数据质量包括什么方面
数据质量包括数据质量控制和数据治理。
数据是组织最具价值的资产之一。企业的数据质量与业务绩效之间存在着直接联系,高质量的数据可以使公司保持竞争力并在经济动荡时期立于不败之地。有了普遍深入的数据质量,企业在任何时候都可以信任满足所有需求的所有数据。
一个战略性和系统性的方法能帮助企业正确研究企业的数据质量项目,业务部门与 IT 部门的相关人员将各自具有明确角色和责任,配备正确的技术和工具,以应对数据质量控制的挑战。
(1)用户数据库质量扩展阅读:
控制方法:
1、探查数据内容、结构和异常
第一步是探查数据以发现和评估数据的内容、结构和异常。通过探查,可以识别数据的优势和弱势,帮助企业确定项目计划。一个关键目标就是明确指出数据错误和问题,例如将会给业务流程带来威胁的不一致和冗余。
2、建立数据质量度量并明确目标
Informatica的数据质量解决方案为业务人员和IT人员提供了一个共同的平台建立和完善度量标准,用户可以在数据质量记分卡中跟踪度量标准的达标情况,并通过电子邮件发送URL来与相关人员随时进行共享。
3、设计和实施数据质量业务规则
明确企业的数据质量规则,即,可重复使用的业务逻辑,管理如何清洗数据和解析用于支持目标应用字段和数据。业务部门和IT部门通过使用基于角色的功能,一同设计、测试、完善和实施数据质量业务规则,以达成最好的结果。
4、将数据质量规则构建到数据集成过程中
Informatica Data Quality支持普遍深入的数据质量控制,使用户可以从扩展型企业中的任何位置跨任何数量的应用程序、在一个基于服务的架构中作为一项服务来执行业务规则。
数据质量服务由可集中管理、独立于应用程序并可重复使用的业务规则构成,可用来执行探查、清洗、标准化、名称与地址匹配以及监测。
5、检查异常并完善规则
在执行数据质量流程后,大多数记录将会被清洗和标准化,并达到企业所设定的数据质量目标。然而,无可避免,仍会存在一些没有被清洗的劣质数据,此时则需要完善控制数据质量的业务规则。Informatica Data Quality可捕获和突显数据质量异常和异常值,以便更进一步的探查和分析。
5、对照目标,监测数据质量
数据质量控制不应为一次性的“边设边忘”活动。相对目标和在整个业务应用中持续监测和管理数据质量对于保持和改进高水平的数据质量性能而言是至关重要的。
Informatica Data Quality包括一个记分卡工具,而仪表板和报告选项则具备更为广泛的功能,可进行动态报告以及以更具可视化的方式呈现。
B. 求一份SQL server数据库课程设计报告
2.2需求分析
(1)需求分析的任务
需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,用通俗的话来讲,就是分析了解用户关心什么,用户需要什么样的结果,然后在此基础上分析和设计新系统的数据库。
需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。
信息要求
是指用户需要从数据库中获得信息的内容与性质。由用户的信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
处理要求
是指用户要求完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。
安全性与完整性要求
一是指用户对系统和数据有什么安全性要求,如不同级别的用户具有什么操作权限和使用哪些数据;二是对数据的输入和存储的什么要求,如数据的长度和范围、数据的有效性、一致性和唯一性等。
确定用户的最终需求其实是一件很困难的事,这是因为一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此无法一下子准确地表达自己的需求,他们所提出的需求往往不断地变化。另一方面设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须与用户不断深入地进行沟通和交流,才能逐步得以确定用户的实际需求。
(2)需求分析的基本步骤
1.调查与初步分析用户的需求,确定系统的功能边界
⑴首先调查组织机构情况
⑵然后调查各部门的业务活动情况
⑶协助用户明确对新系统的各种要求
⑷确定新系统的结构和功能边界,确定哪些功能由计算机完成或将来由计算机完成,哪些活动由人工完成。
常用的调查方法有:
⑴跟班作业
⑵开调查会
⑶请专人介绍
⑷询问
⑸问卷调查
⑹查阅记录
2.生成数据字典
1)数据项条目:数据项是不可再分的数据单位,它直接反映事物的某一特征。
2)数据结构条目:反映了数据之间的组合关系。
3)数据流条目:数据流是数据结构在系统内传输的路径。
4)数据文件条目:数据文件是数据项停留或保存的地方,也是数据流的来源和去向之一。
5)处理过程条目。
(3) 案例分析:教学管理系统数据库的需求分析
用户的需求具体体现在各种信息的提供、保存、更新和查询上,这就要求数据库的结构能充分满足各种信息的输出和输入。需求分析阶段主要是收集基本数据,确定数据结构及数据处理的流程,组成一份详尽的数据字典,以便为后面的概念设计和逻辑设计打下基础。
2.3概念结构设计
概念结构设计是对收集来的信息和数据进行分析整理,确定实体、属性及联系,形成独立于计算机的反映用户观点的概念模型。概念设计的重点在于信息结构的设计,它是整个数据库系统设计的关键。
(1)概念结构设计的目标和任务
概念结构设计的目标是产生反映系统信息需求的数据库概念结构,即概念模式。概念结构是独立于DBMS和使用的硬件环境的。在这一阶段,设计人员要从用户的角度看待数据以及数据处理的要求和约束,产生一个反映用户观点的概念模式,然后再把概念模式转换为逻辑模式。
概念模型的表示方法很多,其中最着名、最常用的表示方法为实体-联系方法,这种方法也称为E-R模型方法,该方法采用E-R图描述概念模型。
E-R图提供了表示实体、属性和联系的方法,它由以下三个组件构成:
实体---用矩形表示,矩形框内写明实体名。
属性---用椭圆形表示,并用无向边将其与相应的实体连接起来。
联系---用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。
例如教学管理系统中的学生实体与课程实体的E-R图如下图表示:
(2)概念结构设计的过程
●数据抽象
概念结构是对现实世界的一种抽象,所谓抽象就是对实际的人、事、物和概念进行加工处理,抽取所关心的共同特性,用各种概念精确的加以描述,组成某种模型。
在需求分析中,已初步得到了有关各类实体、实体间的联系以及描述它们性质的数据元素,统称数据对象。
在这一阶段中,首先要从以上数据对象中找出:系统有哪些实体?每个实体有哪些属性?哪些实体间存在联系?每一种联系有哪些属性?然后就可以做出系统的局部E-R模型和全局E-R模型。
● 局部E-R模型设计
局部E-R模型设计是从数据流图出发确定实体和属性,并根据数据流图中表示的对数据的处理、确定实体之间的联系。
设计局部E-R图的步骤是:
1.确定实体类型和属性
实体和属性之间没有严格的区别界限,但对于属性来讲,可以用下面的两条准则作为依据:
1)作为属性必须是不可再分的数据项,也就是属性中不能再包含其他的属性。
2)属性不能与其他实体之间具有联系。
2.确定实体间的联系
依据需求分析结果,考察任意两个实体类型之间是否存在联系,若有,则确定其类型(一对一,一对多或多对多)。
3.画出局部E-R图
确定了实体及实体间的联系后,可用E-R图描述出来。形成局部E-R图之后,还必须返回去征求用户意见,使之如实地反映现实世界,同时还要进一步规范化,以求改进和完善。每个局部E-R图必须满足:
(1)对用户需求是完整的。
(2)所有实体、属性、联系都有惟一的名字。
(3)不允许有异名同义、同名异义的现象。
● 全局E-R模型的设计
各个局部E-R模型建立好后,还需要对它们进行合并,集成为一个整体的数据概念结构,即总E-R图。在合并全局E-R模型时,应注意检查和消除属性、命名的冲突及数据冗余。
(3)案例分析:教学管理系统数据库的概念结构设计
通过上面的需求分析,就可以进行数据库的概念结构设计,先对现实当中的人、事、物和概念进行抽象的加工处理,抽取所关心的共同特性,用各种概念进行描述,从中找出能够满足用户需求的各种实体,以及它们之间的关系,并用实体-联系图表示出来(即画出E-R图),为后面的逻辑结构设计打下基础。
1、确定实体及其属性
经过对人工进行的教学管理系统的业务调查,得知系统主要涉及以下几个实体:
● 学生实体:属性主要包括班级名称、学号、姓名、性别、出生日期、民族、政治面貌、来源地、入学成绩、学生类别、电话、备注等。
● 教师实体:属性主要包括教师号、教师姓名、性别、出生日期、所在系、职称
● 班级实体:属性主要包括系部名称、班级号、班级名称、班主任、学生人数、备注等。
● 系部实体:属性主要包括系号、系部名称、班级数等。
● 课程实体:属性主要包括课程号、课程名、考核方式、学分、学时数等。
2、确定实体之间的联系
2.4 逻辑结构设计
(1)逻辑结构设计的目标和任务
逻辑结构设计的目标就是把概念结构设计阶段设计好的E-R图转换为特定的DBMS所支持的数据模型(即层次、网状、关系模型之一),并对其进行优化。
概念模型向逻辑模型的转换过程分为3步进行:
(1)把概念模型转换为一般的数据模型。
(2)将一般的数据模型转换成特定的DBMS所支持的数据模型。
(3)通过优化方法将其转化为优化的数据模型。
(2) 概念模型转换为一般的关系模型
1.实体的转换规则
将E-R图中的每一个常规实体转换为一个关系,实体的属性就是关系的属性,实体的码就是关系的码。
2.实体间联系的转换规则
1)一个1:1联系可以转换为各自独立的关系模式,也可以与任意一端所对应的关系模式合并。
2)一个1 : n联系可以转换为各自独立的关系模式。
3)一个m : n联系转换为一个关系模式。转换的方法为:与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合
(3) 案例分析:教学管理系统数据库的逻辑结构设计
逻辑结构设计的任务是把概念结构设计阶段设计好的E-R图转换为特定的DBMS所支持的数据模型(即层次、网状、关系模型之一),并对其进行优化,得到满足用户要求和系统功能需求的关系模式。
1、 E-R模型转换为关系模式
将E-R模型转换成初始关系模式的一般规则是:系统中各个实体转换为对应的关系模式;实体之间多对多的联系也转换为关系模式。
根据转换规则,可以将系部、班级、学生、教师、课程五个实体转换成与之对应的五个关系模式;而将学生与课程两者之间多对多的选修关系以及教师、班级和课程三者之间多对多的开课关系也转换为关系模式。
2、关系模式的设计
根据上述的转换结果,在对关系模式中数据进行规范化处理后,得到了符合第三范式的关系模式如下:
学生:{学号、姓名、性别、出生日期、民族、政治面貌、来源地、入学成绩、学生类别、班级名称、电话、备注}
班级:{班级号、班级名称、班主任、学生人数、系部名称、备注}
系部:{系号、系部名称、班级数}
教师:{教师号、教师姓名、性别、出生日期、所在系、职称}
课程:{课程号、课程名、考核方式、学分、学时数}
选修:{学号、课程号、成绩}
开课: {教师号、班级名称、课程号、开课学期、授课地点}
每个关系模式中带下划线的属性或属性的组合表示主键、带双波浪线的属性表示与之关联的表的外键。
根据系统功能需求,数据采用SQL Server 2000所支持的实际数据模型,也就是数据库的逻辑结构。启动SQL Server 2000,创建一个数据库命名为:jxgl。该数据库中各个数据表的结构如下面各个表格所示。每个表格对应于数据库中的一个表。
3、将关系模式转换为数据库中的表
按照关系数据模型的结构,将关系模式转换为关系数据库中的数据表,转换的规则是:一个关系模式转换为一个数据表,关系模式中的每个属性转换为数据表中的一个列。同时设置表中各个列的名称、数据类型、数据宽度以及数据规则,得到如下几个表:
学生表(student)
列名 类型 宽度 规则
班级名称 CHAR 20 内容取自班级信息表的班级名称
学号 CHAR 10 主键、长度为10个字符
姓名 CHAR 8
性别 CHAR 2 非空、只能取“男”或“女”
出生日期 DATETIME
民族 CHAR 4 假定只能取以下之一:汉、壮、白、回、苗、满、其它
政治面貌 CHAR 4 只能取以下之一:党员、团员、群众
来源地 CHAR 10
入学成绩 INT
学生类别 CHAR 10 假定只能取以下之一:本科、大专(普)、大专(业)、中专、技校、函授、其它
电话 CHAR 11
备注 CHAR 10
注:(1)该表存放全校所有学生的基本信息,每个学生产生一条记录。
(2)学号的前4位表示年级,第5--8位表示班级号(其中第5-6位表示系号, 第7-8位表示系内班级号),最后两位是班内的学生编号,在输入记录内容时应加以区分。
班级表(class)
列名 类型 宽度 规则
系部名称 CHAR 10 非空、内容取自系部信息表的系部名称
班级号 CHAR 4 非空、长度为4个字符
班级名称 CHAR 20 主键
班主任 CHAR 8
学生人数 INT
备注 CHAR 10
注:(1)该表存放全校所有班级的信息,每个班级产生一条记录。
(2)班级号的前2位表示系号,后两位为系内的班级编号,在输入记录内容时应加以区分。
系部表(department)
列名 类型 宽度 规则
系号 CHAR 2 非空、长度为2个字符
系部名称 CHAR 10 主键
班级数 INT
注:该表存放某校所有的系部信息,每个系部产生一条记录。
教师表(teacher)
列名 类型 宽度 规则
教师号 CHAR 4 主键、长度为4个字符
姓名 CHAR 8
性别 CHAR 2 非空、只能取“男”或“女”
出生日期 DATETIME
职称 CHAR 6 只能取以下之一:教授、副教授、讲师、助教、其他
所在系 CHAR 20 非空、外键(内容取自系部表的系部名称)
课程表(course)
列名 类型 宽度 规则
课程号 CHAR 4 主键、长度为4个字符
课程名 CHAR 20
考核方式 CHAR 4 假定只能取以下之一:考试、考查、其他
学分 INT 非空
学时数 INT
注:该表存放某校所有的课程信息,每门课产生一条记录。
成绩表(SC)
列名 类型 宽度 规则
学号 CHAR 8 主键、内容取自学生信息表的学生姓名
课程号 CHAR 20 主键、内容取自课程信息表的课程名称
成绩 INT
注:该表存放某校所有学生的成绩信息,每个学生学习每门课程产生一条记录。
开课信息表(tcc)
列名 类型 宽度 规则
教师号 CHAR 4 主键、内容取自教师信息表的教师号
课程号 CHAR 4 主键、内容取自课程信息表的课程号
班级号 CHAR 4 主键、内容取自班级信息表的班级号
开课学期 CHAR 20
授课地点 CHAR 20
注:该表存放某校开设课程的信息,每个教师教授某个班级的某门课产生一条记录。
2. 5 物理设计
数据库的物理设计目标是在选定的DBMS上建立起逻辑设计结构确立的数据库结构,这一过程也称为数据库的物理实现。它主要包括两项工作:
一是根据数据库的结构、系统的大小、系统需要完成的功能及对系统的性能要求,决定选用哪个数据库管理系统。目前,数据库产品市场上比较好的产品有:Microsoft SQL Server、Oracle、IBM DB/2,SYBASE等。
二是根据选用的数据库管理系统的数据库实现方法来建立用户数据库,即创建所需要的数据库、表及其他数据库对象。
本系统选用的DBMS是SQL Server 2000,并在该系统上创建用户数据库jxgl以及下属的7个用户表:student、class、department、teacher、course、sc、tcc,各个表的结构按2.4节第3点各表给出的具体内容设定。
2. 5 实训二
以小组讨论的形式,完成人事工资管理系统用户数据库的设计,要求个人写出用户数据库设计的文档(包括数据库的需求分析、概念设计、逻辑设计和物理设计,表达方法可参考本章相应内容的案例分析部分),每个小组上交一份本系统用户数据库包括的数据表。
第三章 数据库的数据完整性设计
3.1数据完整性的基本概念及内容
正确创建数据库后,需要考虑数据的完整性、数据的安全性等要求。数据的完整性主要指数据的正确性、有效性、相容性,强制实施数据完整性可以确保数据库中的数据的质量。
进行数据完整性设计主要考虑以下几个方面的内容:
1)表名惟一;
由系统强制实施控制。
2)列名惟一;()
由系统强制实施控制。
3)数据行惟一;
通过设置主键约束或触发器来实施控制。
4)列值非空;
通过设置非空约束来实施控制。
5)列值惟一性
通过设置惟一约束或惟一索引来实施控制。
6)列值满足一定的条件
通过设置检查约束或触发器来实施控制。
7)数据的一致性和有效性
通过设置外键约束或触发器来实施控制。
至于具体要对数据库的哪一个表的哪一项数据进行什么样的数据完整性设计,还应根据用户的需求来考虑和确定。
3.2 数据完整性的分类与实现方法
在SQL Server关系数据库中,数据完整性分为以下三类:
1. 域完整性
域完整性是指一个列的输入有效性,是否允许空值。实现域完整性的方法主要有:限制数据类型(通过设定列的数据类型)、限定格式(通过CHECK约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT定义、NOT NULL定义和规则)以及程序控制。
2. 实体完整性
实体完整性是指保证表中所有的行唯一。实现实体完整性的方法主要有:索引、UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性以及程序控制。
3. 参照完整性
参照完整性也叫引用完整性。参照完整性确保主键(被引用表)和外键(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。如student表(称为引用表、参照表或子表)的class_id列就是参照class表(称为被引用表、被参照表或父表)的外键。参照完整性可以实现以下两种控制:
(1)存在外键时,被参照表中的这一行不能被删除,主键值也不能改变 (以student和class表的“班级名称”列为例说明)。
(2)若在被参照表中不存在包含相应主键的行时,一个外键值不能插入参照表中(MsgBox "添加记录成功!", vbOKOnly + vbInformation, "提示"
End Sub
Private Sub Command5_Click()
rs.Close
Unload Me
End Sub
Private Sub Form_Load()
rs.CursorLocation = adUseClient ' 设置在客户端创建游标
rs.CursorType = adOpenKeyset '设置游标类型为键集类型
rs.LockType = adLockOptimistic '设置打开记录集时的锁定类型为乐观锁,在执行UPdate方法前不锁定编辑的数据
rs.Open "select * from teacher", cnn
'在表格上显示class表的记录内容
Set DataGrid1.DataSource = rs
DataGrid1.Refresh
'将表格上的数据与文本框或下拉列表框绑定
Set Text1.DataSource = rs
Text1.DataField = "教师号"
Set Text2.DataSource = rs
Text2.DataField = "姓名"
Set Combo1.DataSource = rs
Combo1.DataField = "所在系"
Set Text3.DataSource = rs
Text3.DataField = "出生日期"
Set Text4.DataSource = rs
Text4.DataField = "从教日期"
Set Combo2.DataSource = rs
Combo2.DataField = "性别"
Set Combo3.DataSource = rs
Combo3.DataField = "职称"
Set Combo4.DataSource = rs
Combo4.DataField = "政治面貌"
Set Combo5.DataSource = rs
Combo5.DataField = "学历"
Set Text7.DataSource = rs
Text7.DataField = "家庭住址"
Set Text5.DataSource = rs
Text5.DataField = "联系电话"
Set Text6.DataSource = rs
Text6.DataField = "备注"
'下拉列表框提供班级名称
Combo1.Clear
rs1.Open "select 系部名称 from department", cnn
While Not rs1.EOF()
Combo1.AddItem Trim(rs1.Fields("系部名称"))
rs1.MoveNext
Wend
rs1.Close
End Sub
对其余几个表的数据进行增、删、改操作的窗体的设计方法与上述类拟。
C. 数据库管理员DBA的职责、系统分析员和数据库设计人员的职责、应用程序员的职责
数据库管理员负责全面管理和控制数据库系统,包括数据库的安装、监控、备份、恢复等基本工作。
系统分析员的主要职责是对软件项目进行整体规划、需求分析、设计软件的核心架构、指导和领导项目开发小组进行软件开发和软件实现,并对整个项目进行全面的管理工作。
数据库设计人员的职责包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。
应用程序员的职责:对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。参与需求调研、项目可行性分析、技术可行性分析和需求分析。
熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。负责相关技术文档的拟订。负责对业务领域内的技术发展动态进行分析研究。
(3)用户数据库质量扩展阅读
产品的整个生命周期里数据库管理员的职责重要而广泛,这催生了各个纵向的运维技术方向,凡是关系到数据库质量、效率、成本、安全等方面的工作,及涉及到的技术、组件,主要包括:
数据库监控技术:包括监控平台的研发、应用,服务监控准确性、实时性、全面性的保障。
数据库故障管理:包括服务的故障预案设计,预案的自动化执行,故障的总结并反馈到产品/系统的设计层面进行优化以提高产品的稳定性。
数据库容量管理:测量服务的容量,规划服务的机房建设,扩容、迁移等工作。
数据库性能优化:从各个方向,包括SQL优化、参数优化、应用优化、客户端优化等,提高数据库的性能和响应速度,改善用户体验。
数据库安全保障:包括数据库的访问安全、防攻击、权限控制等。
数据库自动部署:部署平台/工具的研发,及平台/工具的使用,做到安全、高效的发布服务。
数据库集群管理:包括数据库的服务器管理、分布式集群管理等。
数据库模型设计:包括数据库逻辑和物理模型的设计,如何实现性能最优,架构可扩展,服务可运维等。
D. 如何确保数据,信息的准确性,完整性,可靠性,及时性,安全性和保密性
数据完整性(Data Integrity)是
指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性(Entity Integrity)、域完整
性(Domain Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)。
保证数据的完整性:
用约束而非商务规则强制数据完整性
如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变化,那么只需要进行更新即可。
假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。
如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。除非你的字段命名很冗长,否则字段名本身还不够。 — Lamont Adams
只要有可能,请采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。
— Peter Ritchie
2. 分布式数据系统
对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该估计一下未来5 年或者10 年的数据量。当你把数据传送到其他站点的时候,最好在数据库字段中设置一些标记。在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。
— Suhair TechRepublic
3. 强制指示完整性
没有好办法能在有害数据进入数据库之后消除它,所以你应该在它进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。
— kol
4. 关系
如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。
— CS Data Architect
5. 采用视图
为了在你的数据库和你的应用程序代码之间提供另一层抽象,你可以为你的应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。
— Gay Howe
6. 给数据保有和恢复制定计划
考虑数据保有策略并包含在设计过程中,预先设计你的数据恢复过程。采用可以发布给用户/开发人员的数据字典实现方便的数据识别同时保证对数据源文档化。编写在线更新来“更新查询”供以后万一数据丢失可以重新处理更新。
— kol
7. 用存储过程让系统做重活
解决了许多麻烦来产生一个具有高度完整性的数据库解决方案之后,我所在的团队决定封装一些关联表的功能组,提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开发。在此期间,我们发现3GL 编码器设置了所有可能的错误条件,比如以下所示:
SELECT Cnt = COUNT (*)
FROM [<Table>]
WHERE [<primary key column>] = <new value>
IF Cnt = 0
BEGIN
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES ( <New value> )
ELSE
BEGIN
<indicate plication error>
而一个非3GL 编码器是这样做的:
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES
( <New value> )
IF @@ERROR = 2627 -- Literal error code for Primary Key Constraint
BEGIN
<indicate plication error>
第2 个程序简单多了,而且事实上,利用了我们给数据库的功能。虽然我个人不喜欢使用嵌入文字(2627)。但是那样可以很方便地用一点预先处理来代替。数据库不只是一个存放数据的地方,它也是简化编码之地。
— a-smith
8. 使用查找
控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等
E. 数据入库质量控制的方法实现
数据库数据质量是数据库的生命,再好的入库数据质量控制的方法,如果得不能贯彻和执行,也不能保证入库数据的正确性。所以,基于上述入库数据质量控制思想,研发了航空物探数据库数据采集软件(图5-3),强制数据入库工作按规范化的流程执行,保证数据库数据质量。
数据采集软件包括数据导入录入、数据检查、数据编辑、数据归档入库等功能,为了方便数据采集人员工作,把本系统应用软件中的数据查询统计和数据制图功能也集成到该软件中。各部分功能分述如下。
图5-3 数据库数据采集软件结构
一、创建项目树
航空物探勘查项目工作一般分为航空物探生产测量、数据处理和地质解释3个阶段,野外生产测量和数据处理完成之后分别编写航空物探生产报告和数据处理报告,通过评审后须上交测量资料和处理后的数据。此时,地质解释工作正进行。
航空物探科研项目工作一般是分课题(二级项目)、课题分子课题(三级项目)等进行的。级别低的项目总是最先完成,然后评审和上交资料;级别较高的项目较后完成,一级项目最后完成,最后上交资料。
如果把勘查项目的3个阶段当成3个课题(事实上的确如此,只是习惯上不这样叫),勘查项目和科研项目不仅在工作形式上是一致的,资料上交的次序也是相同的(图5-5)。这种按项目完成的先后次序进行项目资料归档方式,在资料人工管理人工服务时代,人们并没有觉得有什么问题。只是,资料管理方式的变革,人们对资料服务提出了更高的要求,希望资料信息化管理不要再忽视不同级别项目间的关系信息。
这种关系与计算机磁盘文件管理的目录间关系是相似的,目录等同于项目,子目录等同于子项目。目录、子目录间的关系似树形结构,称为目录树;项目、子项目间的关系也似树形结构,称之为项目树。有计算机常识的人都知道,按照一定的方式建立目录树,把文件存在相应目录下,不仅文件管理更有条理,用户查找文件的速度也成倍提高。因此,本系统采用项目树方式来管理项目资料。该管理方式符合人们的思维习惯,资料查询更方便。
图5-4 数据库数据采集软件主界面
图5-5 不同级别项目资料归档次序图
在新项目数据导入或录入数据库之前,须先创建项目树。建项目树与在磁盘上创建文件目录相似,按项目(目录)、子项目(子目录)顺序创建,不能倒行逆施。然后,按项目导入或录入数据。图5-6为创建项目树界面。用户在父项目的下拉框中选择新建项目的父项目(一级项目为null),再填写项目的档案号等信息后,按“确定”创建项目树的根项目(一级项目),或项目树的一个节点(子项目),并自动为项目分配一个项目标识号,作为识别项目和项目资料的唯一标志。
图5-6 创建项目树功能界面
二、数据录入和导入
项目数据进入数据库有数据录入和数据导入两种方式。数据录入方式是使用系统的数据录入界面将数据直接录入到数据采集库中。若用户已按入库数据接口标准要求整理好入库数据,可采用导入方式将数据导入到数据采集库中。其实,这两种方式没有本质上的差别。例如,项目概况数据、空间要素类(岩石物性、异常、解释评价)属性数据等都必须是人工录入的,区别是谁来录入?资料整理人员,还是数据采集人员?这不属本系统的研究范畴,系统支持这两种数据入库方式。
因数据库的每张表所包含的信息不同,所以每张表都应有独立的数据录入界面(录入、浏览、编辑数据)。加之用户查询界面、数据统计界面,1张数据库表需要3个用户界面。本系统共有地球物理数据库表31张,按照常规做法需要开发93个用户界面。随着航空物探技术发展,可能在数据库表中增加新的信息,或新增数据库表,都需要通过修改软件代码来满足新的需求。该方法不仅软件研发和测试工作量大,后期软件维护工作量也很大。
为此,本系统研究出根据数据库表的描述信息动态生成用户界面的方法,此方法具有很好的通用性,对数据库的所有表均适用,有效地降低了软件开发工作量,方便了后期软件维护。图5-7是使用该方法动态生成的项目概况数据录入界面,用于项目概况数据的录入和编辑。
图5-7 项目概况数据的录入定制界面
该方法是将数据库表的描述信息存储在资料库中的库表属性清单表中,在运行时系统根据数据库表名称从库表属性清单表和其相关的数据字典表中提取该表对应的字段信息,然后调用界面定制函数,根据界面类型(录入、浏览、修改、简单查询)动态生成相应的界面。
由于数据库表包含的字段数相差较大(多的近30个字段,少的不到10个字段)、同一表的字段类型不同(有字符串、数字、时间、大字段)、字段数据类型长度不一(有的字段长度为200个字符,有的只有1个字符),同时库表的相关字段在界面上相邻摆放较合适,针对这些问题在界面定制时采取以下策略:
1)对库表字段分组,并为每组取一个合适的名字。在定制界面上,同组的字段摆放在同一张卡片中,组名作为卡片名。
2)字段值来源于数据字典表的数字型字段,用组合框显示其值,组合框中内容从数据字典表提取。用文本框显示其他数字型字段、字符串型字段值。
3)根据定制界面上父控件的尺寸、字段名称、字段数据类型长度确定其对应控件的位置和大小,控件的布局遵循一行最多显示两字段的原则。
不同类型界面的定制方法大同小异,因此采用了同界面定制代码,只是在个别地方根据需要相关处理。例如,对于大字段型的字段,如果界面定制类型为“录入”,则其对应文本框后的命令按钮为打开文件。如果界面定制类型为“浏览”,则其对应文本框后的命令按钮为浏览大字段值。
三、入库前系统检查
入库数据进入采集数据前,系统对其进行唯一性检查、缺项检查和数据类型检查,即入库前系统检查。
唯一性检查:航空物探资料库是航空物探数据的最终目的地,但可能会有部分项目数据因没有通过质量检查而滞留在采集库中。在进行新的项目数据采集过程时,为了避免项目数据2次入库,在其进入采集库前需要进行唯一性检查。方法是用入库数据每条记录主键作为查询条件,查找资料库和采集库中相对应的库表是否存在有相同的记录。例如,黄海北部海域航空磁测普查(项目标识号AGS011978000251),在项目概况数据导入采集库时,根据项目概况数据库表的项目标识号(主键)在采集库和资料库的相应表中查找是否有相同的项目标识号存在:若资料库中存在,说明该项目数据已归档;若采集库中存在,该项目数据已被导入采集库中待检,不需再次导入。
缺项检查:入库数据的字段数必须等于相应数据库表的字段数,比数据库表字段数多或少都不能通过缺项检查。
数据类型检查:对入库数据所有字段数据进行类型检查。若是日期型数据,则检查数据格式(YYYY-MM-DD),YYYY、MM、DD是否为数字。若数字型数据,检查整数位和小数位的位数是否超过范围,整数位和小数位是否为数字。字符型数据,则检查字符串长度是否超限。
入库数据通过入库前系统检查后被存入采集库中,否则软件给出错误提示信息(图5-8)。采集人员根据提示信息纠正数据中存在错误,再新导入数据。
图5-8 入库前系统检查的错误提示
四、入库后系统检查
系统对进入采集库中的数据进行非空和可空检查、前后数据检查、相关数据检查、值域范围检查、选择范围检查,即入库后系统检查(图5-9)。
非空检查:入库数据指定字段的值不能为空,如所有数据库表的项目标识不能为空,项目名称、项目参加单位名称、参加人员名称都不能为空。
可空缺项检查:入库数据指定字段的值在有一定条件下可以为空,例如当勘查项目概况表记录方式字段的值为打点记录或纸卷模拟记录时,航磁数据的采样率为空。若为数字收录,航磁数据的采样率不能为空。
前后数据检查:检查入库数据指定字段与其父表中相同字段数据的一致性,如项目参加人员表中的项目标识必须与项目概况信息中的项目标识相同。
图5-9 入库后系统检查
相关数据检查:检查相关表中相关字段数据对入库数据指定字段的约束,如项目概况信息中有项目的起始日期和完成日期两个字段,那么项目人员参加项目工作的起止日期都必须在项目的起始日期和完成日期之间。
值域范围检查:入库数据指定字段的数值必须是在设定的值域范围内,如勘查项目概况中的调机小时设定在0和100 h范围,若超过此范围,调机小时数据有错误。
选择范围检查:入库数据指定字段的数值必须是一个已知数据集合的元素之一,如项目成果评价只能在优秀、良好、通过和不合格4个选项中择其一。
根据选定的库表名提取该库表各个字段的检查规则,逐条记录进行前后数据检查、相关检查、值域范围检查、选择范围检查。发现错误,把错误记录暂存在内存中,继续进行下条记录检查,至所有记录检查完。把错误写入检查日志表(若有相同检查日志记录,则先备份到检查日志备份表后再删除,以便查看数据入库不通过的历史轨迹);否则,写入一条系统检查通过的日志记录。再进行另一张表的系统检查,所有库表全部检查后,若有错误,系统给出错误提示信息。
五、拓扑检查
航空物探解释数据和评价数据为空间要素类数据,入库时要进行拓扑检查(表5-6,图5-10)。检查各要素类之间相互位置关系的正确性。
以油气远景评价数据集为例说明拓扑检查。检查规则是局部构造异常位置应位于油气远景评价区的某一分布区内,油气远景评价区之间不以有重叠。若发现错误,把检查的错误日志暂存在内存中,继续进行拓扑检查;检查完成后,把错误写入检查日志表。没有发现拓扑错误写入一条通过拓扑检查的日志记录。
表5-7 解释数据和评价数据拓扑检查规则表
图5-10 拓扑检查空间数据源列表界面
六、文件比较检查
通过入库后系统检查和拓扑检查的入库数据,系统将对其进行与原数据文件比较检查,保证数据的一致性。所有的入库数据均须与原数据文件进行比较检查。
根据项目标识号和库表名从采集库中提取相应的数据,若存在数据字典代码,则将其替换文字字符,存放在Oracle临时表中;打开本地路径下原数据文件,逐条记录对比。若有不匹配的记录,显示提示信息,并在日志库中写一条检查日志。
七、人工检查与复核
经过系统检查、空间拓扑检查,以及文件比较检查后,还必须进行人工检查和人工复核检查。人工检查是用原表格数据、空间属性数据、解释评价数据、图件、文字报告(含软件源代码)与采集库中相应的各类数据进行人工比对。若有原始纸质图件,则需从采集库中提取相应的数据使用相同软件相同绘图参数绘图,并加以比较。若人工检查发现错误,写明错误原因(图5-11),保存日志。
图5-11 填写人工检查结果界面
人工复核检查与人工检查过程完成一样,只是人员不同。
八、系统归档检查
在入库数据归档到资料库之前,系统对归档项目数据的完整性进行检查,即归档检查。系统根据归档项目的类别、工作性质、测量方法及归档阶段,定义了项目资料归档对照表,该表记录每类项目各个归档阶段的项目资料清单和资料的归档标识。在资料归档时,系统检查项目资料的归档标识。若为非空,说明该资料必须归档;若为空,说明该资料可归档,从而保证了数据库中的项目资料完整性。
如区域航空磁力勘查项目资料归档分为3个阶段(图5-12),第一阶段是生产测量资料归档,航空磁力勘查项目概况(项目概况、勘查项目概况、航磁概况)信息、测区信息生产报告必须归档。第二阶段是数据处理资料归档,航迹线数据、航磁数据、数据处理报告必须归档。第三阶段是地质解释资料归档,项目概况信息、岩石磁性数据、图件数据、文字数据、断裂构造和区域构造单元必须归档。
科研项目资料归档时,根据项目标识号及项目级次,确定该项目是否有子项目,以及子项目资料是否已全部归档。在所有子项目资料全部归档后,使用项目资料归档向导(图5-13)进行该级次的项目资料归档。如果项目属保密项目,系统同时对归档数据进行加密。数据成功归档后,系统删除采集库中已归档数据,并把各种检查日志存放到备份日志表中,以备检查。
图5-12 勘查项目资料归档示意图
图5-13 项目资料归档向导
F. 数据库与数据仓库的区别
数据库是面向事务的设计,数据仓库是面向主题设计的。数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
“与时间相关”:数据库保存信息的时候,并不强调一定有时间信息。数据仓库则不同,出于决策的需要,数据仓库中的数据都要标明时间属性。决策中,时间属性很重要。同样都是累计购买过九车产品的顾客,一位是最近三个月购买九车,一位是最近一年从未买过,这对于决策者意义是不同的。
“不可修改”:数据仓库中的数据并不是最新的,而是来源于其它数据源。数据仓库反映的是历史信息,并不是很多数据库处理的那种日常事务数据(有的数据库例如电信计费数据库甚至处理实时信息)。因此,数据仓库中的数据是极少或根本不修改的;当然,向数据仓库添加数据是允许的。
拓展资料:
数据仓库的出现,并不是要取代数据库。数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。
目前,大部分数据仓库还是用关系数据库管理系统来管理的。可以说,数据库、数据仓库相辅相成、各有千秋。