一、表相关的几个基本概念
(一)数据完整性
1、定义:数据的完整性是指,在数据库中存储的数据必须是准确的,准备性是通过数据库表的设计和约束来实现的
2、SQL SERVER 中存在的五种约束:
主键约束、外键约束、检查约束、默认约束和唯一约束
3、SQL SERVER 中提供的四种类型的约束(Constraint):
1)实体完整性约束:要求表中的每一行数据都反映不同的实体,不能存在相同的数据行,一般通过索引、唯一约束、主键约束或标识列属性来实现
2)域完整性约束:指给定列的输入有效性,一般通过数据类型、检查约束、输入格式、外键约束、默认值、非空约束等方法实现
3)引用完整性约束:在输入或删除数据行时,引用完整性约束用来保持表之间已定义的关系。
学员信息表
学号 | 姓名 | 地址 |
---|---|---|
0010012 | 李山 | 山东定陶 |
0010013 | 吴兰 | 湖南新田 |
学员成绩表
科目 | 学号 | 分数 |
---|---|---|
数学 | 0010012 | 88 |
数学 | 0010013 | 74 |
在上面二个表中已经存在了关系,学员成绩表中“学号”字段中的值必须存在于学员信息表中的“学号”字段中,学员信息表是“主表”,学员成绩表是“子表”,也叫“相关表”。
在强制引用完整性时,SQL SERVER 禁止用户进行如下操作:
A.当主表中没有关联的记录时,将记录添加到相关表中,即学员成绩表中不能出现学员信息表中不存在的学员
B.更改主表中的值并导致相关表中的记录孤立。如果学员信息表中的学员改变了,学员成绩表中的学号也应当随之改变
C.从主表中删除记录,但仍存在与该记录匹配的相关记录。如果学员信息表中的学号被删除了,则该学员学号不能出现在学员成绩表中
4)自定义完整性约束:用户自己定义的完整性约束
(二)主键(Primary Key)和外键(Foreign Key)
1、主键:
1)定义:表中有一列或几列组合的值能用来唯一地标识表中的每一行,这样的列或者多列的组合叫做表的主键
2)主键的值不能重复且不能为空(NULL),在一个表中只能定义一个主键,尽管表中也可以没有主键,但通常情况下应该为表设置主键
3)定义主键的原则:
A.最少性:在可以同时选择单一主键和组合主键(即用几列的组合来标识唯一行)时,尽管采用单一主键
B.稳定性:被定义为主键的列,其数据应该想对稳定,不需要经常进行更新,最好永远不会改变
2、外键:
外键是对应于主键而言的,就是“子表”中对应于“主表”的列,在子表中称为外键或者引用键,它的值要求与主表的主键或唯一键相对应,外键用来强制引用完整性。一个表可以有多个外键
二、建立数据库表
(一)在企业管理器中建立数据库表
1、系统表“sysFiles”和“sysUsers”的功能:
1)“sysFiles”表:用于保存当前数据库的物理文件的信息
2)“sysUsers”表:用于保存当前数据库的用户信息
2、如何创建数据库表: 在当前数据库下,右击“表”项目,并在快捷菜单中选择“新建表”,就会进入到数据库表的设计对话框中,在这里可以对数据类型及相关约束进行设置
(二)确定列的数据类型
1、SQL SERVER 中常用的数据类型:
分类 | 备注和说明 | 数据类型 | 说明 |
---|---|---|---|
二进制数据类型 | 用来存储非字符和文本的数据 | Binary | 固定长度的二进制数据 |
Varbinary | 可变长度的二进制数据 | ||
Image | 可用来存储图像 | ||
文本数据类型 | 字符数据包括任意字母、符号或数字字符的组合 | Char | 固定长度的非Unicode字符数据,最大长度为8000个字符 |
Varchar | 可变长度的非Unicode数据 | ||
Nchar | 固定长度的Unicode数据 | ||
Nvarchar | 可变长度的Unicode数据 | ||
Text | 存储长文本信息 | ||
Ntext | 存储可变长度的长文本信息 | ||
日期和时间 | 日期和时间在单引号内分别输入 | Datetime | 时期和时间 |
数字类型 | 该数据仅包含数字,包括正数、负数以及分数 | int | 整数 |
smallint | |||
tinyint | |||
bigint | |||
float | 数字 | ||
real | |||
货币数据类型 | 货币数据类型用于十进制货币值,并且精确到小数点后四位数字 | Money | |
Bit数据类型 | 表示是/否的数据,只有两种选择,1表示是,0表示否 | Bit | 存储布尔数据类型 |
2、在创建表的时候,选择字符数据类型,还需要输入长度信息(text除外),选择数字数据类型不再需要输入长度信息
(三)是否允许为空值
数据库中的列是否允许为空也是一项约束,如果该列允许为空,则在输入数据行的时候,这一项可以不输入,这项约束在“表设计”对话框中的“允许空”一项进行设置
(四)建立主键
在“表设计”对话框中选定要设为主键的列,右击选择“设置主键”即可,设置组合键的,可以按住CTRL选取多列进行设置
(五)默认值
表的默认值设置能定义一个值,每当用户没有在某一列中输入值时,将所定义的值提供给这一列。在“表设计”对话框中选定要设置默认值的列,在其下方的“默认值”文本框中输入即可
(六)标识列
1、标识列的作用:
“标识列”是为了特意对列进行区分,其本身没有具体的意义,不反映具体的信息,只用来区别不同的学员,例如:一个学校中有多位姓名相同的学员时,就不能以姓名作为“主键”来使用,这时使用“标识列”为主键,以达到区分的目的
2、标识列的实现:
A.如果一列的数据属于数字类型,才可以把该列定义为标识列
B.定义成标识列之后,还需要分别指定“标识种子”和“标识递增量”,默认都是1
C.定义了标识列后,在以后每次输入数据的时候,该列随数据行的增加自动增加数据,并且不会重复,第一次的数字就是“标识种子”值,以后每次按照“标识增量”增加数值,标识列通常也被定义为主键,通常所说的“自动编号”就是指标识列的数字自动增加。
3、使用标识列时的注意事项:
A.标识列中的数据是自动生成的,不能在该列上输入数据,使用SQL语句插入数据时,也不允许为标识列指定值
B.对于定义有标识列的数据行进行删除操作时,不影响“标识列”的自动增长值,如:在学生表中将“学号”定义为标识列,有2名新生入学进行登记,向表中插入2条记录,学号分为1和2,后因2号学生转学,“学号”为2的记录被删除,此后又有一名新生入学,此时该新生的学号为3,而非2
三、建立表间关系
(一)建立表间关系实际上就是实施引用完整性约束,建立主表和子表的关系
(二)建立表间关系的方法:
在“表设计”对话框空白处右击,选择“关系”,即可打开“属性”对话框,在“关系”选项卡中单击“新建”后,选择好要建立关系的主表及子表,还有它们的关系字段即可
(三)查看表间关系的方法:
在指定数据库下,右击“关系图”,选择“新建关系图”,弹出“关系图向导”对话框,选择要查看关系的两个或多个表,点击下一步至完成即可
四、建立检查约束
检查约束也叫Check约束,用于定义列中可接受的数据值或者格式
五、导入和导出数据
1、功能:用于将SQL SERVER中的数据转换成其它格式的数据,例如,文本文件或EXCEL等
2、导出数据的方法:
A.右击“数据库”,选择“所有任务”--“导出数据”,打开“导入导出向导”后点击“下一步”
B.在“选择数据源”对话框中,可以设置以下选项,设置好后点“下一步”
a.数据源:即为SQL SERVER数据,保持默认
b.服务器:数据源所在主机
c.验证方式:选择哪种都可以
d.数据库:数据源所在的数据库名称
C.在“选择目的”对话框中可进行如下设置,完成后点“下一步”
a.目的:即要转换成哪种类型的数据,这里以文本类型为例,选择“文本文件”
b.文件名:目标文件的名称(要先建好)
D.在“指定表复制或查询”对话框中,可进行选择:本例选择第一项,选好后点“下一步”
a.“从源数据库复制表和视图”:选这项后,可在下面的步骤中选择要导出的数据表
b.“用一条查询来导出所需要的数据”:选这项后,在下面的步骤中会要求输入SQL语句,将执行结果导出
E.在“选择目的文件格式”对话框中,可进行如下设置,完成后单击“下一步”:
a.源:选择要导出的表
b.是否带有分隔符:设置导出数据的格式中是否运用分隔符
c.分隔符的种类
F.直接单击“下一步”直到“完成”
3、导入数据的方法:与导出类似
六、删除表
在指定的数据库中,右击想要删除的表格,点击“删除”即可,删除后不可恢复