1.4数据完整性
数据的完整性是指数据的正确性。有效性和一致性。在数据库管理系统中提供了定义数据完整性约束条件的机制,能够检查数据是否满足完整性的约束条件,从而防止数据库中存在不合理的数据,防止由于错误输入和输出造成错误的结果。
关系模型中完整性约束条件主要包括实体完整性和参照完整性,所谓的实体完整性是指构成关系主键的属性或属性的集合不能为空。在关系模型中,系统要求不能有两个完全相同的元组,各元组的惟一性是通过关键字来保证的。如果主键为空,就无法保证关系中不出现相同的元组。
参照完整性用于约束多个表之间的数据一致性。它是一个规则系统,使用此规则系统来确保相关表中记录关系间的有效性,并且不会意外地删除或修改数据库中相关联的数据。当设置参照完整性后,就不能在相关表的外部关键字中输入不存在于主表主键中的值。如果相关表中存在匹配的记录,也不能从主表中删除这个记录。如果主表中的一个记录有相关的记录,则不能在主表中更改主键值。
如果为学生和成绩两个表建立一对多关系,并且实施了参照完整性,那么在成绩表中就不能输入一个学生表中不存在的学号,如输入9801003。在学生表中不能将学号是9801001的记录删除,因为它在成绩表中有相关的记录。
在Access 2010中以northwind.accdb为例,建立orders和order details一对多关系,并且选择实施参照完整性,如图1-5所示。
如果选中“级联更新相关字段”复选框,在orders表中将order ID 10248改为11248,那么order details表中orderid为10248的所有记录都会变成11248;如果选中“级联删除相关记录”,在主表orders表中.删除orderid是10248的记录.在orderdetails表中所有orderid是10248的记录将会全部删除。
在SQL Server 2008中,建立关系图后也可进行同样的设置。图1-6为进销存数据库中 tb_ruku_main和tb_ruku_main_details间的关系的属性。
对于SQL Server 2008数据管理系统,既可通过SQL ServerManagement Studio建立关系,也可以VB.NET中通过服务器资源管理器建立关系。
图1-5
表1-6
1.5 当前流行的关系数据库系统简介
1.5.1 常见的桌面数据库产品
桌面数据库一般运行在PC机上,具有对硬件要求低、容易操作、开发成本低等特点,往往应用于办公室的MIS系统,受到个人用户的欢迎:常见的桌面数据库产品有Borland公司的dBASE和Paradox、Microsoft公司的FoxBASE/FoxPro、Visual FoxPro和Access,IBM的子公司Lotus公司的Approach等。
1. dBASE
dBASE是Ashtom-Tate公司(后来被Borland公司收购)开发的,其较早的dBASEII就可以处理关系数据库。其后的dBASEⅢ获得了巨大成功,并在相当长的一段时间内成为主导型的数据库管理程序,它使用交互式命令来进行数据库的创建、编辑、修改表和报表,并包括一种容易学习的程序设计语言,用来建立应用程序、由于dBASE后续版本dBASEV和dBASEfor Windows的失败,FoxPro成为dBASE兼容语言中非常重要的数据库管理和开发语言。2. FoxPro
FoxPro是Microsoft公司开发的一种与dBASE兼容的语言,它不仅对dBASE语言做了大量的扩展,而且提供了更快的数据检索速度,其用户界面和轻松的程序设计方法获得了广大用户的赞扬。尤其是FoxPro 2.5版本获得了巨大的成功。最近两年来,Microsoft公司推出了可视化编程的Visual FoxPro 3.0/5.0/6.0/7.0/8.0,它提供了可视化创建数据库对象的方法和灵活方便的向导程序(wizards),使建立表、查询、报表和其他数据库对象变得非常容易。在操作变得更加简单的同时,Visual FoxPro为开发人员提供了更高级的功能,如面向对象编程的能力,开发C/S程序的能力等。
3. Access
Access是Microsoft公司另一个成功的数据库产品,是Office套装中的软件之一,其核心是Microsoft Jet数据库引擎。早期产品Access 2在办公自动化中获得了广泛的应用,后续版本的功能得到不断提高,其最新版本是Access 2002,它与MicrosoftOffice套件紧密结合,使之得到越来越广泛的应用,Access本身是一个可视化的数据库管理系统,提供了很多非常实用的向导,初学者也很容易学会如何用Access建立数据库的各种对象,包括表、查询、窗体、报表、数据库访问页、宏、模块等。Access使用内嵌VBA(Visual Basic Application)语言作为开发工具,具有完全面向对象编程的能力,可以可视化地创建数据库应用程序。Access的数据库和传统的桌面数据库几乎没有什么不同,但它支持网络环境的应用,如管理用户组和安全性等,所以是一种特殊的桌面数据库管理系统,很多人将其列入客户服务器前端管理系统的范畴。
4. Paradox
Paradox是Borland公司的产品,在应用时输入数据、建立查询、建立报表均比较繁琐而不易成功.所以作为数据库管理系统,Paradox并没有获得很多的应用;但在其开发的早期,Paradox也曾获得过成功,尤其是在利用Borland公司的程序设计语言时。
5. Approach
Approach是Lotus公司(后被IBM收购)的产品,同Lotus公司的办公自动化套件紧密结合,其最大的特点就是操作简单,建立表、查询功能和做报表容易,而且可以随意地创建用户自定义控件,以利于程序的再利用。Approach也是成功的数据库管理系统之一。
1.5.2 常见的大型关系数据库产品
大型数据库产品运行在由工作站、数据库服务器和PC机工作站组成的网络上,系统采用客户/服务器结构,具有复杂的数据安全性、完整性和故障恢复能力,整体性能高,能满足大量的数据存储和处理要求,广泛应用于企业。部门和集团用户。组建大型数据库系统的价格往往很高。随着计算机技术的发展,各数据库产品开发商也推出了微机版的数据库产品.以满足降低成本的要求。常见的大型数据库产品有Oracle、Sybase、Informix,Microsoft SQL Server和IBM DB2等。
1.Oracle
Oracle是一种适用于大型、中型和微型计算机的关系数据库管理系统。它使用SQL(StructuredQuery Language)作为数据库语言。1987年SQL被ISO定为国际标准。Oracle是最为成功的大型数据库产品之一,在处理大型数据库时受到广泛的应用,占领了大型数据库很大的市场份额。Oracle公司是全球最大的信息管理软件商,其数据库系统和服务遍及全世界近百个国家和地区.包括服务器技术、应用程序开发工具等数十个产品。它提供了能够集成不同的计算机、不同操作系统、不同的网络和数据库管理系统等资源的分布式的开放数据库管理系统。
Oracle自动建立并更新一组表,这些表中记录用户的姓名、描述表和视图以及有关用户权限等信息。数据字典是只读的,只允许查询,也就是说数据字典是一种数据库资源 每个用户都可以访问数据字典。DBA(数据库管理员]可通过数据字典来监视资源,每个用户都可以访问数据字典。DBA(数据库管理员)可通过数据字典来监视Oracle RDBMS的使用 并帮助用户完成其应用。Oracle关系型数据库管理系统(RDBMS)本身也要利用数据库字典来管理和控制整个数据库。
Oracle主要使用DeveP/2000和Designer/2000作为主要的应用程序开发工具可以很方便地建立起功能强大的应用程序。0racle公司还提供了0racle Workgroup/2000和Oracle Personal/2000等产品 以满足中小规模企业的应用。
2.Sybase
Sybase是世界第二大数据库产品厂商。Sybase产品吸收了许多现有关系数据库的成熟技术 实现了真正的开放互动及分布式数据管理 能很好地满足联机事务处理的应用需求 是成功的大型数据库产品之一。Sybase包括Sybase SQL Server等多个产品。并以Powersoft公司(后被Sybase公司收购)的PowerBuilder为应用程序开发工具,开发效率非常高,Sybase在我国政府机构和电信业中拥有大量的用户。
Sybase数据库管理系统按权限由高到低可将用户分为4种不同的类型 分别为系统管理员、数据库属主、数据库对象属主和其他一般用户。当第一次安装Sybase SQL Server时,会自动建立系统管理员账户。系统管理员具有整个系统的最高权力。同时被赋子系统管理角色、系统安全员角色和操作员角色。有权执行所有SQL命令 也是系统数据库Master的属主,可访问所有数据库和数据库对象。
3. DB2
DB2是IBM公司开发的关系数据库管理系统,它有多种不同的版本 如DB2工作组版(DB2 Workgroup Edition)、DB2企业版(DB2 Enterprise Edition)、DB2个人版(IDB2 Persional Edition )和DB2企业扩展版(DB2 EnterPrise Extended Edition)等。这些产品基本的数据管理功能是一样的 区别在于支持远程客户的能力和分布式处理的能力。
个人版适用于单机使用,即服务器只能由本地应用程序访问。工作组版和企业版提供了本地和远程客户访问DB2的功能(当然远程客户要安装相应客户应用程序开发部件)。企业版除包括工作组版中的所有部件外增加了对主机链接的支持。企业扩展版允许将一个大的数据库分布到同一类型的多个不同计算机上 这种分布式功能尤其适合于大型数据库的处理。
DB2可运行在OS/2、Windows NT、UNIX操作系统上,通常将运行在这些平台上的DB2产品统称为DB2通用数据库,这主要是强调这些产品运行环境类似并共享相同的源代码。DB2通用数据库的主要组件包括数据库引擎(Database Engine)、应用程序接口和一组工具。数据库引擎提供了关系数据库管理系统的基本功能 如管理数据、控制数据访问(包括并发控制)、保证数据完整性及数据安全。所有数据访问都通过SQL接口进行。
4. SQL Server
Microsoft SQL Server用于企业的解决方案。Microsoft SQL Server是为Windows NT设计的,并成为Microsoft BackOffice产品的重要组成部分。它具有Windows NT的许多优点,并且将安全性与Windows NT的安全性紧密地结合在一起,可以使用Windows NT的用户和组来控制数据库的访问权限。Microsoft SQL Server使用方便,组建系统和购买MicrosoftSQL Server的价格相对便宜,在市场上有非常强的竞争力。
5. Informix
Informix是在全球首家推出的应用于UNIX系统的关系数据库产品的厂商,后来又推出了其他开放式平台上的关系数据软件。Informix由数据库服务器、连接产品、最终用户信息访问工具和应用程序开发工具共4类将近30个产品组成。占据大型数据市场尤其是UNIX数据库市场很大的份额。是中国信息产业最大的软件合作伙伴之一,在我国金融、电信和政府机构中拥有广泛的用户。
1.6 NorthWind数据库
NorthWind数据库是一个关于进货、出货贸易的数据库。在此数据库中,包含了客户信息、产品信息、订单信息及公司雇员等信息。本书中大部分的示例以SQL Server中的northwind作为访问的数据库,部分示例以access中的northwind.mdb作为访问的数据库。此数据库共有8张数据表。为了阅读方便,表1-5至表1-12列出数据中表的字段名及数据类型。
表1-5
表1-6
表1-7
表1-8
表1-9
表1-10
表1-11
表1-12
表之间的关系
1.7 系统软件对数据库的访问
利用掌握的数据库基础知识,建立好数据库后,下一个工作就是利用各种系统开发软件,开发数据库应用程序了。数据库一般放在后台,后台的数据库可以使用各种数据库管理系统来建立。前边已经介绍过,目前比较流行的数据库管理系统有Oracle、DB2.Informix;SQL Server等。 前台使用某些系统工具开发,比较流行的数据库开发软件有PowerBuilder、Delphi、VB、VB.NET、VC++等;那么这些应用软件是如何将数据库中的数据取出来,并显示在窗体上或Web页上,再维护数据库(包括数据输入、删除、修改)的内容呢?
完成此任务.需要经过5个步骤,图1—7所示
(1)连接到数据库;
(2)下达查询数据的命令
(3)从数据源取出数据;
(4);将取出的数据显示在窗体上
(5)在窗体上修改数据,将变动后的数据写回数据源
完成这些步骤?需要掌握哪些技术呢?对数据库中的数据进行处理(包括查询、插入、删除、修改)需要了解SQL(StructuredQuery Language)语言。连接引数据库、下达命令、写回数据库等,必须掌握数据库模型.如DAO、RDO、ADO、ADO.NET等对象的使用方法.
图1-7中的数据源包括SQL Server数据库;Access及其他各种数据库。作为数据源的用户,一般不直接编写访问数据库的程序。而是通过一个中间层的数据提供程序去访问数据库。因为要访问的数据库多种多样,程序设计员除了要明白该数据源的基本原理外,还必须深入了解每种数据库的应用程序接口以及底层处理的细节。这个中间层的数据服务程序有许多软件商提供。如微软的ADO、ADO.NET,它起到沟通数据用户和数据源的桥梁作用。数据提供程序一般都要实现“连接数据源”、 “下达命令”和“获取数据源数据”的功能。
ADO.NET对象模型实现了“数据提供程序”所需要3项功能。
1/连接数据源
在ADO.NET中通过Connection对象(分为SqlConnection和OleDbConnection)实现了和数据源的连接。
2/下达命令
ADO.NET提供了两种对象,即Command和DataAdapter。Command(分SqlCommand和OleDbCommand)提供一般的命令执行,如Select、Insert、Update,Delete等命令或者是存储过程,或者是获取DataReader、
DataAdapter(分SqlDataAdapter和OleDbDataAdapter)既能执行命令,更重要的是能将从数据源取得的数据填入到DataSet中,将断开连接的DataSet数据在用户修改后写回到数据源。
3/获取数据源数据
获取数据源数据通过DataReader和DataSet完成,其中DataReader(分SqiDataReader和OleDbDataReader)仅从数据库以向前只读方式读取数据。
DataSet是一种脱机式客户端内存中的数据库,它包括有多个关联的DataTable,并在每个DataTable中又包含有DataRow、DataColumn。