面试中的数据库基本知识(理论范式)

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
数据库系统概论(第五版)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值