当前位置: 首页 > wzjs >正文

专业云南做网站哪个平台做网站好

专业云南做网站,哪个平台做网站好,有哪些做特卖的网站,做网站导航栏目怎么做数据库原理实验:视图与索引 一、实验概述 实验目的 掌握视图与索引的定义及语法。理解视图与索引的作用、原理及应用场景。熟练使用SQL Server 2022进行视图和索引的创建、修改、删除及数据操作。 实验环境 操作系统:Windows 11数据库管理系统&…

数据库原理实验:视图与索引

一、实验概述

实验目的

  1. 掌握视图与索引的定义及语法。
  2. 理解视图与索引的作用、原理及应用场景。
  3. 熟练使用SQL Server 2022进行视图和索引的创建、修改、删除及数据操作。

实验环境

  • 操作系统:Windows 11
  • 数据库管理系统:SQL Server 2022
  • 实验数据
    • 学生表(student057
    • 成绩表(score057
    • 课程表(course057
    • 教师表(teacher057

二、验证性实验:基础语法与功能验证

(一)视图的创建与操作

1. 创建基础视图
-- 创建视图V1,连接三张表获取学生成绩信息
CREATE VIEW V1_057 AS
SELECT s.sno, sname, cname, degree
FROM student057 s
JOIN score057 sc ON sc.sno = s.sno
JOIN course057 c ON c.cno = sc.cno;
GO
  • 关键点:通过JOIN语句实现多表关联,视图简化了复杂查询。在这里插入图片描述
2. 指定列名与别名
-- 方式1:SELECT中指定列别名
CREATE VIEW V2_057 AS
SELECT s.sno 学号, sname 姓名, cname 课程名, degree 成绩
FROM student057 s
JOIN score057 sc ON sc.sno = s.sno
JOIN course057 c ON c.cno = sc.cno;-- 方式2:CREATE VIEW时显式声明列名
CREATE VIEW V3_057(学号, 姓名, 课程名, 成绩) AS
SELECT s.sno, sname, cname, degree
FROM student057 s
JOIN score057 sc ON sc.sno = s.sno
JOIN course057 c ON c.cno = sc.cno;

注意列名
在这里插入图片描述

  • 注意:两种方式均可定义视图列名,显式声明更清晰,避免列名歧义。
3. 加密视图(WITH ENCRYPTION)
CREATE VIEW V4_057 WITH ENCRYPTION AS
SELECT s.sno, sname, cname, degree
FROM student057 s
JOIN score057 sc ON sc.sno = s.sno
JOIN course057 c ON c.cno = sc.cno;-- 验证加密效果(无法查看视图定义)
SELECT name, text FROM sysobjects o JOIN syscomments c ON o.id = c.id WHERE name = 'V4_057';
select name,text from sysobjects o join syscomments c on o.id=c.id where name='v1_057'  

V4_057,V1_057查询对比图:
在这里插入图片描述
在这里插入图片描述

  • 作用:保护视图定义不被他人查看,适用于敏感业务逻辑。
4. 通过视图修改数据
CREATE VIEW V5_057 AS
SELECT s.sno, sname, CLASS, c.CNO, cname, degree
FROM student057 s
JOIN score057 sc ON sc.sno = s.sno
JOIN course057 c ON c.cno = sc.cno
WHERE degree > 80;-- 更新学生信息(直接影响基表)
UPDATE V5_057 SET sname = '李君帅1', CLASS = '95031' 
WHERE sname = '李君帅' AND cname = '数字电路';

在这里插入图片描述
在这里插入图片描述

  • 限制:视图修改需满足基表约束,且WHERE子句需包含关键列以定位唯一行。
5. 检查选项(WITH CHECK OPTION)
CREATE VIEW V6_057 AS
SELECT s.sno, sname, c.cno, cname, degree
FROM student057 s
JOIN score057 sc ON sc.sno = s.sno
JOIN course057 c ON c.cno = sc.cno
WHERE degree > 80
WITH CHECK OPTION;-- 尝试将成绩改为75(违反条件,操作失败)
UPDATE V6_057 SET degree -= 5 WHERE sno = '101' AND cno = '4-101';

在这里插入图片描述

  • 作用:确保通过视图插入/更新的数据满足WHERE条件,防止无效数据进入。

(二)索引的创建与操作

1. 简单索引(提升查询速度)
-- 创建姓名索引
CREATE INDEX sname_ind ON student057(sname);-- 插入测试数据(索引自动维护)
INSERT INTO student057 VALUES('110', '曾华庆', '男', '1999-09-01', '95033');

在这里插入图片描述

  • 适用场景:频繁查询的非主键列,如按姓名检索学生。
2. 唯一索引(确保数据唯一性)
CREATE UNIQUE INDEX sname_UNI_ind ON student057(sname);-- 插入重复姓名会报错
INSERT INTO student057 VALUES('110', '曾华庆', '男', '1999-09-01', '95033');

在这里插入图片描述

  • 注意:唯一索引允许NULL,但多个NULL视为重复(除聚集索引外)。
3. 唯一聚集索引(改变数据物理存储顺序)
CREATE UNIQUE CLUSTERED INDEX sno_cl_ind ON student057(sno);
  • 特性:一个表最多一个聚集索引,数据按索引列顺序存储,提升范围查询效率。
4. 组合索引(多列联合索引)
-- 按班级和生日创建组合索引
CREATE INDEX class_birth_ind ON student057(class, sbirthday);-- 索引顺序影响查询效率(左前缀匹配原则)
-- 有效查询:WHERE class='95031' 或 WHERE class='95031' AND sbirthday<'2000-01-01'
-- 无效查询:仅按sbirthday查询
  • 最佳实践:将高频查询的列放在索引前列。
5. 视图索引(提升视图查询性能)
-- 先创建绑定架构的视图
CREATE VIEW V13_057 WITH SCHEMABINDING AS
SELECT s.sno, sname, CLASS, sbirthday
FROM dbo.student057 s;-- 创建视图索引(需先有唯一聚集索引)
CREATE UNIQUE CLUSTERED INDEX sno_clu_ind ON V13_057(sno);

在这里插入图片描述

  • 前提:视图必须使用SCHEMABINDING绑定架构,且索引需从唯一聚集索引开始。

三、设计性实验:综合应用与场景实践

(一)复杂视图设计

1. 创建多列视图V_A
CREATE VIEW V_A_057 AS
SELECT s.sno 学号, sname 姓名, ssex 性别, c.cno 课程号, cname 课程名, degree 成绩
FROM student057 s
JOIN score057 sc ON s.sno = sc.sno
JOIN course057 c ON sc.cno = c.cno;-- 批量修改数据
UPDATE V_A_057 SET 姓名 = '陆君茹1', 性别 = '女'
WHERE 学号 = '103' AND 课程号 = '3-105';

在这里插入图片描述

  • 注意:修改涉及基表的多个字段,需确保视图可更新(无聚合函数、JOIN操作限制)。
--一个语句把学号101 课程号4-101  的姓名改为李君帅1,课程名为[马克思主义基本原理]概论]?如何才能完成修改
CREATE TRIGGER trg_update_V_A_057
ON V_A_057
INSTEAD OF UPDATE
AS
BEGIN-- 更新学生表姓名UPDATE student057SET sname = i.姓名FROM inserted iWHERE student057.sno = i.学号;-- 更新课程表课程名UPDATE course057SET cname = i.课程名FROM inserted iWHERE course057.cno = i.课程号;
END;
GO-- 执行单个 UPDATE 语句(现在可以同时修改两个基表)
UPDATE V_A_057
SET 姓名 = '李君帅1', 课程名 = '[马克思主义基本原理]概论]'
WHERE 学号 = '101' AND 课程号 = '4-101';

在这里插入图片描述

2. 加密优秀学生视图V_B
CREATE VIEW V_B_057 WITH ENCRYPTION AS
SELECT sname 姓名, cname 课程名, degree 成绩
FROM student057 s
JOIN score057 sc ON s.sno = sc.sno
JOIN course057 c ON sc.cno = c.cno
WHERE degree >= 80;
  • 验证加密:通过系统视图查询时,视图定义显示为乱码或不可见。
3. 带检查选项的视图V_C
CREATE VIEW V_C_057 AS
SELECT sname 姓名, cname 课程名, degree 成绩
FROM student057 s
JOIN score057 sc ON s.sno = sc.sno
JOIN course057 c ON sc.cno = c.cno
WHERE degree >= 80
WITH CHECK OPTION;-- 修改成绩为78时失败(违反CHECK OPTION)
UPDATE V_C_057 SET degree = 78 WHERE 姓名 = '王丽娜' AND 课程名 = '计算机导论';

(二)索引

1. 教师表唯一性索引
-- 正确表名:teacher057
CREATE UNIQUE INDEX teacher_name_uni_057 ON teacher057(tname);
  • 作用:防止教师表中出现重复姓名。
2. 课程表聚集索引
-- 正确表名:course057
CREATE CLUSTERED INDEX course_name_clu_057 ON course057(cname);
  • 效果:课程表数据按课程名排序存储,提升课程名相关查询效率。
3. 索引视图V_D
CREATE VIEW V_D_057 WITH SCHEMABINDING AS
SELECT s.sno 学号, sname 姓名, ssex 性别, c.cno 课程号, cname 课程名, degree 成绩
FROM dbo.student057 s
JOIN dbo.score057 sc ON s.sno = sc.sno
JOIN dbo.course057 c ON sc.cno = c.cno;-- 创建索引
CREATE UNIQUE CLUSTERED INDEX idx_d_sno ON V_D_057(学号);
CREATE INDEX idx_d_name ON V_D_057(姓名);

四、思考题解答

  1. 视图的作用

    • 简化复杂查询,封装多表关联逻辑。
    • 控制数据访问,通过视图限制用户可见列和行。
    • 数据安全,加密视图定义或通过CHECK OPTION保证数据合法性。
  2. 索引视图

    • 定义:在视图上创建索引,提升频繁查询的视图性能。
    • 创建步骤
      1. 用SCHEMABINDING选项创建视图,绑定架构。
      2. 先创建唯一聚集索引,再创建非聚集索引。
  3. 聚集索引 vs 非聚集索引

    • 聚集索引:数据按索引顺序物理存储,一个表仅有一个(如主键索引)。
    • 非聚集索引:存储索引键和数据地址,不改变数据物理顺序,可创建多个(如姓名索引)。
  4. 索引检索过程

    • 聚集索引:直接定位数据页,适合范围查询(如查询分数80-90分)。
    • 非聚集索引:先查索引页获取数据地址,再访问数据页,适合精确查询(如按学号查询)。
  5. 全文索引(选做)

    • 作用:针对文本数据(如备注、描述)的高效搜索,支持模糊匹配和分词。
    • 创建:通过CREATE FULLTEXT INDEX语句,需先启用全文搜索功能。

五、实验总结

遇到的问题

  1. 语法错误:中英文逗号混用、GO命令缺失导致批量语句执行失败。
  2. 视图可更新性:包含JOIN或聚合函数的视图无法修改数据,需确保视图基于单表或满足可更新条件。
  3. 索引冲突:创建唯一索引时未注意已有重复数据,导致创建失败。

解决方法

  • 严格检查SQL语句语法,使用SSMS的语法提示功能。
  • 查阅MSDN文档,明确视图可更新的条件(如无GROUP BY、DISTINCT等)。
  • 插入数据前先通过SELECT COUNT(*) FROM TABLE GROUP BY COLUMN HAVING COUNT(*) > 1检查重复值。

实验收获

  • 深入理解视图作为“虚拟表”的本质,掌握其在数据封装和权限控制中的应用。
  • 明确不同索引类型的适用场景,学会根据查询需求选择索引策略(如组合索引的左前缀原则)。
  • 认识到数据库对象命名规范的重要性(如实验中对象名添加学号后缀避免冲突)。

通过本次实验,不仅掌握了视图和索引的核心语法,更理解了它们在优化查询性能和保障数据安全中的实际价值。后续可进一步探索全文索引、索引维护(如重建、重组)等高级主题,提升数据库设计与优化能力。


文章转载自:

http://1wgBbnWq.bkxnp.cn
http://rANdegFB.bkxnp.cn
http://WJZ2Ksry.bkxnp.cn
http://HuYJkyCV.bkxnp.cn
http://T7xoJhS8.bkxnp.cn
http://cxz1i3wi.bkxnp.cn
http://O2yxx9Oj.bkxnp.cn
http://Ot1njMma.bkxnp.cn
http://A57lIdic.bkxnp.cn
http://Ncb4fueB.bkxnp.cn
http://E5L23Qlu.bkxnp.cn
http://fR13LbaP.bkxnp.cn
http://CkDHY1X6.bkxnp.cn
http://ABCKTUnn.bkxnp.cn
http://YqRNbQMn.bkxnp.cn
http://rjsz9zFs.bkxnp.cn
http://xlrA2AUu.bkxnp.cn
http://WJQVJDJi.bkxnp.cn
http://2CrFmjYq.bkxnp.cn
http://cbFRHq0t.bkxnp.cn
http://LugPb1ix.bkxnp.cn
http://JdjMo5XM.bkxnp.cn
http://03ZzKKWk.bkxnp.cn
http://KfKQt4bP.bkxnp.cn
http://nMUKJJt9.bkxnp.cn
http://SwTo4qL6.bkxnp.cn
http://oz4WUesA.bkxnp.cn
http://qhLaw9w6.bkxnp.cn
http://khsj5RLx.bkxnp.cn
http://T5Kir79o.bkxnp.cn
http://www.dtcms.com/wzjs/627477.html

相关文章:

  • 网站正在建设中英文表述wordpress4.9.4漏洞
  • 建站公司推广wordpress自动添加动态内容
  • 奉贤做网站建设wordpress微商货源网
  • 建俄语网站谷歌广告代理
  • 餐饮品牌设计制作泰州seo推广
  • 精准网站seo诊断报告苏州园区网站建设公司
  • 网站大数据怎么做的怎样成为网络营销的主管
  • 西樵网站制作教育机构招聘
  • 做团购网站多少钱今科云平台网站建设
  • wordpress建立移动站企业网站用视频做首页
  • 建设网站需要电脑配置自创品牌策划方案范文
  • 南通专业企业门户网站设计最好使用中文目录
  • 网站建设的实习报告天元建设集团有限公司是上市公司
  • 毕设 网站开发的必要性建设营销型网站的步骤
  • 做搜狗手机网站长尾极简wordpress模板
  • 优秀的个人网站案例分析怎么建立一个好公司网站
  • 儿童网站开发wordpress网站代码
  • 网站开发需求统计Wordpress怎么添加购买页面
  • 做网站多少钱西宁君博示范网站跳出率怎么算
  • 网站诚信认证怎么做网站建设公司的职责
  • 辽宁城乡建设部网站公众号怎么建立
  • php企业网站源码蓝色做网站空间放哪些文件夹
  • 网站开发模块的需求分析大良网站智能推广价格
  • 网站建设行业企业排名论坛程序做导航网站
  • 福建建设注册中心网站广州软件开发外包公司
  • 个人网站后期怎么做企业企查查官网查企业网页版
  • 爱做网站外国百搜科技
  • 自己做的音乐网站侵权问题长沙网站优化价格
  • 做网站到底要不要备案wordpress主题模板制作教程
  • WordPress网站关闭插件网站设计建设维护