首页 > 代码库 > S1/C#语言和数据库技术基础/07-用表组织数据

S1/C#语言和数据库技术基础/07-用表组织数据

SQL Server提供了以下四种类型的约束

1、实体完整性约束

实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行。

通过索引、唯一约束、主键约束或标识列属性,可以实现表的实体完整性。这些方法的实现将在后面说明。

2、域完整性约束

域完整性指的是给定列输入的有效性。

通过限制数据类型、检查约束、输入格式、外键约束、默认值、非空约束等多种方法,可以实现表的域完整性。

3、引用完整性约束

在输入或删除数据行时,引用完整性约束用来保持表之间已定义的关系。

例如,在管理学生信息的时候,一个表用来存储学生的信息,另一个表用来存储考试成绩的详细情况,并且考试成绩表中的一列数值就是学生信息表中的编号,用来表示学生的信息。

在强制引用完整性约束时,SQL Server禁止用户进行下列操作。

  • 当主表中没有关联的记录时,将记录添加到从表中,也就是说学生成绩表中不能够出现在学生信息表中不存在的学号。
  • 更改主表中的值导致相关表中的记录孤立。如果学生信息表中的学号改变了,学生成绩表中的学号也应当随之改变。
  • 从主表中删除记录,但在相关表中仍存在与该记录匹配的相关记录。如果把学生信息表中的学生信息删除了,则该学生的学号不能出现在学生成绩表中。

引用完整性通过主键和外键之间的引用关系来实现。

4、自定义完整性约束(检查约束)

用户自定义完整性用来定义特定的规则。例如,在向用户信息表中插入一个用户记录时,要求通过身份证编号来检查在另外一个数据库中是否存在该用户,并且该用户的信誉度是否满足要求,等等。若不满足要求,则不能够插入,这个时候就需要使用数据库的规则、存储过程等方法来进行约束。

 

主键

有一个列,这个列的值用来唯一标识表中的每一行,用于强制表的实体完整性,这样的列定义为表的主键。

一个表只能有一个主键,并且主键列不允许出现空值(Null),尽管有的表中允许没有主键,但是通常情况下建议为表设置一列为主键。

提示:如果两列或多列组合起来唯一的标识表中的每一行,则该主键也叫作复合主键
外键

外检就是相对主键而言的,就是从表中对应于主表的列,在从表中称为外键或者引用键,它的值要求与主表的主键或者唯一键相对应,外键用来强制引用完整性。一个表可以有多个外键。

 

创建数据库表实际上就是实施不同的约束,实现完整性规则的过程。

 

SQL Server数据类型

 

分类

数据类型

说明

二进制数据类型

用来存储非字符和文本的数据

Binary

固定长度的二进制数据

 

 

Varbinary

可变长度的二进制数据

 

 

Image

可用来存储图像

文本数据类型

字符数据包括任意字母、符号或数字字符的组合

Char

固定长度的非Unicode字符数据,最大长度为8000个字符

 

 

Varchar

可变长度的非Unicode字符数据

 

 

Nchar

固定长度的Unicode字符数据

 

 

Nvarchar

可变长度的Unicode字符数据

 

 

Text

存储长文本信息

 

 

Ntext

存储可变长度的长文本

日期和时间数据类型

用于存储日期和时间

Datetime

175311日到99991231日,准确度为三百分之一秒或3.33毫秒

数字数据类型

该数据仅包含数字,包括正数、负数及分数

Intsmallinttinyintbigint

整数

 

 

Floatreal

浮点数

货币数据类型

货币数据类型用于十进制货币值,并且精确到小数点后面4位数

Money

 

Bit数据类型

表示是/否的数据,只有两种选择,如婚否、是否定购等。在SQL Server中用10表示,一般1表示是,0表示否

Bit

存储布尔数据类型

Unicode是一种在计算机上使用的字符编码,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

 

在创建表的时候,选择字符数据类型,还需要输入长度信息,如varchar50)指长度为50的字符型数据,其中长度可以改变。选择数字数据类型不需要输入长度信息,以你为长度是固定的。

 

标识列

在很多情况下,存储的信息中很难找到不重复的信息作为列的主键。就拿学生信息来说,以姓名作为主键的话,一个班上就不允许有同名的学生,如果一张表存储整个学校的学生信息,那么整个学校都不允许重名,这显然要带来麻烦。

SQL Server提供了一个标识列,标识列本身没有具体的意义,不反映学生诸如地址、性别这样的信息,只是用来区别不同的学生。

标识列的实现方式如下:

  • 如果一列的数据属于数字类型(如整数),那么可以把该列定义为标识列。
  • 定义成标识列之后,还需要分别指定标识种子标识增量,默认值都是1.
  • 定义了表之列之后,在以后每次输入数据的时候,该列随数据行的增加而自动增加数值,并且不会重复,第一次的数字就是标识种子值,以后每次按照标识增量增加数值。

标识列通常也被定义为主键,通常所说的自动编号就是指标识列的数字自动增加。

 

标识列中的数据是自动生成的,不能在该列上输入数据,后续章节将要学习的使用SQL语句插入数据时,也不允许为标识列指定值。

 

建立检查约束

检查约束也叫作CHECK约束,用于定义列中可接受的数据值或者格式。其中,%代表任意多个字符。

S1/C#语言和数据库技术基础/07-用表组织数据