Part1-Course Intro & Relation Model
CMU15-445/645
Organized collection of inter-related data that models some aspect of the real-world.
例子
有如下实体集,artist和album
在存储的时候
-
如何保证
-
What if somebody overwrites the album year with an invalid string?
-
How do we store that there are multiple artists on an album?
在查询数据的时候
- 如何找到特定记录?数据量很大的时候
- What if two threads try to write to the same file at the same time? 事务
DURABILITY,安全
- What if the machine crashes while our program is updating a record? 如何在不同的机子上备份 或者 分布式存储
- What if we want to replicate the database on multiple machines for high availability
A DBMS is software that allows applications to store and analyze information in a database.
DBMS是一个允许应用存储或者分析信息的软件
History
Early DBMSs
革命性的paper
《A Relation Model of Data for Large Shared Data Banks》
关系模型三要素
表和表之间建立关系
- 将关系转化为简单的数据结构然后存入数据库;store database in simple data structures
- Access data through high-level language 通过高级语言获取数据,或者说提供API to APP?
- Physical storage left up to implementation 物理存储,物理层和逻辑层独立 分开的?
Data Models
数据模型:本质是说如何组织数据
关系型数据库:PG、Oracle、DB2、SQL server,SQLite
NoSQL: KV 图 docu 列簇
MultiValue数据模型:
- hierachical:层次数据模型
- Nerwork:网络数据模型
关系模型三部分
- 关系结构 Structure
- Integrity:数据的完整性约束
- Maipulation:操作,如何获取修改数据库的内容
例子
关系只是一组无序的元素或者记录,这些元素或者记录的属性用来表示关系中的实体的实例。
使用tuple来记录一条数据,所有值都得原子性:不能是数组或者嵌套对象。上面是刚提出RM的时候,现在可以在关系型数据库存JSON对象、数组。
特殊值NULL。
realtion = table
tuple is 记录
Primary Key
主键:如果某一个唯一的属性或者属性组能够唯一标识一条记录,称为主键。通过逻辑层暴露的一个代理键
Foreign Key
外键用于指定一张表里面的属性必须存在于另外一张表中
外键约束的例子:
改进之后
DML
Data Manipulation Languages
如何从DB中存取信息
DML是一种操作数据的方式通过它可以用来访问或者修改数据库来生成想要的result
- procedural 程序:指定高级策略让数据系统帮忙找结果
- 非程序性的、声明式的:
一种是关系代数、一种是关系演算。
关系代数和关系演算的区别?
Answer:
果
2. 非程序性的、声明式的:
[外链图片转存中…(img-szoawlJy-1660151001038)]
一种是关系代数、一种是关系演算。
关系代数和关系演算的区别?
Answer:
关系代数
七种基本运算符
选择、投影、并、交、差、乘、连接
select,projection,union,intersection,difference,product,join
输入关系,输出新关系。
Select
Projection
投影运算。
Union
并运算,将两个关系组合生成一个新的关系。
简单的合并就行。级联输出。
必须俩关系相同的关系模式。
SQL:Union ALL
Intersection
交,得到都在两个关系里面出现的tuple
SQL: 有intersect 关键词
Difference
R-S:只取出来第一个关系出现的元素,而不是第二个关系里面的。就是找第一个关系中不在第二个关系的元组。
sql:except
Product
R x S 笛卡尔积 sql:cross join
Join
特别指自然连接natural join
查询优化
先投影后连接效率更高
但是不能依靠写SQL的人去人工优化