Database System¶
约 940 个字 14 行代码 16 张图片 预计阅读时间 3 分钟
摘要
这是我在学习数据库系统时的memo,我不会系统的整理整个课程的笔记,但是会写下一些备忘和例子方便复习时使用
Relational Model¶
- 关系的定义最基本是集合,集合是没有重复元素的

mutiset 是允许重复元素的
-
Union 中要求:
- 两个集合的arity相同(same number of attributes)
- attribute domains 是要compatible的,不是说完全相同,但是要类似
-
Rename:
重命名中的E不一定是关系,也可以是表达式
-
Natural Join:
没有增加表达能力但是简化了操作,可以用基本操作代替:
- 笛卡尔积
- 选择共同属性相同的部分
- 投影
还有一种left outer join \(\mathbin{⟕}\),是笛卡尔积后选择,如果属性不同,就用null来填充
同理还有right outer join \(\mathbin{⟖}\),left outer join的镜像,以及full outer join \(\mathbin{⟗}\),两个的并集:
-
Semijoin:
用符号\(\ltimes\)表示,是natural join的子集,只保留natural join后左边关系中的属性,同理也有\(\rtimes\),是right semijoin,保留右边关系中的属性:
-
Division:
用符号\(\div\)表示,对\(r \div s\),要求:
- \(s\)是\(r\)的子集
- \(s\)的属性是\(r\)属性的子集
结果是包含\(s\)属性的对应\(r\)的元组:
用处:
-
Multiset:
多重集,允许重复元素(去除重复元素代价很大)这样就支持SQL中操作
Intro to SQL¶
-
interval:period of time
- 用两个时间做差
-
create table 来个例子:

create table只是在定义一个schema,需要在后续的如insert操作中创建instance
- Integrity Constrains

- foreign key
对于foreign key,要求在主键中存在,或者为null,但是如果一个操作导致foreign key指向的对象被删除,会有以下可选项:
- on delete cascade: 级联删除,将有关的全部删除(系没了学生也删掉)
- on delete set null: 设置为null(系没了学生还在但不知道系名)
- on delete restrict: 拒绝删除(系里有学生,系就不能删)
- on delete set default: 设置为默认值(系没了,学生还在,设置到默认的系中)
同样对于update,也就是被引用的对象的更新,也有on update+四个一样的选项,只是这里的级联是更新所有引用者的值
- alter table
支持动态更改表的定义
- group by

- natural join
简化操作

- 通配符

中文字符占位是两个字节,有可能出现前后两个字中间的部分被截断匹配的情况,因此中文建议完全匹配或者用 _ _ 来表示一个汉字
- limit
用于控制返回的行数
- not exist的一个例子

Intermediate SQL¶
- 连接表达式
连接条件之前的表达式中这样写:
现在可以采用join using
来写:
join on
虽然看上去on的作用可以被using和where代替,但是在使用outer join时,on可以起到作用
- 使用outer join的一个例子:

通过outer join解决:保留左边关系中的没有课程的学生的ID,其余信息null

如果使用的是where:

也就是说outer join只是对结果关系进行的补充,而不是对参与连接的关系进行补充,因此在使用where(作用对象就是参与连接的关系)时,上述例子会出现根本找不到Snow这个学生的ID,where就会过滤掉Snow的信息
连接类型可以和连接条件组合使用:

-
事务 trasaction
-
完整性约束
-
用户定义类型
create type dollars as numeric(12, 2) final; /*final 表示是最小的类型,不能被继承*/
create table sales (
id integer,
amount dollars
);
- Domain 类型定义
domains与type相比可以添加约束,比如:
- Large Objects Types
图像、视频等大体积文件被存储为大对象类型
- Authorization
角色是权限的集合
Superior SQL¶
留言