本文共 2236 字,大约阅读时间需要 7 分钟。
(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出来,这时候列存储数据库的优势就体现出来了。函数依赖是多值依赖的特殊情况
设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为非平凡的多值依赖。 例子: 关系模式(科目,教师,参考书),码是(科目,教师,参考书),如果学校不打算再配备某本参考书,则必须删除多个元组 在这个关系模式中教师多值依赖于科目,参考书多值依赖于科目 (科目,参考书)和教师一对多,但是教师和参考书没直接关系 (科目,教师)和参考书一对多,但是参考书和教师没直接关系多值依赖是连接依赖的特殊情况
设关系模式R、Ri的属性集是U、Ui,UiU(1≤i≤n). 若R每个容许的实例r均满足r=∏U1®∞…∞∏Un® 则称R满足连接依赖,记作∞(R1,…,Rn). 若其中某个Ui=U,则称连接依赖是平凡连接依赖。是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性
如果主码是由两个及以上的属性组成,其他所有属性必须完全依赖于主码
举例子:
(学生,教师,课程),其中每个教师只教一门课 候选码:(学生,课程),(学生,教师),选定其中一个作为主码 但是教师能够决定课程(课程也能决定教师),主属性对码存在部分函数依赖 虽然,不满足BCNF,也会导致一些冗余和一致性的问题。但是,将表分解成满足BCNF的表又可能丢失一些函数依赖。所以,一般情况下不会强制要求关系表要满足BCNF例子:
关系模式(科目,学号,参考书),码是(科目,学号,参考书) 可以拆成(科目,参考书),(科目,学号)两个关系模式【如果不拆,很容易想到学校换一门参考书得修改很多元组】缺乏合理的论证,在研究阶段
(没有论证,只是提出概念)
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 数据库系统概论(第五版)