跳转至

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

用于控制返回的行数

select * from student limit 5;
==
select * from student 0, 5; /* offset, row_count*/
  • not exist的一个例子

Intermediate SQL

  • 连接表达式

连接条件之前的表达式中这样写:

select *
from a, b
where a.id = b.id

现在可以采用join using来写:

select *
from a join b using (id)
以及:join on

from a join b on a.id = b.id

虽然看上去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相比可以添加约束,比如:

create domain dollars as numeric(12, 2) check (value >= 0);
  • Large Objects Types

图像、视频等大体积文件被存储为大对象类型

  • Authorization

角色是权限的集合

Superior SQL

留言

欢迎在下方交流~