子任务4.4.1 数据完整性概念
所谓数据完整性,是指数据的正确性和一致性。
数据完整性分为四类:实体完整性、域完整性、参照完整性和用户自定义完整性。
实体完整性要求每一个表中的主键字段都不能为空或者重复的值。实体完整性指表中行的完整性。要求表中的所有行都有唯一的标识符,称为主关键字。例如,每个学生都有一个学号,以标识不同的学生。
域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值。例如,性别字段只能为男或女。
参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。参照完整性又称引用完整性。例如,学生只能选修课程表中的课程。
用户自定义完整性反映某一具体应用所涉及的数据必须满足的语义要求。例如,某个属性必须取唯一值,某个非主属性也不能取空值,某个属性的取值范围在0-100之间等。用户定义完整性可以涵盖实体完整性、域完整性、参照完整性等完整性类型。
子任务4.4.2 使用约束保证数据完整性
保证数据完整性的主要方法之一是对表添加约束。在SQL Server中有五种约束:主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、唯一性(UNIQUE)约束、检查(CHECK)约束和默认(DEFAULT)约束。
主键约束:保证实体完整性,一张表只能有一个主键,但主键可以由多个字段构成,称为复合主键。主键字段的值要求唯一和非空,复合主键中单个字段可以有重复值,但字段组合值必须唯一。
外键约束:保证参照完整性,外键约束字段的值参照对应主键表的主键约束字段的值。必须先建立对应主键表的主键,才能建立外键。
上机题:
(1)创建图书管理书库表 (程序脚本)
(2)某公司需要使用表tbCustomerInfo来存储客户的信息,客户的信息包括:代号(整型,IDENTITY,从100001开始,每次增加5),名称(最长40个汉字),电话(20个字符),传真(20个字符),备注(最长1000个汉字),电话和传真需要使用用户定义数据类型TypeTelFax。写出创建数据库[HX公司DB]及表[tbCustomerInfo]的T-SQL语句。
CREATE DATABASE [HX公司DB] GOUSE [HX公司DB]
/** 对象: UserDefinedDataType [dbo].[TypeTELFAX] **/
CREATE TYPE [dbo].[TypeTELFAX] FROM [varchar](20) NOT NULLGO
CREATE TABLE [tbCustomerInfo]
( 代号 INT IDENTITY (100001,5) NOT NULL,
名称 nCHAR(40),
电话 TypeTELFAX,
传真 TypeTELFAX,
备注 nvarchar(1000) )
USE [HX公司DB]
GO
INSERT INTO [HX公司DB].[dbo].[tbCustomerInfo] ([名称],[电话],[传真],[备注]) VALUES ('广州华夏IT公司','020-87862345','020-11234567','this is a computer!')
INSERT INTO [HX公司DB].[dbo].[tbCustomerInfo] ([名称],[电话],[传真],[备注]) VALUES ('广东华夏技工公司','020-86862345','020-33234567','this is a book!')
SELECT * FROM [HX公司DB].[dbo].[tbCustomerInfo]
特别说明:
identity
表示该列字段的值会自动更新,不需要人们维护,通常情况下不能直接给
identity
列直接赋值,否则编译时会报错。
语法格式为:
identity [(m, n)]
其中:
表示的是初始值,m
表示的是每次自动增加的值。n
提示:
要么同时指定
和m
的值,要么n
和m
都不指定,不能只写其中一个值。如:n
、identity(5,3)
是正确的,但是identity
是错误的。identity(5)
如果
和m
都未指定,则取默认值n
(1, 1)
数据类型是整型的列才能被定义成标识列:
、int
、bigint
列都可以被定义成smallint
。identity
(不含有小数位的
和decimal
也可以被标记为numeric
。如:identity
、decimal
字段都可以被标记为decimal(6, 0)
,但是identity
字段就不能被标记为decimal(6, 2)
identity)
标识列通常与
约束一起用作表的唯一行标识符primary key
use教务数据库
createtable HXloving
( ID int identity (100,1),
学号 CHAR(9) CONSTRAINT FKEY_ID1 FOREIGNKEY(学号) REFERENCES 学生表(学号),
NAME varchar(12),
SEX char(2)CONSTRAINTDefault_SEXN Default '男' ,
Email char(20)CONSTRAINTch_email CHECK ( EMAIL LIKE '%@%') ,
)
exec sp_help'HXloving'