1,数据库平台(Database)
数据库管理系统(DataBase- Management System,DBMS) :是系统软件,是数据库系统的核心。
数据库有两种类型,分别是 关系型数据库 和 非关系型数据库(NoSQL(Not Only SQL ))。
1)postgres
按行存储,有行锁。
2)mysql
3)Access
4)sql server
5)sqlite
6)neo4j
非关系数据库。图数据库。
7)NebulaGraph
8)clickHouse
9)hive
10)Elasticsearch原理
11)Oracle
12)KunDB
星环科技出品的国产分布式关系数据库。
13)ArgoDB
星环科技出品,基于多模型统一架构,支持关系型、宽表、时序、地理空间、搜索、图、向量等 11 种主流数据模型。一个平台即可满足 OLAP、AETP、多模型融合分析、联邦计算、数据仓库、实时数据仓库以及湖仓一体等多种场景需求。
2,概念
1)数据库
数据库是长期存储在计算机内(永久存储)、有组织的、可共享的大量数据的集合。
数据库中存储的是数据及数据之间的关系。
- 正常情况读写文件系统比数据库快一到两个数据级;
- 数据库的优势是体现的大量数据的查询、统计以及并发读写,不是在速度上。
- 数据的最小存取单位是数据项。
2)数据库模式定义语言DDL(Data Definition Language):
是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。
3)关系完整性
1>实体完整性(主键不为NULL)
所谓的实体完整性就是指关系(所谓的关系就是表)的主码不能取空值;
比如学生表的主码通常是取学号为主码
2>参照完整性(外键不为NULL)
是指参照关系中每个元素的外码要么为空(NULL),要么等于被参照关系中某个元素的主码;
参照关系也称为外键表,被参照关系也称为主键表。
3>用户定义的完整性(属性约束)
属性的范围约束;
唯一性约束;
4)关系运算
- 集合运算符
- 关系运算符
- 算术比较符
- 逻辑运算符
非与或
集合运算符 | 备注 |
---|---|
并(∪) | |
差(-) | |
交(∩) | |
笛卡尔积(×) | A={a,b}, B={0,1,2},A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)} |
关系运算符 | 说明 |
---|---|
选择(限制、σ) | 在关系R中选择满足给定条件的诸元组。 |
投影(π) | 关系R上的投影是从R中选择出若干属性列组成新的关系。 投影之后可既改变行,又改变元组的数量。 |
连接(θ连接、⋈) | 从两个关系的笛卡尔积中选取属性间满足一定条件的元组。(连接由乘积(笛卡尔积)、选择、投影组成) |
除运算(➗) | RS÷S表示:“在R和S的联系RS中,找出与S中所有的元组有关系的R元组”。 |
5)依赖
依赖类型 | 定义 | 举例 |
---|---|---|
部分函数依赖 | 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。 | AB->C,A->C ==》C部分依赖于AB。 |
完全函数依赖 | 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。 | AB->C,但是AB单独得不出C ==》C完全依赖于AB. |
传递函数依赖 | 设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。 | A->B,B->C且这个推导不可逆,那么成C传递依赖于A |
多值依赖 | 设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。 | 有这样一个关系 <仓库管理员,仓库号,库存产品号> ,假设一个产品只能放到一个仓库中,但是一个仓库可以有若干管理员,那么对应于一个 <仓库管理员,库存产品号>有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。 |
6)范式
各个范式联系:
5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
范式 | 满足最低要求 | 定义 |
---|---|---|
1NF | 字段不可再分,原子性 | 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF |
2NF | 消除部分子函数依赖:一个表只能说明一个事物; 即要求数据库表中的每个实例或行必须可以被唯一地区分。 |
若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。 |
3NF | 消除传递依赖,即消除非主属性对键的传递依赖:每列都与主键有直接关系,不存在传递依赖。任何非主属性不依赖于其它非主属性。 | 若R∈3NF,则每一个非主属性既不部分依赖于码,也不传递依赖于码。 |
BCNF(修正第三范式、扩充第三范式 消除主属性对键的传递依赖) | 所有非主属性对每一个码都是完全函数依赖; 所有主属性对每一个不包含它的码,也是完全函数依赖; 没有任何属性完全函数依赖于非码的任何一组属性。 |
|
4NF | 关系模式R<U,F>∈1NF ,如果对于R的每个非平凡多值依赖X->->Y(Y∉X ),X都含有码,则称R<U,F>∈4NF |
3,行存储和列存储对比
1)行存储(Row-Based)
- 传统关系数据库按行存储。
- 行按顺序写入磁盘。
- 查询时容易产生冗余数据,大数据情况下影响数据处理效率。
- 举例:
MongoDB是文档型的行存储;
Lexst是二进制型的行存储。
2)列存储(Column-Based)
- 按列存储,由于每一列的类型一样且value也可能一样,极大的增加压缩比,每次io数据量更大,从而提高检索统计性能。
- 每一列由一个线程来处理,即查询的并发处理性能高。
- 列族(column group,Bigtable系统中称为locality group):即将多个经常一起访问的数据列的各个值存放在一起。如果读取的数据列属于相同的列族,列式数据库可以从相同的地方一次性读取多个数据列的值,避免了多个数据列的合并。列族是一种行列混合存储模式,这种模式是行存储与列存储的结合。
- 举例:Hadoop的HBase、
3)对比
1>数据写入:推荐行存储
- 行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。
- 列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多(意味着磁头调度次数多,而磁头调度是需要时间的,一般在1ms~10ms),再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。
- 数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。
2>数据读取:推荐列存储
- 数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。
- 列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题。极大的减少缓冲池使用率,减少I/O。
- 两种存储的数据分布。
由于列存储每一列类型一致,数据解析比较简单。
相比之下,行存储时每一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。 - 列存储更容易压缩,极大的缩小了磁盘读取时间、网络传输时间。
4)场景
-
OLTP(Online transaction processing,在线/联机事务处理):==》主要是对数据库中的数据进行增删改查,适合行存储。
操作主体一般是产品的用户。 -
OLAP(Online analytical processing,联机分析处理,数据仓库):==》查询统计,适合列存储。
通过分析数据库中的数据来得出一些结论性的东西。比如给老总们看的报表,用于进行市场开拓的用户行为统计,不同维度的汇总分析结果等等。操作主体一般是运营、销售和市场等团队人员。
4,数据库语句
SQL 语言是非过程化的语言,易学习。
1)三级模式结构
三级模式结构:外模式、模式和内模式。
三级模式结构有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性 ==》使数据库达到了数据独立性。
1>模式(schema,逻辑模式)
a)概念
一个数据库只有一个模式。区分不同数据库下的相同表名(相当于编程时的命名空间)。
举例:
一个公司的系统,分2个子系统,分别为财务系统和人力资源系统.
这2个子系统, 共用一个数据库。
那么 财务系统的表, 可以放在财务的模式(schema).
人力资源系统的表,放在人力资源系统的模式里面。
这2个子系统,能够互相访问对方的表。
但是又不因为 表重名 的问题,影响对方。
2>外模式(子模式,用户模式)
外模式通常是模式的子集,一个数据库可以有多个外模式,但一个应用程序只能有一个外模式。
外模式是保证数据库安全性的一个有力措施:用户只能访问外模式的数据,其余数据不可见。
3>内模式(存储模式)
一个数据库只有一个内模式。
内模式是数据物理结构和存储方式的描述ÿ