1.关系型数据库和非关系型数据库
(1)常见关系型数据库(采用了关系模式来组织的数据库)
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
(2)常见非关系型数据库(针对某些特定的需求而出现)
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合
例如:
文档型数据库:mongoDB
Key-Value型数据库:Redis
列存储数据库:HBase
图形数据库:Neo4j
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
一个(研究生复试)面试题:
行存储数据库和列存储数据库有什么区别?
我当时回答的是:行数据库用行存储…
老师接了一句:列数据库按列存储
我又说了一句:拿Hbase来说,它不支持Sql语法,而且存储的时候要创建列族,列族下面是各列,然后列族不能太多,不然会影响性能
老师说:你没答道我想要的结果
然后老师解释说:它们是针对不同的需求的,比如说要查李华的成绩,我只要把李华这一行select出来就可以了,但是如果要求这个班的平均成绩,我要把每个人的成绩都select出来,这时候列存储数据库的优势就体现出来了。
2.数据依赖
2.1函数依赖
- 平凡依赖 (必然成立)
- 完全依赖
关系模式(学号,姓名,科目名,成绩),主码是(学号,科目名),该考生该门课成绩依赖于主码 - 部分依赖
关系模式(学号,姓名,科目名,成绩),主码是(学号,科目名),姓名只依赖于学号(主码的一部分) - 传递依赖
2.2多值依赖(一对多+部分无关)
函数依赖是多值依赖的特殊情况
设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。
例子:
关系模式(科目,教师,参考书),码是(科目,教师,参考书),如果学校不打算再配备某本参考书,则必须删除多个元组
在这个关系模式中教师多值依赖于科目,参考书多值依赖于科目
(科目,参考书)和教师一对多,但是教师和参考书没直接关系
(科目,教师)和参考书一对多,但是参考书和教师没直接关系
2.3连接依赖(看不懂)
多值依赖是连接依赖的特殊情况
设关系模式R、Ri的属性集是U、Ui,UiU(1≤i≤n).
若R每个容许的实例r均满足r=∏U1®∞…∞∏Un®
则称R满足连接依赖,记作∞(R1,…,Rn).
若其中某个Ui=U,则称连接依赖是平凡连接依赖。
范式(高级别必须先满足低级别的条件)
第一范式(1NF) 每一列都是不可分割数据项
是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性
第二范式(2NF)不能存在部分函数依赖
如果主码是由两个及以上的属性组成,其他所有属性必须完全依赖于主码
第三范式(3NF)不能存在传递函数依赖
修正的第三范式(BCNF)每个决定因素都包含码(不能有主属性对码的函数依赖)
举例子:
(学生,教师,课程),其中每个教师只教一门课
候选码:(学生,课程),(学生,教师),选定其中一个作为主码
但是教师能够决定课程(课程也能决定教师),主属性对码存在部分函数依赖
虽然,不满足BCNF,也会导致一些冗余和一致性的问题。但是,将表分解成满足BCNF的表又可能丢失一些函数依赖。所以,一般情况下不会强制要求关系表要满足BCNF
第四范式(4NF) 消除多值依赖(不能有多对多的联系)
例子:
关系模式(科目,学号,参考书),码是(科目,学号,参考书)
可以拆成(科目,参考书),(科目,学号)两个关系模式【如果不拆,很容易想到学校换一门参考书得修改很多元组】
第五范式(5NF) 消除连接依赖
缺乏合理的论证,在研究阶段
域键范式(DKNF)
(没有论证,只是提出概念)
参考:
ttps://blog.csdn.net/aaronthon/article/details/81714528
https://blog.csdn.net/qq_38712932/article/details/83051288
https://blog.csdn.net/Candle_light/article/details/84424505
https://blog.csdn.net/qq_39521554/article/details/78974213
数据库系统概论(第五版)