【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构

数据表的完整性问题大多是由于设计不当引起的,创建表的时候就应当保证以后的录入是正确的,也就是错误的、不符合要求的数据应当不允许录入。

数据完整性=可靠性+精确性

要保证数据的完整性,就要实施完整性约束。

四种完整性约束

①域完整性:列值的约束,如数据类型、位数、范围。
        约束方法:检查约束、默认值约束、非空约束。
②实例完整性:行和行间不能重复。
        约束方法:唯一约束、主键约束、标识列。
③引用完整性:某一列值需来源于另外一张表中。
        约束方法:外键约束。
④自定义完整性:自己定义的一些约束。
        约束方法:触发器。

表中字段的常用数据类型

【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第1张图片
char(x)指定的位数x,即使存入的数据不满x位,后面也会补上空格。varchar(x)则会判断位数,不足x则只保存真实的位数,牺牲性能来节省空间,而且因没有补全机制而更方便处理。
varchar(2x)能存储2x个字母或x个汉字,而nvarchar(2x)能存储2x个字母或2x个汉字。
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第2张图片
日期类型:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第3张图片
此外,图片可以使用img类型。但是一般不把图片存在数据库中,而是直接保存在硬盘中,在数据库中记录它们的位置即可。

[1]主键约束

【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第4张图片
因为学号是不可能重复的,就可以用它来保证实例的完整性,对学号设置主键约束:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第5张图片
尝试插入学号重复的行,会提示违反了主键约束,不能插入:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第6张图片
一个表可以有多个主键,按住Ctrl选中再一起设置主键,如新建这样一张表:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第7张图片
像这样的表就仅当两个主键都重复的行不能被录入:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第8张图片
在设计主键时,应尽量选择更新情况少的列的单个键作为主键。

[2]默认值约束

如给Adress域设置默认值:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第9张图片
这时新插入的行不填入地址时,默认就不再为NULL而是提供的默认值:
这里写图片描述

[3]设置标识列

如果表中没有合适的列作为主键,那么可以设置标识列:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第10张图片
标识列必须是int型,图中的设置表示标识从1开始,每次加1。把标识列设置成主键,然后保存设计并插入数据:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第11张图片
可以看到这时候主键就变成了标识列,且标识列由系统自动录入。但标识号不会因为删除行而回退,而是接着最后一次产生的标识(而不是实际紧靠的标识)向下走。

[4]外键约束

创建好的学生表:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第12张图片
创建好的年级表:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第13张图片
创建好的科目表:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第14张图片
创建好的成绩表:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第15张图片
为保证数据完整性,成绩表中的学号应该来自学生表中的学号,成绩表中的学科号应来自科目表中的学科号,科目表中的年级号应来自年级表,学生表中的年级号应来自年级表。这就需要建立外键约束(保证引用的完整性)。
如添加”成绩表中的学号引用自学生表中的学号”:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第16张图片
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第17张图片
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第18张图片
用同样的方法建立另外两个外键约束。

建立好后插入数据,Grade表:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第19张图片
Subject表中GradeID不符合时不录入:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第20张图片
Result表中SubjectID不符合时不录入:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第21张图片
Result表中StudentNo不符合时不录入:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第22张图片
Student表中GradeID不符合时不录入:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第23张图片

建立外键约束后,需要注意:①主表中没有的值不能给子表外键约束域,②不能更改主表中的值使子表外键约束域孤立,应当一起修改,③子表中引用的了的值,不能在主表中删除这一行,④删除主表前,应先删除子表。

[5]检查约束

【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第24张图片
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第25张图片
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第26张图片
这时候如果尝试录入的Email地址中未能按照CHECK约束包含有’@’符号,就会被禁止:
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第27张图片

[6]创建数据库关系图

【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第28张图片
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第29张图片
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第30张图片

继续完善这几张表

Student表密码长度>=6(检查约束):
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第31张图片
Student表性别只能写男或女(检查约束):
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第32张图片
Subject表学时必须大于0(检查约束):
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第33张图片
Result表分数不为空时需要在0~100之间(检查约束):
【SQL Server学习笔记】4:使用SSMS创建数据库表并完善表结构_第34张图片

你可能感兴趣的:(#,SQL,Server)