首页 cmu 15-445

如何用非数据库存数据:

记事本逗号分隔数据

如何查询?

for遍历行{
    每一行变成字符串
    逗号分隔
}

这样只能做最简单的查询,其他的操作都不支持

早期的数据库就是这样的,如果你想对其进行操作,需要对其底层高度了解,但是现在操作直接打代码就行

这就是逻辑与物理层高度耦合

codd改变了一切,创造了relational model关系型数据库

在简单的数据结构中,用高级的数据库语言,

不要告诉数据库具体怎么做,告诉他要做什么就好了

物理层逻辑不要让用户考虑,要开发者考虑这件事情

data model数据模型

DBMS:
Relational
NoSQL:
Key/Value
Graph
Document
Column-family
machine learning:
Array / Matrix
bosolete/legacy/rare:
Hierarchical
Network
Multi-Value

三个东西:

structure,定义数据内容与关系的

integrity,保证数据的内容有一定的约束

manipulation,向上提供编程接口的

在关系型数据库中,表的本质就是关系relation,

tuple一组字段就是一行

一般数据库中的值是原子和标量的atomic&scalar

NULL这个值可以出现在任何地方

n-ary relation意思就是这个表有n个字段(列)

primary keys 主键

主键是可以唯一确定一条数据的

一般没有确认主键的数据库都会自创一列来作为主键

当然不同的数据库设置主键的方式是不同的,有按列名的,还有自增的

foreign keys外键

就是一个表中的某一列(字段)是另一列(字段)的属性

这种关联属性就是外键

如果是多对多的话,如果不想让两个列直接产生关系,可以再做一个表来存关系,当然如果用中间表的话就不用外键了

DML(data manipulation languages)数据操作语言

对数据进行修改的语言例如存取

procedural说明了数据的来源和使用,relational algebra

Non-Procedural不告诉你怎么搞,就像要结果,relational calculus

relational algebra关系型代数,输入输出都是数据表

image-20211230215639458.png

image-20211230215810609.png

select,选择,R是表名,predicate是条件,谓词

image-20211230220040629

projection,投影,R是表名,a1,a2,an是选择第一行是a1,a2,a3的新表,其中an可以为表达式

image-20211230220234337.png

union查询,将两个结果变成一张表,简单的拼接

image-20211230220320775.png

intersection取交集

image-20211230220355925.png

difference取补集

image-20211230220412246.png

product笛卡尔积

image-20211230220515939.png

join

image-20211230220631181.png

image-20211230220708019.png

relational algebra仍然带有数据库怎么执行的信息,就是如果想得到同样的信息,可以选择不同的执行方式执行,就是这个带有了如何执行的信息

sql就是比这些更高级的语言,而且是一种类似标准的存在,就告诉数据库想要知道什么答案,但不告诉你怎么获得

总结

数据库无处不在

relational algebra定义了数据如何处理数据,但是问题是定义的时候告诉了数据库具体的执行方式,但是数据库更加高级,会自动选择更好的方式执行,但是这个数据处理表达方式是存在的




文章评论