oppo手机为什么那么贵oppo的手机价格贵

SQL应用与开发:(八)数据完整性
时间: 09:54:48
&&&& 阅读:199
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&一.定义
数据完整性是指存储在数据库中的所有数据值均正确的状态下。如果数据库中存储有不正确的数据值,则称该数据库已丧失数据完整性。
SQL数据库不只是存储数据,它必须保证所存储的数据是正确的。如果数据不准确或者不一致,那么该数据的完整性就会受到破坏,从而给数据库本身的可靠性带来问题。为了保证数据库的完整性,SQL提供了大量的完整性约束。完整性约束是应用于基表的规则基表用于约束可以放在这些表中的值。约束也可以应用于单个列、单个表或多个表。
二.学习内容
1.了解约束
约束是指关系数据库中的对象,用于存放关于插入到一个表某一列的数据的规则。约束是用来保证关系数据库中数据的准确性和一致性。在关系数据库中,通过在表上应用约束来处理数据库完整性。
SQL中的约束可分为3中类型:
与表相关的约束 &它是在表定义的一种约束。该约束可以被定义为列定义的一个部分,或者定义为表定义中的一个元素。在表级别定义的约束可以应用于一个或多个列。
断言&在断言定义中定义的一种约束。断言可以与一个或多个表进行关联。
域约束&在域定义中定义的一种约束。域约束与在特定域中定义的任何列有关。
在这三种约束中,最通用的约束是与表相关的约束,该约束包含的约束选项数量最多。与表相关的约束可以分成两个子类别,即表约束和列约束。这两个子类别中的约束都是在表定义中定义的。列定义包含了列约束,表元素也包含了表约束。列约束和表约束都支持大量不同类型的约束,但是断言约合苏和域约束只限于一种类型的约束。
下面这幅图概括描述了可以创建的约束类型:
2.使用NOT NULL约束
空可以被看作是一个标识符(标识符是一个表示有关列的某种事实的字符、数字或位)。在空值情况下,如果没有为列提供值,那么标识符就被设置,表示值是未知的。每个列都有一个表示该列是否接受空值的nullability属性。在默认情况下,所有列都接受空值。但是,通过使用一个标明列将不接受空值的NOT NULL约束,可以重写。
最初创建时,必须为表中的每一列指定一个数据类型。通过某一列的数据类型来确定能够输入到表中列中的数据。当一列被创建时,可以将其定义为NOT NULL约束。插入一行数据到表中时,如果没有给一列输入值,那么该列便是NULL。如果指定一列为NOT NULL,则意味着不允许在该列中输入空值。
其创建语法:
&column_name& { &data_type& | &domain&} NOT NULL
举例来说,创建一个含有NOT NULL约束列的表,我们创建一个名为“业务员信息”的表,该表包含列“业务员编号”、“业务员姓名”、“家庭住址”和“电话”。创建表成功后,在向该表中添加数据时,你、不允许列“业务员编号”和“业务员姓名”为空。
CREATE TABLE 业务员信息
(业务员编号 INTEGER NOT NULL,
业务员姓名 VARCHAR(50) NOT NULL,
家庭住址 VARCHAR(50),
电话 VARCHAR(12)
3.唯一约束
在SQL 完整性约束类型中,列约束和表约束都支持唯一约束。而在SQL中具有两种类型的唯一的约束,即UNIQUE约束和PRIMARY KEY约束。
3.1.1UNIQUE约束
UNIQUE约束可以使用在列集内强制执行值得唯一性。对于UNIQUE约束中的列,表中不允许有两行包含相同的非空值。主键也强制执行唯一性,但主键不允许为空值,而且每个表中主键也只能有一个,但是在UNIQUE约束中却可以拥有多个。
若违背UNIQUE约束,系统会弹出违反约束的信息。
3.1.2PRIMARY KEY约束
PRIMARY KEY约束和UNIQUE约束一样,也是一种SQL唯一约束。这两种约束只允许指定列中的唯一值,二者都可以应用于一列或多列,并且也都定义为列约束和表约束。
PRIMARY KEY约束标识列或列集,这些列或列集的值唯一标识表中的行。一个PRIMARY KEY约束可以:
1.作为表定义的一部分在创建时创建;2.添加到尚没有PRIMARY KEY约束的表中;3.如果已有PRIMARY KEY约束,则可以对其进行修改和删除。
但是,由于主键在表中所起的作用,PRIMARY KEY约束有两个限制:
1.利用PRIMARY KEY约束定义的列不能包含空值,即使没有在该列上指定NOT NULL,该列仍然必须包含一个数据值;2.对应每一列只能定义一个PRIMARY KEY约束。
4.使用FROEIGN KEY约束
FROEIGN KEY(外键)约束主要用来维护两个表之间的一致性关系。外键的建立主要是通过加将一个表中的主键所在的列包含到另一个表中,这些列就是另一个表的外键。所以,外键是关系数据库中国增强表之间参照完整性的主要机制,定义为外键的列用来参照另一个表中定义为主键的列。也就是说,外键是依赖于另一个表中某列的一列数据,它确保了两个表中都存在相应的数据。
当创建FROEIGN KEY约束时,必须遵循以下原则:
被引用列必须是被引用表中的候选键(通常为主键);
FROEIGN KEY约束可以被创建为表约束或列约束。如果把外键创建为表约束,那么可以包括一列或多列;
引用表中的外键包括的列数必须和被引用的列数相同,并且每个引用列使用的数据类型必须与对应的被引用列相。但是引用列名称不必与被引用列的名称相同;
如果在定义FROEIGN KEY约束时没有指定被引用列,那么在被引用表的主键中定义的列默认为被引用列。
举例来说,在表中指定FROEIGN KEY约束对两个表进行关联:
创建两个表,其中名为“操作人员信息”的表包含列“操作人员编号”、“操作人员姓名”和“联系电话”,并将列“操作人员编号”指定为PRIMARY KEY约束;另一名为“入库信息”的表包含列“入库编号”、“入库日期”和“操作人员编号”,将列“入库编号”指定为PRIMARY KEY约束,并通过列“操作人员编号”与“操作人员信息”表进行关联,即指定列“操作人员编号”为ROREIGN KEY约束。
首先创建“操作人员信息”表,其语句如下:
CREATE TABLE 操作人员信息
(操作人员编号 INTEGER PRIMARY KEY,
操作人员姓名 VARCHAR(50),
联系电话 VARCHAR(12)
然后根据上述要求创建“入库信息”表,其语句如下:
CREATE TABLE 入库信息
(入库编号 INTEGER PRIMARY KEY,
入库日期 SMALLDATETIME,
操作人员编号 INTEGER,
CONSTRAINT FK_操作人员编号
FOREIGN KEY(操作人员编号)
REFERENCES 操作人员信息(操作人员编号)
5.CHECK约束
&在完整性约束图中我们可以看出,CHECK约束可以被定义为表约束、列约束、域约束,或者被定义在断言中。CHECK约束允许指定可以包括在列中的值。例如,可以定义值得范围,列举值的列表,或者一些其他准确限制列中许可值的条件。
5.1在表约束和列约束中定义CHECK约束
创建列约束的语法规则:&column_name& {&data_type& | &domain&} CHECK {&search_condition&}
创建表约束的语法规则:[CONSTRAINT&&column_name&] CHECK {&search_condition&}
其中,&search_condition&与SELECT语句中的查询条件相似,而这里是在创建表的过程中就为列指定了取值范围。
举例来说,创建一个“销售人员信息”表,该表中包含“编号”、“姓名”、“参加工作时间”和“联系电话”,并且要求在向表中添加数据时,列“参加工作时间”应介于日到日之间。
下面就两个约束分别创建,以作比较:
将CHECK约束作为列约束在创建表的语句中定义:
CREATE TABLE销售人员信息
(编号 INTEGER NOT NULL,
姓名 VARCHAR(50),
参加工作时间 SMALLDATETIME NOT NULL,
CONSTRAINT CK_ 参加工作时间
(参加工作时间 BETWEEN ‘‘ AND ‘‘)
将CHECK约束作为表约束在创建表的语句中定义:
CREATE TABLE销售人员信息
(编号 INTEGER NOT NULL,
姓名 VARCHAR(50),
参加工作时间 SMALLDATETIME NOT NULL
(参加工作时间 BETWEEN ‘‘ AND ‘‘)
5.2定义断言
断言仅仅是一种可以应用于多个表的CHECK约束,因此必须在表定义之外独立地创建断言。创建断言时使用下列语法:
CREATE ASSERTION &constraint_name& CHECK &search_condition&
创建断言和穿件表CHECK约束非常相似,但在CHECK关键字后必须提供必要的限定条件,并且断言的条件必须一直为真。
举例来说,重新创建表“销售信息”,包含的列仍未“商品编号”、“商品名称”、“销售价格”和“销售日期”,则其创建语句如下:
CREATE TABLE 销售信息
(商品编号 INTEGER PRIMARY KEY,
商品名称 VARCHAR(50) UNIQUE,
销售价格 MONEY NOT NULL,
销售日期 SMALLDATETIME NOT NULL
上述语句中并没有指定CHECK约束。如果对该表中的列“销售价格”中的数据进行总和,并且希望其总和大于10000,则可以创建一个断言把“销售价格”中的数据加起来,并验证总和是否大于10000。
CREATE ASSERTION AS_销售价格
((SELECT SUM(销售价格) FROM 销售信息) & 10000)
在该语句中使用了一个子查询(SELECT SUM(销售价格) FROM 销售信息),并且将这个子查询的结果与10000进行比较。如果在“销售价格”列中添加的数据的总和小雨10000,那么系统将弹出一个出错消息。
5.3创建域和域约束
还有一种约束CHECK约束是插入域定义中的域约束。除了不用连接域约束和特定的列约束或表以外,域约束的定义与其他约合苏的定义相似。而当需要表示某个定义列的中的值时,域约束使用关键字VALUE。创建域的语法如下所示:
CREATE DOMAIN &domain_name& [AS] &data_type&&
[DEFAULT &default_value&] &&& & & & & & & & & & & & & & & & & & & & & & & & & & & & &
[CONSTRAINT &constrain_name &] CHECK (&search_condition&)
举例来说,在5.1的例子中的“销售信息”表创建之后,引用列“销售日期”创建一个机遇SMALLDATETIME数据类型的域,并且要求所有的值都必须在日到日之间。
CREATE DOMAIN 销售日期 AS SMALLDATETIME
CONSTRAINT CK_销售日期
(VALUE BETWEEN ‘‘ AND ‘‘)
在上述的语句中添加VALUE关键字,它表示由“销售信息”域定义的列中的值。因此,要插入的值必须在“”和“”。
6.使用规则
规则限制了可以存在表中或用户定义数据类型的值。,它可以使用多种方式来完成对数据值的检验,可以使用函数返回验证信息,也可以使用关键字BETWEEN、LIKE和IN完成度输入数据的检查。
规则是数据库对象之一,它的作用与CHECK约束的部分功能相同,在向表的某列插入或更新数据时,用它来限制输入的新值的取值范围。规则与CHECK约束不同之处在于:
CHECK约束是用CREATE TABLE语句在建表时指定的,而规则需要作为单独的数据库对象来实现;
在一列上只能使用一个规则,但可以使用多个CHECK约束;
规则可以应用于多个示例,还可以应用于用户自定义的数据类型,而CHECK约合苏只能应用于它定义的列。
规则是实现域完整性的方法之一,它用来验证一个数据库中的数据是否处于一个指定的值域范围内。当数据库中的数据被插入或更新时,需要检查这个新值是否遵循规则,如果违反了规则,那么这一操作将会失败。
6.1创建规则
创建规则使用CREATE RULE语句,其格式如下:
CREATE RULE &rule_name&
&condition_expression&
其中,&rule_name&表示创建的规则名称,&condition_expression&表示定义规则的条件。规则可以是WHERE自己中任何有效地表达式,并且可以包括算术运算符、关系运算符以及IN、LIKE、BETWEEN等关键字。
举例来说,在数据库“销售管理系统”中创建一个名为“城市_rule”的规则,限定输入的值必须是“北京市”、“上海市”、“广州市”、“南京市”、“深圳市”之一。
CREATE RULE 城市_rule
@供应商所在城市 IN (‘北京市‘,‘上海市‘,‘广州市‘,‘南京市‘,‘深圳市‘)
6.2绑定规则
要使用规则,必须首先将其和列或者用户定义数据定义类型绑定。可以使用sp_bindrule存储过程对规则进行绑定。sp_bindrule存储过程的语法格式如下:
sp_bindrule [ @rulename=] &rule_name&,
[ @objname= ] &object_name&
[ ,@futureonly= ] &futureonly_flag&
其中,[ objname= ] &object_name&表示绑定了规则的表和列或用户定义的数据类型,[ @futureonly= ] &futureonly_flag&只有将规则绑定到用户定义的数据类型时才使用。
举例来说,将上一例子中创建的规则“城市_rule”绑定到“供应商信息”表的“供应商所在城市”列上。
sp_bindrule 城市_rule,‘供应商信息.供应商所在城市‘
6.3删除规则
对于不再需要的规则,可以使用DROP RULE语句删除。要删除规则首先要解除对改队则的绑定,解除规则的绑定可以使用sp_unbindrule存储过程,其语法格式如下:
sp_unbindrule [ @objectname= ] &object_name&
[ ,@futureonly= ] &futureonly_flag&]
举例来说,要删除规则“城市_rule”,那么首先要将该绑定从“供应商信息”表的列“供应商所在城市”上解除,可以使用下述语句解除绑定。
sp_unbindrule ‘供应商信息.供应商所在城市‘
在解除绑定之后,就可以使用下述DROP RULE语句将该规则删除。
DROP RULE 城市_rule
也可以在企业管理器中将规则删除,但是在删除规则之前必须确定该规则不存在任何的绑定,即要删除规则,必须先解除规则上的绑定。
三.学习小结
关于数据库的完整性的整理,到这里也算是完结了,而相对于其它章节的整理中,本章节尤为简单,个人的理解。都是一些简单的SQL语句的练习,在先前的学习中,对于早已熟悉SQL语句的我们,这一章也尤为重要,无规则不成方圆。
对于自己的整理,也由于在数据库中练习,相得益彰。多去实践,才能提升对这规则的更好理解。
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://blog.csdn.net/wsl211511/article/details/
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!sql中表达完整性约束的机制主要有哪几种?
sql中表达完整性约束的机制主要有哪几种?
实体完整性 参照完整性 用户定义完整性 删除约束
&实体完整性:
又称行完整性,
要求在表中不能存在完全相同的行,
而且每行都要具有一个非空且又不重复的主键值。
&参照完整性:
又称引用完整性,
指表间的规则,作用于有关联的两个或两个以上的表,
通过使用主键和外键(或唯一键)之间的关系,
使表中的键值在相关表中保持一致。
&用户自定义完整性:
指针对某一具体关系的约束条件,
它反映某一具体应用所涉及的数据必须满足的语义要求。
sql约束性分为实体完整性,参照完整性,用户定义完整性,删除约束
实体完整性:可用主键子句或主键短语来定义。
1.建表时定义主键
Create table 表名
Sno int identity(1,1),
Sname nvarchar(20),
--设置主键
Primary key (Sno)
2.添加主键
alter table 表名
add constraint PK_表名_Sno
primary key(id)
参照完整性:可用外键子句来定义
1.建表时定义外键
create table 表名
sno int identity(1,1) primary key,
cno int not null,
foreign key(cno) References
表名2(Cno)
on Delete cascade --级联删除
on update cascade --级联更新
-- on delete on action 删除管制
2.添加外键
alter table 表名
add constraint FK_表名_表名2
Foreign key(cid) references 表名2(cid)
用户定义完整性:属性值约束
1.非空约束
alter table 表名
alter column name varchar(20) not null
2.唯一约束
alter table 表名
add constraint UQ_表名_列名 unique(列)
3.检查约束
alter table 表名
add constraint CK_表名_列名 check(age&5)
4.默认约束
alter table 表名
add constraint DF_表名_列名 default('男')
for gender
--删除约束 全局约束:包括基于元组的检查子句(CHECK)和断言
alter table 表名 drop constraint DF_表名_列基于Client/Server数据完整性约束的实现技术-其它计算机论文-论文联盟
您好,游客
背景颜色:
基于Client/Server数据完整性约束的实现技术
基于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)定义了一个关系数据库中不同的列和不同的表之间的关系(主键与外键)。要求一列或一组列中的值必须要与相关的一列或一组列中的值相匹配。从属的一列或一组列称之为外键(Forgn 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事件(可设置有效性验证)
数据窗口接受该值
用户调用Update()函数
执行UpdateStart事件
不更新数据库
更新数据库
图一、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和寻呼类型表pagertype,我们可以看出如何定义域完整性、主键、外键、唯一键、NOT NULL和CHECK约束。&&& 四、结束语
本文讨论了分布计算环境下的数据完整性约束的概念及其实现技术。另外,基于Browser/Server计算模式下的应用系统同样需要考虑数据完整性约束的问题,且其与基于Client/Server的数据完整性约束相类似。参考文献:
[1] 李昭原主编 数据库技术新发展 清华大学出版社,1997[2] 周龙镶编著 数据库管理系统实现技术 中国地质大学出版社,1990
欢迎浏览更多 →
相关文章 & & &
本栏目最新更新文章
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
内容分类导航}

我要回帖

更多关于 oppo手机为什么那么贵 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信