导图社区 数据库单元三综合知识点思维导图
关于数据库:第11章和第7章。数据的完整性管理索引与视图,数据的完整性管理,分为实体完整性的实现,参照完整性的实现,用户定义完整性的实现。
编辑于2022-06-10 21:17:38单元三 数据的完整性管理、索引与视图
数据的完整性管理
关于数据完整性
数据完整性的概念
数据完整性包含两方面的含义:数据的正确性和数据的相容性,它们共同保证数据在语义上的合理性和有效性。
完整性
安全性
数据完整性的分类
实体完整性
实体完整性又称行完整性,是指任何一个实体都存在区别于其他实体的特征,而且这些特征值都不能为空(NULL)。
参照完整性
参照完整性又称引用完整性,它是指主关系表(被参照表,常称主表)中的数据与从关系表(参照表,常称从表)中数据的一致性
域完整性
域即是字段(列)。
用户定义完整性
用户定义完整性和域完整性是相交关系,但不是隶属关系。
实体完整性的实现
实体完整性的定义
主键约束
唯一约束
Identity字段
实体完整性的检查
参照完整性的实现
参照完整性的定义
参照完整性是通过定义外键与主键之间或外键与唯一约束字段之间的对应关系来实现的,由这种关系形成的约束称为外键约束。
参照完整性的检查
参照完整性在两个表之间定义了一种对应关系,这种关系一般是基于一个或多个字段来定义的,这些字段通常称为关联字段。
简单地说,任何时候主表必须“包含”从表中的记录
对于参照完整性来说,数据库操作应该遵循以下几条原则:
从表不能引用主表中不存在的键值。这是理解外键约束概念的关键,由此不难理解 以下几点。
当向从表中插入记录后,必须保证主表中已经存在与此记录相关联的记录
当修改主表或从表中的数据时,不允许出现存在从表中的记录在主表中没有相关联的记录的情况。
如果要从主表中删除记录,则必须先删除从表中与此相关联的记录(如果存在的话), 然后才能删除主表中的记录;对于表的删除操作,必须先删除从表,然后才能删除主表。
用户定义完整性的实现
域完整性的实现
非空约束
当对指定的字段创建非空约束后,该字段的输入值不允许为空(NULL),否则操作被拒绝。创建的方法是在字段后加上关键字NOT NULL而形成的。如果不显式说明NOT NULL,则表示没有对其创建非空约束,允许其取空值。
唯一约束
检查约束
检查约束的应用比较灵活,使用频率高,范围广,是一种非常有用的约束。
使用SQL语句
在SQL语言中使用如下的子句来定义检查约束: CHECK ( logical_expression )
使用SSMS
使用SSMS定义检查约束时,其操作过程基本上是表结构的设计过程。不同的是,对每一个需要定义检查约束的字段,右击它(右击该字段所在的行)并在弹出的菜单中选择“CHECK约束…”命令,这时将弹出“CHECK约束”对话框。
使用规则
使用规则定义检查约束的基本思路是,先创建数据表以及创建满足要求的规则,然后将规则绑定到相应的字段上。
默认值约束
使用SQL语句
在SQL语句中,默认值约束是用关键字DEFAULT来定义。
使用SSMS
使用SSMS定义默认值约束时,其操作过程基本上也是表结构的设计过程。不同的是,对每一个需要定义默认值约束的字段,选择它并在窗口底部的“列属性”列表框中将“默认值或绑定”项的值设置为相应的默认值即可。
使用规则
与检查约束的定义一样,在使用规则定义默认值约束时,先创建表和规则,然后将规则绑定到相应的字段上。
表级约束完整性的实现
表级约束CHECK(c_grade >= 0 AND c_grade <= 100 AND c_name IN('英语','数据库原理','算法设计与分析'))也可以转化为列级约束: CHECK(c_grade >= 0 AND c_grade <= 100) CHECK(c_name IN('英语','数据库原理','算法设计与分析'))
上述语句可以转化为下列语句: CREATE TABLE SC( s_no char(8), c_name varchar(20) CHECK(c_name IN('英语','数据库原理','算法设计与分析')), c_grade numeric(4,1) CHECK(c_grade >= 0 AND c_grade <= 100), PRIMARY KEY(s_no, c_name) ); 但由于主键约束PRIMARY KEY(s_no, c_name)涉及到两个字段,所以不能转化为列级约束来定义。
索引与视图
索引概述
索引是依赖于数据表或视图的一种数据库对象,它保存了针对指定数据表或视图的键值或指针。索引有自己的文件名(即索引文件名),也需要占用磁盘空间。创建索引的目的为了提高对数据表或视图的搜索效率。
在SQL Server中,索引是用B-树这种数据结构来构造的,通过索引访问数据实际上是寻找一条从根节点到叶子节点的过程,这个过程一般比直接按顺序访问数据表要高效得多。
如果对数据表创建过多的索引,反而可能使得对数据的查询效率下降。
总之,索引是独立于数据表的一种数据库对象,它保存了针对于指定数据表的键值和指针。
何种情况下创建索引
索引的原理——B-树
索引的类型
聚集索引和非聚集索引
聚集索引
聚集索引的主要特点是,索引顺序与数据表中记录的物理顺序相同,每一张数据表只允许拥有一个聚集索引。 聚集索引与数据是“一体”的,其存在是以表中的记录顺序来体现。这是因为在B-树的叶子节点中存储的是实际的数据。
非聚集索引
非聚集索引也是基于B-树来构造的,但它与聚集索引不同,这主要体现在以下两点: 非聚集索引允许表中记录的物理顺序与索引顺序不相同,即非聚集索引不改变表中记录的物理顺序,它只是保存着指向相应记录的指针。一个数据表可以同时拥有一个或多个非聚集索引。 非聚集索引的叶子节点包含索引键和指向索引键对应记录的指针,而不包含数据页(不保存实际数据,更多是保存指向记录的指针)。
唯一索引与非唯一索引
所谓唯一索引,它是指索引值唯一(没有重复索引值)的一类索引,如果索引值不唯一,则为非唯一索引
从索引数据存储的角度来看,索引可以分为聚集索引和非聚集索引;从索引值是否可以重复的角度看,索引又可以分为唯一索引和非唯一索引。唯一索引既可以是聚集索引,也可以是非聚集索引。
组合索引
组合索引是指使用两个或两个以上的字段来创建的索引。
创建索引
聚集索引
聚集索引的最大优点是,当对带有聚集索引的字段进行查询时,会产生很高的查询效率。这是因为,索引值相近的字段值在物理磁盘上也相互靠近,这样就可以大大减少磁盘转动所需要的读盘时间。 注意,对一个表或视图只能创建一个聚集索引。
非聚集索引
与聚集索引不同,对一个数据表可以创建多个非聚集索引。理论上,我们可以对任何一列或若干列的组合创建非聚集索引,只要总数不超过249个。
唯一索引
唯一索引的创建是使用带UNIQUE选项的CREATE INDEX语句来实现,其语法格式如下: CREATE UNIQUE INDEX index_name ON table_name(col_list [DESC | ASC]);
查看和删除索引
查看索引
利用系统存储过程sp_helpindex可以获得一张数据表或视图上的所有索引。其语法如下: sp_helpindex [ @objname = ] 'name'; 其中,参数[ @objname =] 'name'用于指定当前数据表或视图的名称。该存储过程结果集的形式输出指定数据表或视图上的所有索引。结果集包含三个列: index_name:返回索引名; index_description:返回索引说明,如是否是聚集索引、唯一索引等信息,其中包括索引所在的文件组; index_keys:返回对其生成索引的列。
删除索引
当一个索引不再需要的时候,可用DROP INDEX语句将之删除。该语句最简单的语法格式可以表示为: DROP INDEX index_name ON table_name; 也可以将表名前缀,写成: DROP INDEX table_namet.index_name;
视图概述
视图的概念
实际上,视图在本质上是一个命令集,当“打开”它时将由这些命令从一张或多张数据表中抽取数据,这些数据便在视觉上构成了一张“数据表”,而这些被从中抽取数据的数据表通常称为视图的基本表或基础表(简称基表)。
视图的优缺点
提供个性化的数据显示功能
简化数据的操作
自组织数据
组合分区数据
便于数据共享
提高安全性
相对低效
有限的更新操作
视图的创建与删除
创建视图
视图是用CREATE VIEW语句来创建,其简要的语法如下: CREATE VIEW view_name [(column [,...n])] AS select_statement; 其中,view_name表示要创建的视图的名称;select_statement为SELECT查询语句;column [,...n]表示视图中字段的名称,如果未指定 column,则视图的字段名将与 SELECT查询中的字段名相同。
更新视图
更新视图是指通过视图更新其基表中的数据,这跟更新数据表的方法一样,只需将视图名当作数据表名即可。
删除视图
视图的删除可用DROP VIEW语句来实现,其语法如下: DROP VIEW [ schema_name . ] view_name [ ...,n ] [ ; ] 其中,view_name为要删除的视图的名称,schema_name为视图所属架构的名称。
查看视图
视图的定义代码
视图的结构信息
数据库中的视图