何为约束?通俗来讲,就是一些条条框框,一些规则限制,数据库还有一个术语叫做规则,跟约束十分相似,在这里我就不谈规则了。
当创建数据库表和字段时,可以声明约束(constraint),以限制可以进入字段的数据,利用约束来确保数据的有效性。使用DBMS保护数据的完整性,不是仅有的方法,但它可能是最好的方法。另外一种方法是利用一个外部程序确保数据的有效性,因为大多数数据库不被用户直接访问,而是通过某个第三方前端接口。
但是,使用DBMS防止不正确的数据,具有它的的优点。例如,检查仅需要在一个位置完成:在数据库本身中。另外,DBMS比起外部程序能够更高效的检查数据。
在学生信息管理系统中的各种添加信息的操作,众所周知,向数据库中写入数据必然会有一定的限制,在这里我把它们叫做约束。例如:
在添加系统的用户时,必须要考虑到:用户名的长度,用户名是否已经存在,用户名是否可以为空等等问题。当然用户名的长度是在前端程序中进行限制的,但是期限要比后台的数据库更为严格。
对于用户名是否已经被注册,则要对数据库中相应的表user_Info中的记录进行遍历才知道,那么可以在前端程序中用代码实现。
txtSQL = "select * from user_Info"
Set mrc = ExecuteSQL(txtSQL, MsgText)
While (mrc.EOF = False)
If Trim(mrc.Fields(0)) = Replace(Text1(0).Text, " ", "") Then '判断用户名是否已经存在
MsgBox "用户名已经存在,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
Exit Sub
Else
mrc.MoveNext
End If
Wend
然而也可以在设计数据库的时候,对存储用户信息的表中的用户名字段定义唯一性约束:
Create table user_info
(
用户名 char(10) constraint un_uname unique
)
这样就可以确保在非主关键字段或者字段组合中不会输入相同的数据。
我们再来看一个例子:在学生信息管理系统中有一个添加成绩信息的界面
既然是录入成绩,那么成绩自然就会有一个范围限制,成绩不可能是负值或者单科成绩超过1000甚至10000的吧。最开始做系统的时候,我依旧是在前端程序中对要输入的数据进行判断处理:
If txtResult.Text < 0 Or txtResult.Text > 100 Then
MsgBox "请输入0—100的数字!!", vbOKOnly + vbExclamation, "警告"
txtResult.Text = ""
txtResult.SetFocus
End If
同样我们也可以在后台的数据库设计中对要输入的数据进行核查或者叫判断,然后再决定是否写入数据库,这就要用到核查约束。
所谓核查约束就是通过检查一个或多个字段的输入值是否符合设定的检查条件来强制数据的完整性。如果输入的数据不符合核查条件,系统将拒绝这条记录。
其实现方法如下:
Create table result_info
(
result float not null
constraint ck_result
check(result >=0 and result <=100)
)
以上只是列举了两个小例子来说明数据库技术中的约束是如何在实际应用中和我们的前端应用程序相辅相成的,当然约束不仅仅只有这些,常用的还有主键约束、外键约束、Null约束和default约束等等。