基于ClientServer数据完整性约束的实现技术_第1页
基于ClientServer数据完整性约束的实现技术_第2页
基于ClientServer数据完整性约束的实现技术_第3页
基于ClientServer数据完整性约束的实现技术_第4页
基于ClientServer数据完整性约束的实现技术_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于基于 Client Server 数据完整性约束的实现技术数据完整性约束的实现技术 摘 要 本论文主要讨论基于 Client Server 数据完整性约束及其如何实施企业业务规则 并以 SQLServer 和 PowerBuilder 为例 介绍了数据完整性约束的实现技术 关键词 Client Server 数据完整性约束 企业业务规则 DBMS 已从早期的分散的一个个计算模型 网络 文件服务计算模型 针对文件 发展到现在的 Client Server 计算模型 针对表中的一行 Client Server 模型是非对等的 decoupled 客户发出服务请求 服务器作出响应 提供服务 即所谓的 请求驱动 DB 的 Client Server 系统由 DBServer 客户应用程序 和网络组成 DBServer 即后端 负责有效地管理系统的资源 主要负责数据处理 并发控制 数据安全性 数据完整性和数据的备份和恢复等 客户应用程序 即前端 是系统中供用户与数据进行交互的部件 主要 任务是提供交互式界面完成数据的录入 分析 检查和显示 向 DBServer 发出请求 SQL 语句 并接收结 果和错误信息 网络和通信软件是系统中客户和服务器之间数据传送的工具 由于现在的数据库都是开放 多用户共享 因此维护数据库的正确性至关重要 数据库的完整性描述 为数据库内容的完整性约束集合 其中完整性约束指数据库的一个状态是否合理 这是一组谓词 DBS 检 查数据的状态和状态转换 判定它们是否合理 是否应予接受 对一个数据库操作 要判定其是否符合完 整性约束 全部断言无矛盾时才可以执行 完整性约束的形式化定义 I O P A R 其中 O 是完整性约束 所涉及的数据对象集合 P 是对象所满足的谓词 A 是触发检查的条件 R 是约束不满足时的反应动作 2 一 常见的数据完整性约束 根据分类角度不同 可将完整性约束分为如下几类 域 元组 集合完整性 立即约束和推迟 到 EOT 约束 状态约束和状态演变约束 标准和定制的数据完整性约束 实际的系统中 一般将数据完整性约束分为标准的数据完整性约束和定制的数据完整性约束 标准的 数据完整性约束是 DBS 已经实现的内部规则 包括域完整性 实体完整性和引用完整性 域完整性 Field Integrity 保证一个数据库不包含无意义的或不合理的值 即保证表的某一列的任 何值是该列域 即合法的数据集合 的成员 方法是限制列的数据类型 精度 范围 格式和长度等 实体完整性 Entity Integrity 保证一个表中的每一行必须是唯一的 元组的唯一性 为保证实体完整性 需指定一个表中的一列或一组列作为它的主键 Primary Key 一个表中每行的主键必须确实含有一个值 一个表只能含有一个主键 如需要从其它列中除去重复的值 可以将一个或一组非主键列指定为一个候选 键或唯一值键 引用完整性 Reference Integrity 定义了一个关系数据库中不同的列和不同的表之间的关系 主键与外键 要求一列或一组列中的值必须要与相关的一列或一组列中的值相匹配 从属的一列或一组列称之为外键 Foreign Key 被引用的列或一组列称之为父键 父键必须是一个主键或唯一键 外键属于子表或明细 表 父键属于父表或主表 若父键和外键属于同一表 则称之为自引用完整性 子表某行的外键必须与主 表的主键相匹配 只要依赖于某主键的外键仍存在 主表中包含该主键的行就不能删除 由于每个公司的数据库都有自己独特的业务规则集 所以系统必须有一种方式来实现定制的业务规则 即定制的数据完整性约束 定制的数据完整性约束可由如下几种方法实施 一种最原始的方法是将将每一个完整性约束编入要访问数据库的每个应用程序中 缺点是在每个相关的数 据库应用程序中 开发者都要对相同的完整性规则进行编码 测试和排错 若某一规则变动 所有相关的 应用程序都得改动 应用程序须向 DBServer 请求大量的数据 以执行该应用程序内部的数据完整性规则 检查 这将阻塞网络 因而这是一种耗时 低性能的方法 用户定义的数据类型 User defined DataType 是由标准数据类型导出的新数据类型 它比标准的数据类 型更准确地限定了数据输入的范围 约束 Check 用于限制列的值域 在数据类型限制的基础上对输入的数据进一步进行限制 通过逻辑表达 式来定义列的有效值 缺省 Default 定义了一个数值 当用户向数据表插入数据时 若某个域未给定值 系统自动将定义在该 域上的缺省作为输入值 保证数据库数据的合理性 规则 Rule 是一个用来绑定域或用户定义数据类型的数据库对象 规则说明了哪些数据可以输入到域中 任何时刻 用户输入或修改数据 INSERT 或 UPDATE DBMS 都将检查该数据是否违反绑定在域上的规 则 存储过程 Stored Procedure 是由编译过的 SQL 语句 控制流语句 变量说明和赋值运算等组成的集合 由开发者创建并存储在数据字典 大部分 DBMS 叫系统表 中 我们可以通过存储过程中的语句来定义企业 业务规则 特别对于复杂的表与表之间的饿关系 用存储过程来实现将变得相当容易 触发器 Trigger 也是一个存储过程 该过程在插入 修改和删除等操作事前或事后由 DBS 自动激发 执行 经常用于实现逻辑上相关的数据表之间的数据完整性和一致性 触发器非常适合于实施企业规则 如果某 个输入违反了其中的某个企业规则 触发器可以显示相应错误并中止正在执行的数据库动作 二 Client Server 模型下实施企业规则的准则 在 Client Server 系统中 前端和后端都提供数据完整性约束 在前端可进行域完整性约束 并能定 制业务规则 在后端几乎可以实现上述所列的所有的完整性约束 E F Codd 在衡量关系数据库的十二条 准则之第十条指出关系完整性约束条件必须用数据子语言定义并存储在数据字典中 而不是在应用程序中 这样 当完整性约束改变时 只要修改数据字典即可 完整性的改变一般不会在逻辑上影响应用程序的活 动 前端应用程序也可以进行某些完整性检查并实施企业规则 但是这些做法不能用于取代在数据库里的完整 性约束定义 如果数据库设计者完全正确地说明了所有的约束和企业规则 则任何违反约束和规则的数据 操作都会引起数据库错误 前端应用程序的任务是尽量减少产生数据库错误的可能性 只有从这个意义上 说 前端应用程序才应当包含完整性检查和实施事务规则 当数据库没有完整性约束时 前端应用程序必 须实施企业规则 由此我们得出在实施企业规则时须遵循如下准则 集中在数据库中实施企业规则 减少对数据库请求的次数 尽量减少返回结果 我们在实施企业规则时 应将所有的企业规则定义在数据字典中 应用程序在向数据库提交 SQL 语句之前 尽量减少由用户引起数据库错误的可能性 使应用程序运行顺畅 对用户友好 开销少 三 PowerBuilder SQLServer 数据完整性约束的实现技术 PowerBuilder 是当今非常流行的前端开发工具 它提供了丰富的构件 能很方便地开发出界面友好 功能强大的应用程序 下面以功能强大的数据窗口为例 说明前端开发工具如何实现数据完整性约束 PowerBuilder 的其它构件也提供类似实现完整性约束的方法 利用列的编辑风格 Edit Style 限制列的长度 格式 值域等 PowerBuilder 提供无线按钮 Radio Button 检查框 Check Box 下拉式数据窗口 DropDown DataWindow 下拉式列表框 DropDown List 编辑屏蔽 Edit Mask 和编辑 Edit 等编辑风格来检查列的数据类型 利用列的有效性验证规则 Validation Rule 对输入数据进行限制 在 Validation Rule 对话框内 可 输入规则定义 Rule Definition 和有效性规则出错信息 Validation Error Message 可在 ItemChanged 事件的 Script 程序里对输入数据进行进一步的有效性验证 若输入数据不能通过在 ItemChanged 事件里所设置的检查 则返回动作码 1 拒绝输入数据 当应用程序调用函数 Update 更新数据库之前 触发 UpdateStart 事件 该事件是用于进行数据有效 性验证的最后一次机会 若输入数据的有效性验证失败 则返回动作码 1 拒绝数据更新 针对那些数据库要求必须具备值的列 即那些具有 NOT NULL 约束的列 可将对应的数据窗口的列置为 必备域 Required Field 但是必备域的约束对用户来说并不友好 用户必须输入一个值 否则无法离开 该列 一种替代的办法是在 UpdateStart 事件里检查列 在数据库中为 NOT NULL 列 的值是否为 NULL 利用自定义有效性验证函数进行常规的数据检查 有助于应用程序的标准化和简化 这些函数可以用在 列的有效性验证规则 也可以用在 Itemchanged 事件的 Script 程序中 一般自定义有效性验证函数被设 计成全局函数 返回布尔型结果 在数据窗口的字段中输入数据 离开该字段 系统调用 AcceptText 函数 用户调用 AcceptText 函数 执行字段的数据类型检查 合法 使用字段的有效性验证规则 激发 ItemError 事件 合法 执行 ItemChanged 事件 可设置有效性验证 0 数据窗口接受该值 用户调用 Update 函数 执行 UpdateStart 事件 不更新数据库 0 更新数据库 图一 PowerBuilder 数据有效性验证的过程 值得注意的是有效性验证规则对数据窗口类的所有实例都通用 而在 Itemchanged 事件的 Script 程序里 进行有效性验证与具体的数据窗口密切相关 有些有效性验证需进行数据库查询 若需要很高的系统代价 尽量避免使用 SQLServer 是一个多用户的 RDBMS 它为复杂环境下有效地实现企业管理提供了一个强有力的 Client Server 平台 是一种较理想的后端数据库服务器之一 微软和 SYBASE 公司都支持 SQLServer 产 品 下面只以一个例子来说明在 SQLServer 中如何实现数据的域 实体 引用完整性约束 有关于如何用 存储过程 触发器 规则和用户定义数据类型等实现数据完整性约束可参见有关资料 CREATE TABLE pageruser stationid SMALLINT NOT NULL userid INT NOT NULL frequentid SMALLINT NOT NULL machinecode INT NOT NULL name CHAR 10 sex CHAR 1 pagertypeid SMALLINT NOT NULL PRIMARY KEY stationid userid UNIQUE frequentid machinecode FOREIGN KEY pagertypeid REFERENCES pagertype CHECK sex in F M CREATE TABLE pagertype id SMALLINT typename CHAR 10 note CHAR 30 PRIMARY KEY id 以上定义了一个寻呼台 DB 的用户档案表 pageruser

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论