Luckyxyz
首页
归档
关于
友链
切换模式
返回顶部
首页
技术实践
书斋絮语
说点儿什么
Luckyxyz
首页
技术实践
书斋絮语
说点儿什么
首页
归档
关于
友链
【软考】并交差运算查询、SQL 访问控制、视图、索引、函数计算、属性闭包计算
技术实践
·
今天
Luckyxyz
查询结果的并、交、差运算 将两个 SELECT 查询语句的结果进行运算: - UNION:并 - INTERSECT:交 - EXCEPT:差:从一个记录里删除属于另一个记录的元组 求并集:  --- SQL 访问控制 数据控制 控制的是 用户对数据的存储权力(查询、添加、修改权限),是有 DBA 决定的。 但是,某个用户对某类数据具有何种权利,是个政策问题而不是技术问题。(安全性问题) DBMS 的功能:保证这些决定的执行,所以 DBMS 具有以下功能: - 通过 GRANT(授权) 和 REVOKE(回收权限) 将授权通知系统,并 存入数据字典 - 当用户提出请求时,根据授权情况检查是否执行操作请求 SQL 标准包括:DELETE、INSERT、SELECT 和 UPDATE 权限,SELECT 权限对应于 READ 权限, SQL 还包括:REFERENCE 权限,用来限制用户在创建关系时定义外码的能力 授权的语句格式: ```sql GRANT <权限> [,<权限>]...[ON <对象类型> <对象名>] TO <用户> [,<用户>]...[WITH GRANT OPTION]; -- 中括号中的表示可选,就是 如果有多个权限或者多个用户,就可以往下写,意味着可以授权多个权限; -- ON 后的对象类型一般是:TABLE,对象名:一般是表的名字 -- WITH GRANT OPTION ```   ```sql GRANT ALL PRIVILEGES ON TABLE S,P,J TO User1, User2; GRANT INSERT ON TABLE S TO User1 WITH GRANT OPTION -- WITH GRANT OPTION:获得了权限的用户,可以将权限赋给其他用户 GRANT CREATAB ON DATABASE SPJ TO User1; ```  ```sql REVOKE <权限> [,<权限>]...[ON <对象类型> <对象名>] FROM <用户>[,<用户>]... ``` ```sql REVOKE ALL PRIVILEGES ON TABLE S,P,J FROM User1, User2; REVOKE SELECT ON TABLE S FROM PUBLIC; -- PUBLIC 将权限赋给全体用户,就是把全体用户的查询权限都收回 REVOKE UPDATE(Sno) ON TABLE S FROM User1; -- 括号里的是具体的哪一列 ``` --- 视图 视图是一个虚拟表 视图的创建: ```sql CREATE VIEW 视图名(列表名) AS SELECT 查询子句 -- 视图的数据来自于 SELECT 的查询数据结果 [WITH CHECK OPTION] -- 条件约束 ```  WITH CHECK OPTION:表示对 UPDATE、INSERT、DELETE 操作时 保证更新、插入、删除的行,满足视图定义中的谓词条件(子查询中的条件表达式) 表示:之后不管对这个视图进行插入、修改,都要保证系别是计算机系 所以之后再对该视图进行修改、插入操作的时候,DBMS 会自动加上 SD='CS' 的条件,保证该视图中只有计算机系的学生 对视图的操作,其实是对 视图对应的基本表 的操作  --- 索引 索引可以指向具体的数据 索引是某个表中一列或者若干列值的集合 和 相应的指向表中物理标识这些值的数据页的 **逻辑指针** 清单。 INDEX    索引:改变的是内模式,也就是存储文件 的组织方式 --- 关系模式  R
- R:关系名,是符号化的元组语义 - U:一组属性,比如学生的 学号、姓名、性别、等等 - 属性组 U 中的属性来自 域 D - dom:属性到域的映射 - F:属性组 U 上的一组 **数据依赖** 或 **函数依赖** 一般都把关系模式看作是一个三元组:R
 函数依赖: A --> B:A 决定 B、B 依赖于 A 比如上面例子: - 学号 --> 姓名:学号决定姓名,对于学生来说,学号是唯一的,姓名可能会重复 - 课程号 --> 课程名:课程号决定课程名,在学校来说,课程号也是唯一的,课程名可能会重复 - (学号, 课程号) --> 成绩:学号和课程号共同决定 成绩 因为单独看学号,不能唯一决定成绩,因为有可能一个学号对应的这个学生选了很多门课,课程号也不能唯一决定成绩,因为一门课有多个学生的成绩 --- 关系数据库的规范化 函数依赖  函数依赖:X --> Y,X 函数决定 Y 或 Y 函数依赖于 X A 包含于 B:A $\subset$ B ⊂ A 包含 B:A $\supset$ B A 是 B 的子集/包含于 或 等于:A $\subseteq$ B A 不包含 B :A $\not\subset$ B A 属于 B:A $\in$ B ,A ∈ B A 不属于 B:A $\notin$ B,A ∉ B 真子集 / 真包含于:A $\subsetneq$ B ⫋  举例:   --- 非平凡的函数依赖: 如果 X-->Y 但 Y $\not\subset$ X,(X 决定 Y,但 Y 不包含于 X)那么 X --> Y 是 非平凡的函数依赖。 比如 学号 --> 姓名,学号决定姓名,姓名依赖于学号,因为学号不包含于姓名,所以 学号 --> 姓名 是 非平凡函数依赖 --- 平凡函数依赖: 如果 X--> Y,但 Y ⊆ X,那么 X --> Y 是 平凡函数依赖 比如 学号 --> 学号,自己决定自己 --- 完全依赖函数: 在 R(U) 中,如果 X--> Y,并且对于 X 的任何一个真子集 X' 都有 X' 不能决定 Y,那么 Y 对 X 完全依赖,记作 $X \xrightarrow{f} Y$  如果 X 决定 Y,对于 X 的任何真子集(学号 或者 课程号) 都有 X’ (学号 或者 课程号)不能决定 Y (成绩), 因为 学号不能决定成绩,课程号也不能决定成绩。所以 成绩完全依赖于 X --- 部分依赖函数: 如果 X-->Y 但 Y 不完全函数依赖于 X,则称 Y 对 X 部分函数依赖,记作 $X \xrightarrow{P} Y$  例子, (学号,课程号)--> 姓名 在这里例子中,学号可以单独决定姓名,也就是说姓名是依赖于学号,直接通过学号决定姓名。也就是在这个例子中,Y 只依赖于 X 的某一个真子集 X'(学号) --- 传递依赖 在 R(U, F) 中,如果 X --> Y,Y $\subsetneq$ X,Y --> Z,则 Z 对 X 传递依赖 (X 决定 Y,Y 不包含于 X,Y 决定 Z) 员工号 --> 岗位,岗位 不包含于 员工号,岗位 --> 工资,那么 工资 对 员工号 传递依赖 --- 码: 设 K 为 R(U, F) 中属性的组合,若 K --> U,且对于 K 的任何一个真子集 K' 都有 K' 不能决定 U,则 K 为 R 的候选码。若有多个 候选码,则选一个作为 主码,候选码通常也被称为 候选关键字 --- 主属性、非主属性 包含在任何一个候选码中的属性:主属性 --- 外码: 如果 R(U) 中的属性或属性组 X 非 R 的码,但 X 是另一个关系的码,则 X 为 外码 全码: 全部 U 都是码 超码: 属性组中包含码,都是超码 --- 公理系统 设 关系模式 R(U, F),其中 U 为 属性集,F 是 U 上的一组函数依赖,那么有以下推理规则: A1 自反律:若 Y $\subseteq$ X $\subseteq$ U,则 X-->Y 为 F 所蕴涵(所蕴涵:F 包含 X-->Y) A2 推广律:若 X-->Y 为 F 所蕴涵,且 Z $\subseteq$ U,则 XZ-->YZ 为 F 所蕴涵 A3 传递律:若 X-->Y,Y-->Z 为 F 所蕴涵,则 X-->Z 为 F 所蕴涵 合并规则:若 X-->Y,X-->Z,则 X-->YZ 为 F 所蕴涵 伪传递律:若 X-->Y,WY-->Z,则 XW-->Z 为 F 所蕴涵 分解规则:若 X-->Y,Z $\subseteq$ Y,则 X-->Z 为 F 所蕴涵 --- 属性闭包计算  求 主键 对 A 求闭包: 看 A 是否可以决定一些新的属性 (A)$^+$ -->(ABH) 如果这一次求闭包结果左右两边不一样,ABH 和 A 是不一样的,就继续求闭包 (ABH)$^+$ -->(ABDH) 结果左右不一样,继续求闭包 (ABDH)$^+$-->(ABDH) 结果左右一样,就要停止求闭包了 所以属性 A 的闭包是 ABDH,但不等于属性集 U,所以 A 不是主键 (AC)$^+$-->(ABHCE)$^+$-->(ABDHCE)$^+$-->(ABDHCE) = U 如何选关键字? 主要看函数依赖, X-->Y,X 可以马上可以把 Y 加到闭包结果中,但 Y 不一定能决定 X。所以一般不要挑选箭头右边的,要挑选箭头左边的 所有函数依赖中的右侧,都是被决定列,也就是 ?--> BDHE,即,那么就是说 A 和 C 都不能被其他属性决定,就意味着,如果选择 BDHE 中的某个属性或某个组合做主键,那么无论如何组合都不能决定出 AC 所以主键中肯定要有 AC,就是包含 AC 然后再去试
软考
取消回复
提交评论
Luckyxyz
我们谈论生活,讨论技术,借由文字,抵达心灵。
热门文章
Obsidian 迁移全记录(又名:纯小白的闭坑指南)
【Kubernetes】第一个实例 - Java Web 应用
新年新气象,关于年终总结,关于未来展望
使用宝塔面板对网站、数据库等进行定时备份到腾讯云 COS 对象存储
2025 年
在细雨中呼喊,在困顿中挣扎
Ubuntu 22.04 server 安装教程
最新评论
山佳Ellen: 有独到的见地,有个性的思想,精彩!
t: 2026 扬帆起航, 喜迎新年,万象更新, 时间旅行,人间探索,...
tls: 赞一个
lovingchina: 我也准备从Joplin迁移到Obsidian,刚好参考你这一篇哈...
tl.s: 很棒的一本书,可以解答很多人们关于人工智能的疑惑。或许未来怎样谁...
tl.s: 很实用 🦆🦆
tl.s: 绘图很清晰,图示质量很高
热门标签
Kubernetes
软考
读书笔记
Linux
Ubuntu
生活随笔
生活
2025
Python3
Debian
Ansible
空间智能
openFuyao
技术实践
在细雨中呼喊
粤ICP备2024349207号