精华内容
下载资源
问答
  • 关系数据库与非关系数据库的区别

    万次阅读 2018-11-01 20:50:59
    当前主流的关系数据库有Oracle、DB2、Microsoft ...1)成本:nosql数据库简单易部署,基本是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系数据库价格便宜。 2)查询速度:nosql数据库将数...

    当前主流的关系型数据库Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

    非关系型数据库有 NoSql、Cloudant。

    nosql和关系型数据库比较?
    优点:
    1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
    2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
    3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
    4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
    缺点:
    1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
    2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

    3)不提供关系型数据库对事物的处理。


    非关系型数据库的优势:1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

    关系型数据库的优势:1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。




    关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。

     

    关系型数据库的优势:

    1. 保持数据的一致性(事务处理)

    2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)

    3. 可以进行Join等复杂查询

    其中能够保持数据的一致性是关系型数据库的最大优势。

     

    关系型数据库的不足:

    不擅长的处理

    1. 大量数据的写入处理

    2. 为有数据更新的表做索引或表结构(schema)变更

    3. 字段不固定时应用

    4. 对简单查询需要快速返回结果的处理

    --大量数据的写入处理

    读写集中在一个数据库上让数据库不堪重负,大部分网站已使用主从复制技术实现读写分离,以提高读写性能和读库的可扩展性。

    所以在进行大量数据操作时,会使用数据库主从模式。数据的写入由主数据库负责,数据的读入由从数据库负责,可以比较简单地通过增加从数据库来实现规模化,但是数据的写入却完全没有简单的方法来解决规模化问题。

    第一,要想将数据的写入规模化,可以考虑把主数据库从一台增加到两台,作为互相关联复制的二元主数据库使用,确实这样可以把每台主数据库的负荷减少一半,但是更新处理会发生冲突,可能会造成数据的不一致,为了避免这样的问题,需要把对每个表的请求分别分配给合适的主数据库来处理。

    第二,可以考虑把数据库分割开来,分别放在不同的数据库服务器上,比如将不同的表放在不同的数据库服务器上,数据库分割可以减少每台数据库服务器上的数据量,以便减少硬盘IO的输入、输出处理,实现内存上的高速处理。但是由于分别存储字不同服务器上的表之间无法进行Join处理,数据库分割的时候就需要预先考虑这些问题,数据库分割之后,如果一定要进行Join处理,就必须要在程序中进行关联,这是非常困难的。

     

     

    --为有数据更新的表做索引或表结构变更

    在使用关系型数据库时,为了加快查询速度需要创建索引,为了增加必要的字段就一定要改变表结构,为了进行这些处理,需要对表进行共享锁定,这期间数据变更、更新、插入、删除等都是无法进行的。如果需要进行一些耗时操作,例如为数据量比较大的表创建索引或是变更其表结构,就需要特别注意,长时间内数据可能无法进行更新。

     

    --字段不固定时的应用

    如果字段不固定,利用关系型数据库也是比较困难的,有人会说,需要的时候加个字段就可以了,这样的方法也不是不可以,但在实际运用中每次都进行反复的表结构变更是非常痛苦的。你也可以预先设定大量的预备字段,但这样的话,时间一长很容易弄不清除字段和数据的对应状态,即哪个字段保存有哪些数据。

    --对简单查询需要快速返回结果的处理  (这里的“简单”指的是没有复杂的查询条件)

    这一点称不上是缺点,但不管怎样,关系型数据库并不擅长对简单的查询快速返回结果,因为关系型数据库是使用专门的sql语言进行数据读取的,它需要对sql与越南进行解析,同时还有对表的锁定和解锁等这样的额外开销,这里并不是说关系型数据库的速度太慢,而只是想告诉大家若希望对简单查询进行高速处理,则没有必要非使用关系型数据库不可。

    ---------------------------

    NoSQL数据库

    关系型数据库应用广泛,能进行事务处理和表连接等复杂查询。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。

    优点:

     易于数据的分散

    各个数据之间存在关联是关系型数据库得名的主要原因,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散,这也是关系型数据库并不擅长大数据量的写入处理的原因。相反NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器上的数据量,即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。

     

    典型的NoSQL数据库

    临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)

    一、 键值存储

    它的数据是以键值的形式存储的,虽然它的速度非常快,但基本上只能通过键的完全一致查询获取数据,根据数据的保存方式可以分为临时性、永久性和两者兼具 三种。

    (1)临时性

          所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止时,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢失。总结来说:

          。在内存中保存数据

          。可以进行非常快速的保存和读取处理

          。数据有可能丢失

     (2)永久性

           所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。总结来说:

           。在硬盘上保存数据

           。可以进行非常快速的保存和读取处理(但无法与memcached相比)

           。数据不会丢失

    (3) 两者兼备

           Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来说:

           。同时在内存和硬盘上保存数据

           。可以进行非常快速的保存和读取处理

           。保存在硬盘上的数据不会消失(可以恢复)

           。适合于处理数组类型的数据

         

    二、面向文档的数据库

       MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。

       (1)不定义表结构

         即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。

       (2)可以使用复杂的查询条件 

         跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但初次以外的其他处理基本上都能实现。

    三、 面向列的数据库

       Cassandra、HBae、HyperTable属于这种类型,由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引入注目。

       普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

    面向列的数据库具有搞扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,故应用起来十分困难。

     

    总结:关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。




    展开全文
  • 数据库关系数据库中关系关系分类实际应用 关系分类 在关系数据库中,按照x对x的分类,可以分为三种,分别为对多、多对多。 实际应用 我使用的是MySQL的可视化工具Workbench,在建立新的Model ...

    【数据库】关系型数据库中的关系

    关系分类

    在关系型数据库中,按照x对x的分类,可以分为三种,分别为一对一一对多多对多

    实际应用

    我使用的是MySQL的可视化工具Workbench,在建立新的Model EER图时,可以看到这样的界面
    在这里插入图片描述
    在图中用红色标出的地方则可以选择关系类型,建立两个table(表)之间的关系。
    给出两个翻译帮助理解(不保证正确)
    在这里插入图片描述
    放置一个新的1:1非决定性关系(Non-Identifying Relationship)
    在这里插入图片描述
    放置一个新的1:1决定性关系(Identifying Relationship)

    可以看出虚线表示的是非决定性关系,实线表示决定性关系。

    自己研究了一番:
    ①1:1和1:n都有非决定性关系和决定性关系,而m:n只有决定性关系;
    ②1:1和1:n关系在建立后,只是在从表中增加了一个外键;而m:n关系建立后,增加了一个新表,表中有两个外键,分别来自两个主表。那么这个新表的主键就是两个外键的组合。

    再结合一些网上的资料,我给出我对决定性关系和非决定性关系的理解。

    决定性关系:从表中的关系受主表中关系的影响,需由主表中的外键和从表中的主键共同标识。
    非决定性关系:从表中的关系与主表中关系不直接相关,主表的变动不影响从表的关系。

    以上只是我个人的理解,只停留在理论层面,后续实际操作表中数据有新发现新体会时,会更新此文。欢迎各位大佬指正!

    展开全文
  • 关系数据库与非关系型数据库简介

    千次阅读 2021-02-23 14:17:27
    关系数据库与非关系型数据库一、相关概念 一、相关概念 ●关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL语句(标准数据查询语言)就是一种基于关系型...

    一、相关概念

    关系型数据库

    • 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
    • SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作
    • 主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。

    非关系型数据库

    • NoSQL (NoSQL = Not only sQL ),意思是"不仅仅是 SQL",是非关系型数据库的总称。
    • 除了主流的关系型数据库外的数据库,都认为是非关系型。
    • 主流的NoSQL数据库有 Redis、MongBD、Hbase、Memcached等。

    二、关系型数据库和非关系型数据库区别

    数据存储方式不同

    • 关系型和非关系型数据库的主要差异是数据存储的方式。
    • 关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
    • 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。
    • 非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

    扩展方式不同

    • SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
    • 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
    • 而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

    对事务性的支持不同

    • 如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择
      SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
      虽然MoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

    三、非关系型数据库产生背景

    可用于应对web2.0 纯动态网站类型的三高问题。

    • High performance——对数据库高并发读写需求
    • Huge Storage——对海量数据高效存储与访问需求
    • High Scalability && High Availability——对数据库高可扩展性与高可用性需求

    关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。

    总结

    关系型数据库:
    实例 >> 数据库 >> 表(table) >> 记录行(row)、数据字段(column)

    非关系型数据库:
    实例 >> 数据库 >> 集合(collection) >> 键值对(key-value)
    非关系型数据库不需要手动建数据库和集合(表)。

    展开全文
  • 数据库关系代数详解

    千次阅读 多人点赞 2021-02-26 16:35:55
    数据库关系代数 1. 关系代数的运算 1.1 传统的关系运算 ...比如说我们每个见过成绩单,牢记以下的比喻 R就为整张成绩单 R[A1, A2, A3,…Ai] = R[语文,英语,数学……学科] t为某个同学 t [Ai] 就

    数据库关系代数

    1. 传统的关系运算

    传统的关系运算起源于数学的集合论

    1. 笛卡尔积运算
    2. 差运算
    3. 交运算
    4. 并运算

    2. 专门的关系运算

    数据库中特有的运算规则

    1. 选择
    2. 投影
    3. 连接
    4. 除运算

    2.1 关系运算中的基础概念

    在学习关系代数的时候,脑海中要时刻拥有一张表格,还有表格的一些参数,表格如下:

    比如说我们每个人都见过成绩单,牢记以下的比喻

    • R(关系模式)就是一张表格(成绩单)。

    • R[A1, A2, A3,…Ai] = R[语文,英语,数学……学科]

    • t 为某个同学

    • t [Ai] 就可以当作某个同学的某一门成绩

    例如:R为期中考试全班的成绩单,R[A1, A2, A2…Ai]为考试所有科目,t 代表了张三这个人,t[Ai]代表了张三某门课程的考试成绩。

    • A不再是单独的一个属性,A可以代表一个或者多个属性
    • t[A]也不再是单独的某个属性分量,A代表多少个属性,t[A]就可以代表多少个属性分量
    • 做一个比喻,A再也不单独是某个学科,而是可以代表一科或者多科学科
    • t[A]也就不当作某个同学的一门成绩,而是可以当成某个同学的多门成绩,具体看A代表了多少学科
    • A头上一横……)就代表了除了A代表的学科以外的所有学科

    2.2 元组的连接

    通过连接得到的这个元组有以下属性

    • 前 m 个分量来自于 R 表中的一个 m 元组
    • 后 n 个分量来自于 S 表中的一个 n 元组

    2.3 象集(除法运算重要工具)

    给了我们一个关系R(X,Y)XY都代表了一个属性组,也就是XY都是属性的数量都是一列到多列

    • 从上面的比喻来说,X是成绩单一门课程的成绩或者多门课程成绩,Y也是一门课程的成绩或者多门课程的成绩
    • t[X] = x时: xR中的象集为:Yx = {t[Y] | t 属于 R, t[X] = x}
    • 公式比较难懂,但是其实本身很简单也十分容易寻找

    如下例:

    3 数学上的运算

    3.1 并运算

    能够使用并运算的两个前提

    1. 两张表格的元一样(两张表格列数一样)
    2. 相同的属性取自同一个域(属性都一样)

    如图,在合并了之后呢,两个原始的表格和合并之后的新表格元数一样(列数一样)

    • 如果两个表之间有重复的元组,并运算会做去重处理,类似于集合的之间的并集

    3.2 差运算

    能够使用差运算的两个前提

    1. 两个表格列数一样
    2. 两个表格的属性都相同

    两个表进行了差运算之后,都仍然是n列

    S-R表:S表中有任意一个元组和R表的一样,S表就去掉这个元组

    R-S表:R表中有任意一个元组和S表的一样,R表就去掉这个元组

    简言之:就是一张表,嫌弃另外一张表,我身上有那里和你一样,我改还不行嘛!

    3.3 交运算

    交运算能够使用的两个前提

    1. 表格的列数相同
    2. 表格的属性都相同

    两个表格进行并运算,就是把两个表格中一样的元素找出来,找出两张表格的共性

    3.4 笛卡尔积(万能运算)

    没有任何使用限制,万物皆可笛卡尔积。

    R表n元关系,k1个元组(k1行,n列)

    S表m元关系,k2个元组(k2行,m列)

    R表S表进行笛卡尔积

    得到一个(m + n)元k1 * k2列的新表,如下:

    两个表进行了笛卡尔积运算之后

    以上就是所有的数学关系代数运算

    4. 关系运算

    整个关系代数的学习需要使用学生课程选课数据库,需要熟悉以下表格:

    4.1 表格简介

    Student表:

    Course表:

    SC表:


    4.2 选择(Selection)

    • 选择也称之为限制
    • 选择是针对的元组进行选择,选择出满足条件的元组

    选出来的结果是一行行的

    4.2.1 选择查询(例1)

    查询全体信息系(IS)的学生所有信息

    1. 信息系在Student表格中有,所有我们的R表的位置是Student

      Student表格的属性集合为{"Sno", "Sname", "Ssex", "Sage", "Sdept"}

    2. 我们需要的条件是F(Sdept = IS)

    所以题目的答案为:

    查询出来的结果为:

    4.2.2 选择查询(例2)

    查询年龄小于20岁的学生所有信息

    1. 年龄在Student表格中存在,所以我们现需要查询的表格为Student表格
    2. 我们需要的条件是年龄小于20岁F(Sage < 20)

    所以题目的答案为:

    查询出来的结果为:

    4.2.3 选择查询(练习题)

    1. 查询性别为女生的学生信息
    2. 查询学分等于四分的课程信息
    3. 查询CS系的学生信息

    总结:选择运算是查询符合条件的行


    4.3 投影(Projection)

    我们可以看见,使用选择运算的时候,一行的所有全部信息我们都获取了,比如我查询了小于20岁的学生信息,我连学生的名字,学号,性别所有的信息都知道了,因为选择是选择出一行一行的结果,那么如果我只想知道小于20岁的学生名字,其他学号,学院等等的信息我都不想知道

    这里就需要投影运算

    投影运算是针对属性进行选择的运算,也就是投影是选择出符合条件的一列,并且会自动取消某些行(后面会举例说明)

    4.3.1 投影查询(例1)

    查询学生的姓名和学生的系,从需要查询的这个条件可以看出来我们需要查询的是姓名列和学生所在系列

    1. 学生的姓名和所在系在Student表格中,所以我们需要在Student表格中进行查询
    2. 需要查询的属性为学生的姓名和学生的系

    题目的答案为:

    Sname 和 Sdept之间用逗号分隔

    最终我们查询获取的答案如下:

    4.3.2 投影查询(例2)

    查询学生表Student中有那些系

    1. 首先,我们需要在Student表中进行查询
    2. 我们需要查询的属性为系

    题目答案为:

    可是我们最终查询出来的答案应该是什么样子的呢?

    图中演示的就是选择运算的自动去重功能

    总结:投影查询得到的是一列

    4.3.3 选择和投影配合使用(重点)

    选择查询是挑选出符合条件的行,投影查询是选择想要的列,那么如果想定位到一个具体的属性,就需要两种查询方式一起使用。

    如图:

    当我们需要全体数学学院的学生姓名,注意,只需要学生的姓名,其他的信息都不需要。

    • 先用选择运算将所有的数学学院的学生挑选出来

    选择运算的基础上,把需要符合条件的姓名通过投影运算查询出来

    全体数学学院的学生的姓名(交叉区域):言小白,李白。


    4.4 连接(Join)

    连接的含义:从两个关系的笛卡尔积中选择属性之间满足一定关系的元组

    解释:在两张表的笛卡尔积后得到的那张大表中再次选取一些符合我们条件的元组

    多种符号:不同的连接方式对应的符号也有一些细微的差别

    4.4.1 一般连接(例题)

    一般连接就是条件连接,需要将两个表格按照条件连接起来

    第一步:

    第二步:

    第三步:

    因为所有需要挑选的元组都挑选完毕,所以最终的结果如下图

    4.4.2 等值连接

    等值连接是一种特殊的一般连接

    • 两个表需要有相同的属性列

    下面通过具体的题目来进行了解

    第三步:

    最终的结果为:

    4.4.3 自然连接(特殊的等值连接)

    自然连接是一种特殊的等值连接

    这里我们发现了等值连接的一个缺点,R.B和S.B属性是相等的,而我们只需要其中一列就可以,所以R.B和S.B属性只需要保留任意一列就可以了。

    换句话说,等值连接因为属性重复而造成了额外的空间浪费,所以我们需要使用自然连接来解决这个问题(去掉重复的列)。

    4.4.4 外连接

    我们从自然连接中又发现了一个问题,如下图:

    图中标记为红色的地方:

    在做等值连接时由于彼此之间没有对应的元组(彼此之间特有的元组,我有的你没有,或者你有的我没有,这种情况肯定不会相等),在自然连接和等值连接的时候都会被丢弃,这种连接叫做内连接

    而有时候我们需要保留一张表中这种特有的元组,这些元组不能被丢弃,所以需要使用与内连接相反的连接——外连接解决特有的元组被丢弃的问题

    外连接:把R表和S表被丢弃的元组捡了回来,并且在最终连接的表中没有的值用NULL替代,最终结果如下

    • 左外连接:因为R表在左边,所以最终的结果只保留R表中被丢弃的特有元组S表的特有元组仍然丢弃
    • 右外连接:因为S表在右边,所以最终的结果只保留S表中被丢弃的特有元组R表的特有元组仍然丢弃

    4.4.5 例题

    很多时候需要查询的数据分布在两个表格甚至多个表格中,使用连接将表格连接在一起进行查询是十分常用的操作

    有表格信息如下:

    一、查询所有学生的学号,姓名,课程号以及成绩

    • 需要查询的信息分布 S 表和 SC 表中
    • 两张表拥有相同的属性,即Sno,所以连接条件就是 S.sno = SC.sno

    答案:

    当然,使用自然连接也是正确的,自然连接会自动找到相同的属性,并且默认条件就是相同属性的值相同,自然连接就是特殊的等值连接

    二、查询CS系的学生的学号,课程号,以及成绩

    • 需要查询的信息分布在 S 表和 SC 表中
    • 两张表相同的属性是 Sno,所以依靠 Sno 将两张表连接
    • 需要对连接后的表格进行选择,条件是 Sdept = ‘CS’

    答案:

    其实这道题可以再优化一下

    因为我们只需要 S 表中属于CS系的,没必要将 S 表的所有系的学生都和 SC 表连接起来
    所以可以先把 S 表中 CS 系的学生挑选出来,然后再进行连接操作。

    优化后的答案:

    很明显优化后的结果挑选速度更快,占用空间更小。


    4.5 除运算

    一些学习上的感悟:除运算在关系代数中是一个十分强大的工具,但是除法运算的定义看起来十分的晦涩难懂,可定义又是十分重要的,相信很多人在看教科书的过程中,每次看定义这块的时候都会很懵,然后看了例子之后就会理解定义的意思,但是懂了定义的大意之后很少就会有人再回头去理解定义,例子固然是用来让我们可以清晰的理解定义的大意的,但是我们通过例子理解定义的大意之后,我们仍然要回归定义,只有这样我们才能学得深入(个人对于学习上的一些理解,欢迎一起交流)

    4.5.1 除运算基本概念

    假设我们手里面有一张数据库如下:

    现在我们有一个问题,就是我们想要找出学习最积极的那位学生,也就是选修了所有课程的那个学生,先暂时放弃除法运算,以我们最朴素的情感用自己的逻辑来解决这道题目,按照自己的想法,就像设计一个程序一样,需要几步做出这个问题

    以下是按照我自己的想法:

    • 首先,把SC表拆了,把每个学生单独做成一个表,如下:

    • 然后问题就变成了拆开之后的表格和C表一一比对,找出拆开之后的三个表格中的Course属性和C表一模一样(也就是拆开之后包含了所有课程的表),然后找出那个人是谁,然后问题就解决了

    实际上,我们的除法运算就是这个逻辑,但是除法运算的更为严谨,以下是除法运算的的步骤(SC ÷ C),这里我们仍然采用我们上面使用的数据库,直接说结论(SC ➗ C)能找出答案

    • 第一步:找出C表中和SC表中相同的属性,也就是C属性,对C属性做投影操作(也就是找出总的课程有多少门)

    • 第二步:找出SC表中和C表不相同的属性,也就是S属性,也对S属性做投影操作(找出一共有几个学生)

    • 第三步:找出SC表中S的象集(每个学生分别都选了些什么课)

    • 最后一步就是进行比对,只有张三的象集包含了所有C表中的所有课程,所以(SC ➗ C = 张三)

    简单的总结,当需要查询选取所有课程的学生的名单时

    • 需要获取所有的课程到底是那些课程,所以对C表进行投影
    • 需要获取选课的学生有那些,所以需要对SC表的S进行投影
    • 需要知道每个学生都选择哪些课程才能知道那个学生全选了课程,所以还需要的数据是SC表中,S的象集
    • 最后,需要进行比对操作,看看那个学生的象集包含了C表的投影

    除法运算像一个函数,封装了以上的所有功能,我们调用这个函数的时候,把正确的参数放进去,就可以得到我们想要的答案

    4.5.2 例题

    S表 :

    C 表:

    SC 表:

    题目如下:

    查询选修了所有课程的学生姓名,年龄

    1. 对 C 表进行投影,找出所有的课程编号
    2. 用 SC 表 C表,找出选了C表中所有课程的学生
    3. 将符合条件的学生的姓名和年龄找出来

    答案:

    其中,第2步的除法运算详细过程如下:


    当我们看完结论,做完题目,再回头看定义,除法运算的定义如下:

    反复多理解几次,也想用自己的话解释定义,但是定义太抽象了,不举例很难说清楚。

    ……只可意会不可言传……如果使用例子无非把上面的例子再说一遍。

    这里使用其他博客的对于除法运算的总结:RS÷S的意义就是:“在R和S的联系RS中,找出与S中所有的元组有关系的R元组”,这篇博客地址为:关系代数除法运算

    ❤️完结撒花❤️


    2021/5/24:特别鸣谢ai_leilei指出本文错误之处,现已修改!

    展开全文
  • 关系型数据库与非关系数据库区别

    千次阅读 2019-02-22 10:57:57
    关系数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1、易于维护:是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个...
  • 数据库中的Schema是什么?

    万次阅读 多人点赞 2018-01-10 13:14:35
    数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata可以作为复数形式。模式包含了schema对象,可以是表(table)、列(column)、数据类型(data type...
  • 关系模式,关系,关系数据库

    千次阅读 2020-03-11 22:13:06
    关系模式是型、关系是值,关系模型是对关系的描述(元组集合的结构、完整性约束条件)是静态的、稳定的;关系是关系模式在吗某时刻的状态或内容,是动态的、随时间...关系数据库是在给定应用领域所有关系的集合 ...
  • 关系数据库与非关系数据库详细比较

    千次阅读 多人点赞 2018-11-12 11:06:02
    关系数据库与非关系数据库详细比较 ...3.非关系数据库中,我们查询一条数据,结果出来一个数组,关系数据库中,查询一条数据结果是一个对象。 区别 关系数据库 ...
  • 数据库通常分为层次式数据库、网络式数据库关系数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。...例如,设有一个电话号码簿,它记录了n个人的名字和相应的电话号码。为了方便地查找某人的电话号
  • 其实,设计一个数据库,就和设计一款软件差不多,也是要拆分成各个模块(模块划分能力) 存储(文件系统) 将数据持久化到磁盘 程序实例 对存储进行逻辑上的管理 存储管理:数据的逻辑关系与物理关系映射...
  • redis非关系数据库详解

    万次阅读 2021-02-26 17:03:34
    Redis 是以key-value形式存储,和传统的关系数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,redis严格上不是数据库,应该是种数据结构化存储方法的集合。 ...
  • 在关系型数据库中,通过...一对多关系一个班级有很多学生,外键维护在学生的一方,也就是多的一方。(在做页面设计的时候,需要把两个表连接到一块查询信息)建立一个student和clazz表clazz id name1 一班2 二班3 ...
  • 数据库之关系数据库的关系运算

    千次阅读 多人点赞 2020-03-25 11:59:13
    关系运算的机理有什么用 我们学习关系运算的机理,对我们理解数据库查询操作...这些需要充分理解关系运算 各种关系运算 集合运算符 1.并运算 2.差运算 3.交运算、 4.笛卡儿积 专门关系运算符 数据库的专门关...
  • 关系数据库设计理论

    千次阅读 2018-07-11 18:32:27
    设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式包括哪些属性 “不好”的数据库设计 ...
  • 关系数据库系列文章之到底什么是关系(

    千次阅读 多人点赞 2018-08-05 02:28:45
    在语言X如何实现Y,像这种具体的只是(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。... 作为程序员,在日常的开发,我们避免不了的就要接触数据库概念,而关系...
  • 数据库 - 关系数据库标准语言SQL

    千次阅读 2015-05-05 09:57:12
    SQL是一个通用的、功能极强的关系数据库语言SQL特点1.综合统一 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。 可以独立完成数据库生命周期的全部活动: 定义关系模式,插入...
  • 浅析关系数据库和NoSql非关系数据库

    千次阅读 2015-08-19 18:54:00
     支持关系模型的数据库系成之为关系数据库,是目前各类数据库使用最为广泛的数据库系统。关系数据库在经过二十几年的发展,已经变的功能强大,使用广泛,产品成熟的数据库系统,现在使用主流的数据库为关系型...
  • 关系数据库与非关系数据库Nosql区别汇总

    千次阅读 多人点赞 2018-08-24 11:14:06
    目录 关系数据库与非关系数据库详细比较 关系数据库与非关系数据库优缺点对比 关于Nosql ...2.非关系数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的...
  • 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库的数据。简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。 关系模型就是指二维表格模型,因而一个...
  • 数据库设计是我们项目的基石,一个中大型项目,要有一个良好的数据库设计,才能走得更远。一个项目如果数据库设计的不好,后期开发不仅任务量大,而且伴随项目越来越大,项目的可维护性会越来越差。数据库设计对于...
  • 关系数据库和非关系数据库的区别

    万次阅读 多人点赞 2019-06-30 20:59:09
    关系数据库和非关系数据库的区别 待会总结,先自我学习先 学习网址:https://blog.csdn.net/aaronthon/article/details/81714528
  • 、内存数据库关系数据库和非关系数据库 1.个人观点: 二、内存数据库(Redis,MongoDb,SQLite,Oracle等): 三、Raft分布式协议: 四、Redis出现宕机,如何保证数据不丢失? 、内存数据库关系型...
  • 数据库一对多、多对多关系

    万次阅读 多人点赞 2018-01-10 15:54:10
    数据库一对一、一对多、多对多关系 ... * 一个人对应一张身份证,一张身份证对应一个人 2、一对多关系实例  * 一个班级拥有多个学生,一个学生只能够属于某个班级 3、多对多实例  * 一个学生可以
  • 数据库原理之关系数据库关系运算

    万次阅读 多人点赞 2018-12-06 10:10:31
    关系数据库关系运算 选择 投影 链接 除运算 选择运算 选择运算是从关系R选取使逻辑表达式F为 真的元组,是从行的角度进行的运算 投影运算 投影操作主要是从列的角度进行运算,但投影之后...
  • 对象关系数据库

    千次阅读 2014-05-30 11:23:53
    对象-关系数据库正是把面向对象方法学与关系数据库系统技术相结合的产物。 按照“第三代数据库系统宣言”的文章的思想,一个面向对象数据库系统(OODBS)必须满足两个条件: (1)支持统一核心的面向对象数据模型; ...
  • 关系数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据。主流的oracle、DB2、MS SQL Server和mysql属于这类传统数据库。NoSQL数据库,全称为Not Only SQL,意思...
  • 关系数据结构及形式化定义 1、关系 关系模型的数据结构非常简单,只包含单一的数据结构——关系。在用户看来,关系模型数据的逻辑结构是一张扁平的二维表。 1.1域 域是组具有相同数据类型值的集合。 ...
  • 数据库原理—关系数据库

    千次阅读 2020-09-05 19:58:37
    一、思维导图: 二、基本知识点: ...(3)笛卡尔积:可表示一张二维表,表中每一行一个元组,表中每一列一个域 2、关系的定义 (1)关系: D1******Dn关系的行形成的一个子集称为D1******Dn的一个

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,263,471
精华内容 505,388
关键字:

关系数据库中每一个关系都是