您的位置:首页 > 数据库

T-SQL 学习之路之数据库完整性之域完整性

2015-10-22 19:46 330 查看
          数据库完整性是指对数据库的一致性和准确性强制数据完整性可靠性保证数据库中数据的质量。

---------------------数据库完整性分类

       数据完整性一般分为域完整性,实体完整性,参照完整性,用户自定义完整性。

       1,域完整性

       域完整性指列数据输入的有效性,又称列完整性,通过CHECK约束、DEFALUT约束、NOT NULL约束、数据类型和规则等实现域完整性。

      CHECK约束通过显示输入到列中的值来实现域完整性。

      例如:对于stsc数据库score表,grade规定为0分到100分之间,可用CHECK约束表示。

     
2,实体完整性

      实体完整性要求表中有一个主键,其值不能为空且能唯一地标识对应的记录,又称为行完整性,通过PRIMARY KEY 约束、UNIQUE约束、索引或IDENTITY
属性等实现数据的实体完整性。

     例如,对于stsc数据库中student表,stno列作为主键,每一个学生的stno列能唯一地标识该学生对应的行记录信息,通过stno列建立主键约束实现student表的实体完整性。

      3,参照完整性

      参照完整性保证主表中的数据与从表中数据的一致性,又称为引用完整性,在SQL Server 2008中,通过定义主键(主码)与外键(外码)之间的对应关系实现参照完整性,参照完整性确保键值在所有表中一致。

      主键:表中能唯一标识每个数据行的一个或多个列。

      外键:一个表中的一个或多个列的组合是另一个表的主键。

     4,用户自定义完整性

       用户自定义完整性不属于其他任何完整性类别的特定业务规则,所有完整性类别都支持用户定义完整性,包括CREATE TABLE 中所有的列级约束和表级约束,存储过程和触发器。

-------------------------域完整性

      1,check约束

              CHECK约束用于对输入列或者整个表中的值设置检查条件,以限制输入值,从而保证数据库的完整性。

             A, 使用T-SQL 语句在创建表时创建CHECK约束。

              语法格式如下:

CREATE TABLE table_name      		 /*指定表名*/
(column_name  datatype
{
NOT NULL | NULL 			 /*指定为空性*/
| [ DEFAULT co nstraint_expression ]        /*指定默认值
| [ CONSTRAINT constraint_name ] CHECK ( logical_expression )]
  				               /*CHECK约束表达式*/
}[,…n]
[ CONSTRAINT constraint_name ] CHECK ( logical_expression )][,
)
        其中,关键字CHECK表示CHECK约束。logial_expression为CHECK约束表达式。

       例如:在stsc数据库中创建表goods,包含有关域完整性的定义。

USE stsc
CREATE TABLE goods
(
gid int NOT NULL,                                                               /*商品号*/
gname varchar(100) NOT NULL,                                         /*商品名*/
  gprice float NOT NULL CHECK(gprice<=500),                 /*价格*/
  gclass varchar(60) DEFAULT 'articles of everyday use',     /*类型*/
  gamount int NOT NULL,                                                      /*数量*/
  gdate date NULL,                                                                  /*上架日期*/
trade_price float NOT NULL                                                /*批发价格*/
)
        注意:如果在指定的一个月书中涉及多个列,则该约束必须定义为表的约束。

           B,使用T-SQL 语句在修改表时创建CHECK约束

            使用ALTER TABLE 的ADD 子句在修改表时创建CHECK约束,其语法格式如下:

ALTER TABLE table_name
  ADD [<column_definition>]
    [CONSTRAINT constraint_name] CHECK (logical_expression)
        例如: 通过修改stsc数据库的goods表,增加批发价格列的CHECK约束。
USE stsc
ALTER TABLE goods
ADD CONSTRAINT CK_trade_price CHECK(trade_price<=500)
        C,使用T-SQL语句删除CHECK约束

         使用  ALTER TABLE 语句的 DROP 子句删除CHECK约束。其语法格式如下:

ALTER TABLE table_name
    DROP CONSTRAINT check_name
      例如:删除stsc数据库的goods表批发价格列的CHECK约束
USE stsc
ALTER TABLE goods
DROP CONSTRAINT CK_trade_price

       2,DEFAULT约束

           DEFALUT约束通过定义列的默认值或使用数据库的默认值对象绑定表的列,当没有为某列指定数据时,自动指定列的值。在创建表时,可以创建DEFAULT约束作为表定义的一部分。如果某个表已经存在,则可以为其添加DEFAULT约束,表中的每一列都可以包含一个
DEFAULT约束。

           默认值可以是常量,也可以是表达式,还可以为NULL值。

           创建表时创建DEFALUT约束的语法格式如下:
[CONSTRAINT constraint_name]
DEFAULT constant_expression [FOR column_name] 
      例如:在stsc数据库中创建st表时建立DEFALUT约束。
USE stsc
CREATE TABLE st
(
  stno char(4) NOT NULL PRIMARY KEY, 
stname char(8) NOT NULL,
  stsex char(2) NOT NULL DEFAULT '男',            /* 定义stsex列DEFALUT约束值为'男' */
  stbirthday date NOT NULL,
  specialist char(12) NULL DEFAULT '计算机',     /* 定义specialist列DEFALUT约束值为'计算机' */
  tc int NULL
)
GO
                  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息