精华内容
下载资源
问答
  • Hibernate的一级缓存Session和二级缓存SessionFactory
    千次阅读
    2016-09-19 15:18:16

    Hibernate的一级缓存是指Session(属于事务范围的缓存,由Hibernate管理,无需干预),它是一块内存空间,用来存放相互管理的java对象,有了一级缓存,应用程序可以减少访问数据库的次数,提高了性能。

    在使用Hibernate查询对象的时候,首先会使用对象属性的OID值(对应表中的主键)在Hibernate的一级缓存进行查找,如果找到,则取出返回,不会再查询数据库,如果没有找到,再到数据库中进行查询操作。然后将查询结果存放到Session一级缓存中。

    特点:

    • 进行save()、update()、saveOrUpdate()操作的时候会把相应的对象那个存放在session缓存中(注意,save()和update()并不是直接反应到数据库中,而是反应到session中,当事务进行提交的时候,session会进行刷出操作,将session中对象的变化反映到数据库中)
    • 调用get()、load()的时候或其他进行查询的方法,会现在session中查找,若有返回,若无,查询数据库,然后把结果保存在session中
    • 当调用session的close()的时候,一级缓存清空
    • Session会在某些时间点,按照缓存中对象的变化进行数据库的同步,如下几种时间:
      (1)当应用程序调用Transaction的commit()方法时,该方法先刷出缓存,然后再向数据库提交事务
      (2)当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,保证同步
      (3)手动执行session.flush()

    Hibernate是如何实现一级缓存的呢?
    这是依赖了Hibernate快照来实现的,其实session与数据库数据的对比并不是真正的对比,session不是和数据库的数据做对比,而是和Hibernate快照做对比,但这个快照永远和数据库的数据保持一致。

    Hibernate向以及缓存放入数据时,同时赋值一份数据放入到Hibernate快照中,当使用commit()方法提交事务时,同时会清理Session的一级缓存(flush操作,之后session清空),这是会使用OID判断以及缓存中的对象和快照中的对象是否一致,如果两个对象中的属性发生变化,则执行update语句,将缓存的内容同步到数据库中,并更新快照(从这里可以知道数据库和快照保持一致);如果一致,则不执行update语句。Hibernate快照的作用就是确保一级缓存中的数据和数据库中的数据一致。

    一级缓存的3个操作:

    • flush():同步后清空
    • clear():只是清空一级缓存,并不会进行同步操作(session.evict(book):只对session中的某个对象进行清理操作)
    • refresh():刷新操作,在refresh()操作前,程序员可以对从数据库获取的对象进行属性修改,但是refresh()执行后,这些对象的属性恢复原来的样子。即:refresh()的作用是:使Hibernate快照区和一级缓存中的数据域数据库保持一致。

    Hibernate的二级缓存是SessionFactory,属于进程范围的缓存。
    SessionFactory的缓存分为两类:

    • 内置缓存
      Hibernate自带,不可卸载。在Hibernate的初始化阶段,Hibernate会把映射元数据(映射文件中数据的赋值)和预定义的SQL语句放到SessionFactory的缓存中。该内置缓存是只读的。
    • 外置缓存
      可配置的缓存插件。默认不会开启,缓存可以是内存也可以是硬盘
      具体可参考传智博客的《SSH》。
      其实我们上面说的Session找不到对应的对象就去数据库中找是不太正确的,Session找不到会去二级缓存SessionFactory找(如果配置了二级缓存的话),参考《SSH》的P204-P206,有例子说明
    更多相关内容
  • 阶段在线作业 单选题 (共8道题) 收起 ...1.(2.5分) 下列参数中...2.(2.5分) 对于在多个CSTR进行的一级反应,DamkÖhler准数为_______,则串联所需的反应器个数越多。 A、0.1 B、0.5 C、1 D、2 ...
    第二阶段在线作业

    单选题 (共8道题)

    1.(2.5分) 下列参数中,_______能够判断出转化率的大小。

    •    A、DamkÖhler准数
    •    B、Thiele模数
    •    C、Mears准数
    •    D、Weisz-Prater准数
    我的答案:A  此题得分:2.5分

    2.(2.5分) 对于在多个CSTR进行的一级反应,DamkÖhler准数为_______,则串联所需的反应器个数越多。

    •    A、0.1
    •    B、0.5
    •    C、1
    •    D、2
    我的答案:A  此题得分:2.5分

    3.(2.5分) 下列属于均相反应的是_______。

    •    A、煤炭燃烧
    •    B、氢气燃烧
    •    C、离子交换
    •    D、石油裂解
    我的答案:B  此题得分:2.5分

    4.(2.5分) 下列属于非均相反应的是_______。

    •    A、乙酸乙酯水解
    •    B、氢气燃烧
    •    C、HCL和NaOH中和
    •    D、石油裂解
    我的答案:D  此题得分:2.5分

    5.(2.5分) 对于间歇反应器中进行的液相等温反应,初始反应物浓度分别为0.1 mol/L和0.5 mol/L时,反应1小时以后转化率均达到50%,则该反应的级数为___ __。

    •    A、0级
    •    B、1级
    •    C、2级
    •    D、不一定
    我的答案:B  此题得分:2.5分

    6.(2.5分) 

    •    A、.
    •    B、.
    •    C、.
    •    D、.
    我的答案:C  此题得分:2.5分

    7.(2.5分) 

    •    A、.
    •    B、.
    •    C、.
    •    D、.
    我的答案:D  此题得分:2.5分

    8.(2.5分) 

    •    A、.
    •    B、.
    •    C、.
    •    D、.
    我的答案:A  此题得分:2.5分

    判断题 (共32道题)

    9.(2.5分) 平推流反应器串联,串联的级数越多,越接近与全混流。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    10.(2.5分) 全混流反应器并联,串联的级数越多,越接近于平推流。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    11.(2.5分) 对于一级不可逆反应,在给定的处理量,在某平推流反应器和全混流反应器组成的串联式反应器中进行反应,其反应转化率会受到两个反应器排列顺序的影响。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    12.(2.5分) 相同条件下,平推流反应器中反应物浓度CA低于全混流反应器浓度

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    13.(2.5分) 相同条件下,全混釜反应器串联操作反应速度加快,可以提高原料处理量。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    14.(2.5分) 对于零级反应,使用相同体积的CSTR和PFR得到的最终转化率均相同。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    15.(2.5分) 对于一个串联反应,目的产物是中间产物,适宜的反应器是全混流反应器。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    16.(2.5分) 对于吸热反应体系,不论如何改变实验操作条件(如进料温度或进料摩尔流率等),都不可能观察到多态现象。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    17.(2.5分) 复合反应中,反应物的转化率愈高,目的产物获得愈多。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    18.(2.5分) 对于目的产物瞬时收率随着反应物浓度增大单调上升的平行反应,全混流反应器更利于目的产物的生成。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    19.(2.5分) 全混流连续操作反应器,反应器内温度、浓度处处均匀一致,故所有物料粒子在反应器内的停留时间相同。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    20.(2.5分) 对于目的产物瞬时收率随着反应物浓度增大单调下降的平行反应全混流反应器更利于目的产物的生成。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    21.(2.5分) 对于平行反应,提高反应物浓度,有利于级数高的反应,降低反应物浓度有利于级数低的反应。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    22.(2.5分) 一个PFR反应器等同于∞个小的CSTR反应器串联。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    23.(2.5分) PFR反应器的特点是有返混。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    24.(2.5分) 在生产颗粒半径为R的球形催化剂时,如果Thiele模数比较大,可仅将活性组分负载于颗粒内部靠近中心处(类似鸡蛋的蛋黄部分),以减少生产成本,而对催化剂的性能影响不大。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    25.(2.5分) 改善孔结构可以径降低非均相催化反应中内扩散的影响。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    26.(2.5分) 在消除催化剂外扩散影响的实验中,在500℃时已经消除了外扩散影响,如果反应改在400℃下进行,且其它条件不变,则400℃时外扩散影响也不存在。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    27.(2.5分) 气固非均相催化反应过程可分解为七个步骤,速率控制步骤是指速率最快的一步。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    28.(2.5分) 减小催化剂粒径可以降低非均相催化反应中内扩散的影响。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    29.(2.5分) 提高反应温度可以降低非均相催化反应中内扩散的影响。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    30.(2.5分) 理想连续流动模型是指平推流模型和全混流模型。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    31.(2.5分) 增大催化剂孔可以径降低非均相催化反应中内扩散的影响。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    32.(2.5分) 

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    33.(2.5分) 

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    34.(2.5分) 均相反应器的型式主要为釜式、管式、塔式、固定床和流化床。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    35.(2.5分) 膨胀率为每转化1 mol A造成反应体系内物料的改变量。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    36.(2.5分) 基元反应的分子数只能是整数,不可能是小数。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    37.(2.5分) 根据阿伦尼乌斯定律,活化能越大,反应对温度越不敏感。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    38.(2.5分) 反应级数仅仅是一个经验值,可以取任何数值。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分

    39.(2.5分) 指前因子理论上与温度有关,但与指数项相比其随温度的变化可以忽略,活化能的取值永远都是正的。

    •    正确
    •    错误
    我的答案:正确  此题得分:2.5分

    40.(2.5分) 某反应速率常数的单位为mol /( m3.hr),该反应为二级级反应。

    •    正确
    •    错误
    我的答案:错误  此题得分:2.5分
    展开全文
  • 你可以试试点击第三个的时候它其实已经是发送了请求的了,请求路径就在那里,最后个4是个参数,这个是什么参数呢?这个其实就是cid,为什么我们以前的参数是问号后面加上参数也就是?后面加上参数名,但是这次...

    在这里插入图片描述
    可以看到我们点击前两个分类,右边都是没有反应的

    在这里插入图片描述
    点击第三个分类的时候,右边就会有反应

    在这里插入图片描述
    你可以试试点击第三个的时候它其实已经是发送了请求的了,请求路径就在那里,最后一个4是一个参数,这个是什么参数呢?这个其实就是cid,为什么我们以前的参数是问号后面加上参数也就是?后面加上参数名,但是这次不是呢?因为这次显示的是一个参数的页面,也就是这个参数单独的类的页面,包括了这个参数有什么规格和细节上的选择,比如手机的话就是内存多少,颜色是什么,购买方式是什么

    在这里插入图片描述
    像这种分类的一般都是List集合的,为什么这么说呢?因为像这种分类的都是列表呀,一行行的信息下来让你进行配对,他们不就是一个组嘛,因为他们给你分配到一个组里面,也就是List列表里面,他们才会这样子去呈现出来,所以是个List组合,但是我们应该如何去找到这样的列表信息呢?

    在这里插入图片描述
    上次说到一个方法了,就是通过地址去找到它的路由,我们这次也是可以这样子去操作的。

    在这里插入图片描述
    我们可以到前端程序的router里面的index文件里面查看路径,如上图所示,找到它的网址,然后看到路由,从左边找到路由。
    在这里插入图片描述
    这个就是页面左边的列表,都是已经做好了,上面有个xs3,代表的是三格。如下图所示,这个就是三个级别的意思
    在这里插入图片描述
    在这里插入图片描述
    上面这个是什么意思呢?其实就是行布局的意思,为什么说是行布局的意思呢?

    在这里插入图片描述
    行布局也就是上面这一块的意思,这里就是一行的布局

    在这里插入图片描述

    在这里插入图片描述

    还有一个要说明的是,为什么我代码里面写了“请选择一个分类”,但是右边却不进行显示呢?

    因为不知道你们有没有留意到,我们上面还写了一个v-show,这个有什么作用呢?写了这个以后,下面的就不会显示了,因为没有对应的商品参数等等信息出现,所以接下来的页面都不会发现显示,这就是v-show的作用,他里面的方法会执行一个条件,就是在没有数据库反馈或者有参数规格表进行显示的时候,他是不会让下面的命令进行实现的。

    但是如果你有了商品参数以后,你就可以去选择分类,然后下面就有面包屑的出现,也就是各种杂碎的分支,比如这个v-for方法里面的item,item是什么呢?
    在这里插入图片描述
    关于item是什么,我们不知道的话,可以去浏览器进行查找,

    在这里插入图片描述
    这里就是items,我们的item就包含在了里面,看这个就可以了解到,我们这个items是商品的一级分类和二级分类三级分类。

    那我们的items是从哪里来的呢?是不是前端页面已经做好了这个数据模型给我们然后进行使用呢?

    找了找前端页面,并没有这个数据模型,那它到底是什么?

    在这里插入图片描述
    可以仔细看看这里,可以发现他是个计算属性

    在这里插入图片描述
    什么叫计算属性,也就是他只是负责你点击哪个属性,他就给你返回一个什么路径让你去访问,就像上图一样,它赋予items属性,设置点击事件为currentNode.path,这个是什么意思呢?也就是你如果点击哪个一级类目或者二级类目的话,它会让你去访问相对应的类目地址,它的地址已经写好了放在currentNode里面。下图就是它的路径,有0,1,2三个类目,下面if判断的是什么呢?也就是如果这是个组名的话,它将会在items【3】里面加上组名。我们items数组总共也只是有三个组合,分别是items【0】,items【1】,items【2】,分别对应下图中的三个路径,加上items【3】并且设为组名,那么这个数组就有组名的元素了。
    在这里插入图片描述
    如果返回整个数组的话,因为是横向的,所以他会显示items数组里面的全部元素。
    在这里插入图片描述
    可能有人会问currentNode怎么来的
    在这里插入图片描述
    可以看到,我们选择这两个类目的时候,右边都是没有显示东西的,currentNode也是没有值,currentNode是什么呢?从我刚刚的解释已经可以看出来了,他就是一个显示右边的一个组件,如果它的值为空的话,右边也是没有显示东西的。

    但是如果你选择第三级分类的话,他就有值了,而且右边也会显示东西。只不过显示的是横向的东西。
    在这里插入图片描述
    然而这个是怎么实现的呢?我们可以看看他的树状结构,在商品分类那个地方。
    在这里插入图片描述
    我们可以看到他这个点击事件,然后我们去找handleClick这个方法。

    在这里插入图片描述
    然后我们可以找到他这里是有个点击事件,而且设定的参数为node,node是什么呢?其实,node是一个节点,你如果去点击类目,这个node就会把节点接收过来,如果你点击的不是父节点,他就会执行一下命令:
    在这里插入图片描述
    在这里插入图片描述
    我们上面这两个都是父节点,所以不会执行下面的操作,但是如果点到第三类目,也就是子节点,他就会执行下面的操作。

    在这里插入图片描述
    第一个就是把node赋值给currentNode,让currentNode有值,它就会在右边进行显示。

    第二个是什么呢?第二个就是规格组,你设定它的值为true

    在这里插入图片描述
    那么我们这里就可以展示分组。

    在这里插入图片描述
    因为这里我们还需要一个表格,showGroup作用就是让这个表格显示出来。

    在这里插入图片描述
    我们可以看看这个卡片的内容,卡片那种就是组还有商品id,可以从spec-group或者spec-param看出来。

    在这里插入图片描述
    可以看出他们的模型不一样,一个是showGroup,一个是!showGroup,所以两个是一个对立面,如果我们上面的showgroup值为true,那么就显示商品信息,也就是上图中的第一条,如果为false,就显示第二条。

    在这里插入图片描述
    那他们是在哪里导入组件的呢?可以看看小框那里,"./"表示在当前文件下的一个组件文件,

    我们可以看一下这个文件。就是一个data-table文件,也就是一个数据表的文件。

    在这里插入图片描述
    上面图片中有个头信息,他的参数在下面这里。
    在这里插入图片描述
    在这里插入图片描述
    还有一个组信息。
    在这里插入图片描述
    在这里插入图片描述
    是一个空的集合。

    在这里插入图片描述
    我们需要加载这个group,来进行渲染这些参数。所以我们要进行group的初始化。

    我们该如何进行group初始化呢?使用监听方法。
    在这里插入图片描述
    cid是什么呢?cid就是分类的id,也就是你在切换一级类目二级类目等类目的时候,发生变化的是分类id,监听这个分类id的变化,就可以实现如果id变化,就加载数据

    在这里插入图片描述
    然后他就会去发送请求,get里面的参数是请求地址和分类id。这整个方法的意思就是说,如果我们的商品分类发生变化,直到最后选择最后一个商品类目的时候,我们就会发送请求地址,并且获取商品分类id,在右边的界面呈现出相对应的商品参数。

    在这里插入图片描述
    但是我们这个cid是从哪里来的呢?
    在这里插入图片描述
    找了一下没有找到cid的数据模型,但是找到了这个,这个是什么意思呢?props这个是接收数据的意思,接收什么样的数据呢?cid的数字类型,还有默认值是0
    在这里插入图片描述
    他有数据模型,但是是一个自定义组件。
    在这里插入图片描述
    currentNode.id就是代表当前你点击的类目

    所以整个流程是怎么样的呢?首先你点击浏览器上面的类目,他就会被监听到,然后去返回对应的数据。你如果加载到最后一个的时候,他就会返回商品的参数给你。

    展开全文
  • 详解第范式、第范式、第三范式、BCNF范式

    万次阅读 多人点赞 2019-03-02 16:08:45
    文章目录第范式定义以及分析:问题研究:第范式必备知识点函数依赖:码:非主属性 :定义分析:解决办法:问题研究:第三范式:定义:分析:问题研究:BCNF范式分析问题研究小结: 第范式 定义以及分析: 首先是...

    GITHUB: https://github.com/wenkechen

    什么是”范式(NF)”

    按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。

    接下来就对每一级范式进行一下解释。

    1. 第一范式(1NF)

    符合1NF的关系(你可以理解为数据表。“关系模式”和“关系”的区别,类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,你可以把”关系”理解为一张带数据的表,而“关系模式”是这张数据表的表结构。1NF的定义为:符合1NF的关系中的每个属性都不可再分表1所示的情况,就不符合1NF的要求。
    在这里插入图片描述
    表1
    实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。也就是说,只要在RDBMS中已经存在的数据表,一定是符合1NF的。如果我们要在RDBMS中表现表中的数据,就得设计为表2的形式:
    在这里插入图片描述
    表2

    但是仅仅符合1NF的设计,仍然会存在数据冗余过大,插入异常,删除异常,修改异常的问题,例如对于表3中的设计:
    在这里插入图片描述
    表3

    1. 每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系与对应的系主任的数据也重复多次——数据冗余过大
    2. 假如学校新建了一个系,但是暂时还没有招收任何学生(比如3月份就新建了,但要等到8月份才招生),那么是无法将系名与系主任的数据单独地添加到数据表中去的 (注1)——插入异常
    • 注1:根据三种关系完整性约束中实体完整性的要求,关系中的码(注2)所包含的任意一个属性都不能为空,所有属性的组合也不能重复。为了满足此要求,图中的表,只能将学号与课名的组合作为码,否则就无法唯一地区分每一条记录。
    • 注2:码:关系中的某个属性或者某几个属性的组合,用于区分每个元组(可以把“元组”理解为一张表中的每条记录,也就是每一行)。
    1. 假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(一个系所有学生都没有了,并不表示这个系就没有了)。——删除异常

    2. 假如李小明转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据。——修改异常。

    正因为仅符合1NF的数据库设计存在着这样那样的问题,我们需要提高设计标准,去掉导致上述四种问题的因素,使其符合更高一级的范式(2NF),这就是所谓的“规范化”。

    2. 第二范式(2NF)

    在关系理论中的严格定义我这里就不多介绍了(因为涉及到的铺垫比较多),只需要了解2NF对1NF进行了哪些改进即可。其改进是,2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。接下来对这句话中涉及到的四个概念——“函数依赖”、“码”、“非主属性”、与“部分函数依赖”进行一下解释。

    2.1 函数依赖

    我们可以这么理解(但并不是特别严格的定义):若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。也就是说,在数据表中,不存在任意两条记录,它们在X属性(或属性组)上的值相同,而在Y属性上的值不同。这也就是“函数依赖”名字的由来,类似于函数关系 y = f(x),在x的值确定的情况下,y的值一定是确定的。
    例如,对于表3中的数据,找不到任何一条记录,它们的学号相同而对应的姓名不同。所以我们可以说姓名函数依赖于学号,写作 学号 → 姓名。但是反过来,因为可能出现同名的学生,所以有可能不同的两条学生记录,它们在姓名上的值相同,但对应的学号不同,所以我们不能说学号函数依赖于姓名。表中其他的函数依赖关系还有如:

    系名 → 系主任学号 → 系主任
    (学号,课名) → 分数

    但以下函数依赖关系则不成立:

    学号 → 课名
    学号 → 分数
    课名 → 系主任
    (学号,课名) → 姓名

    从“函数依赖”这个概念展开,还会有三个概念:

    2.1.1完全函数依赖

    在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ’ → Y 不成立,那么我们称 Y 对于 X 完全函数依赖,记作 X F→ Y。(那个F应该写在箭头的正上方,没办法打出来……,正确的写法如图1)

    图1
    例如: 学号 F→ 姓名 (学号,课名) F→ 分数 (注:因为同一个的学号对应的分数不确定,同一个课名对应的分数也不确定)

    2.1.2 部分函数依赖

    假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,记作 X P→ Y,如图2。

    图2
    例如:(学号,课名) P→ 姓名 传递函数依赖假如 Z 函数依赖于 Y,且 Y 函数依赖于 X (感谢 @百达 指出的错误,这里改为:『Y 不包含于 X,且 X 不函数依赖于 Y』这个前提),那么我们就称 Z 传递函数依赖于 X ,记作 X T→ Z,如图3。

    图3

    2.2 码

    设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码) 例如:对于表3,(学号、课名)这个属性组就是码。该表中有且仅有这一个码。(假设所有课没有重名的情况)

    2.3 非主属性

    包含在任何一个码中的属性成为主属性。

    例如:
    对于表3,主属性就有两个,学号 与 课名。

    终于可以回过来看2NF了。首先,我们需要判断,表3是否符合2NF的要求?根据2NF的定义,判断的依据实际上就是看数据表中是否存在非主属性对于码的部分函数依赖。若存在,则数据表最高只符合1NF的要求,若不存在,则符合2NF的要求。判断的方法是:

    第一步:找出数据表中所有的码。
    第二步:根据第一步所得到的码,找出所有的主属性。
    第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
    第四步:查看是否存在非主属性对码的部分函数依赖。

    对于表3,根据前面所说的四步,我们可以这么做:

    第一步:

    1. 查看所有每一单个属性,当它的值确定了,是否剩下的所有属性值都能确定。
    2. 查看所有包含有两个属性的属性组,当它的值确定了,是否剩下的所有属性值都能确定。
    3. ……
    4. 查看所有包含了六个属性,也就是所有属性的属性组,当它的值确定了,是否剩下的所有属性值都能确定。

    看起来很麻烦是吧,但是这里有一个诀窍,就是假如A是码,那么所有包含了A的属性组,如(A,B)、(A,C)、(A,B,C)等等,都不是码了(因为作为码的要求里有一个“完全函数依赖”)。
    图4表示了表中所有的函数依赖关系:
    在这里插入图片描述
    图4
    这一步完成以后,可以得到,表3的码只有一个,就是 (学号、课名)

    第二步:主属性有两个:学号课名

    第三步:非主属性有四个:姓名系名系主任分数

    第四步:
    对于(学号,课名) → 姓名,有 学号 → 姓名,存在非主属性 姓名 对码(学号,课名)的部分函数依赖。
    对于(学号,课名) → 系名,有 学号 → 系名,存在非主属性 系名 对码(学号,课名)的部分函数依赖。
    对于(学号,课名) → 系主任,有 学号 → 系主任,存在非主属性 对码(学号,课名)的部分函数依赖。

    所以表3存在非主属性对于码的部分函数依赖,最高只符合1NF的要求,不符合2NF的要求。

    为了让表3符合2NF的要求,我们必须消除这些部分函数依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。模式分解的方法不是唯一的,以下是其中一种方法:
    选课(学号,课名,分数)
    学生(学号,姓名,系名,系主任)

    我们先来判断以下,选课表与学生表,是否符合了2NF的要求?

    对于选课表,其码是(学号,课名),主属性是学号和课名,非主属性是分数,学号确定,并不能唯一确定分数,课名确定,也不能唯一确定分数,所以不存在非主属性分数对于码 (学号,课名)的部分函数依赖,所以此表符合2NF的要求。

    对于学生表,其码是学号,主属性是学号,非主属性是姓名、系名和系主任,因为码只有一个属性,所以不可能存在非主属性对于码 的部分函数依赖,所以此表符合2NF的要求。
    图5表示了模式分解以后的新的函数依赖关系

    图5
    表4表示了模式分解以后新的数据

    表4

    (这里还涉及到一个如何进行模式分解才是正确的知识点,先不介绍了)
    现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?

    1. 李小明转系到法律系
      只需要修改一次李小明对应的系的值即可。——有改进
    2. 数据冗余是否减少了?
      学生的姓名、系名与系主任,不再像之前一样重复那么多次了。——有改进
    3. 删除某个系中所有的学生记录
      该系的信息仍然全部丢失。——无改进
    4. 插入一个尚无学生的新系的信息。
      因为学生表的码是学号,不能为空,所以此操作不被允许。——无改进

    所以说,仅仅符合2NF的要求,很多情况下还是不够的,而出现问题的原因,在于仍然存在非主属性系主任对于码学号的传递函数依赖。为了能进一步解决这些问题,我们还需要将符合2NF要求的数据表改进为符合3NF的要求。

    3. 第三范式(3NF)

    3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
    接下来我们看看表4中的设计,是否符合3NF的要求。
    对于选课表,主码为(学号,课名),主属性为学号和课名,非主属性只有一个,为分数,不可能存在传递函数依赖,所以选课表的设计,符合3NF的要求。
    对于学生表,主码为学号,主属性为学号,非主属性为姓名、系名和系主任。因为 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖,所以学生表的设计,不符合3NF的要求。
    为了让数据表设计达到3NF,我们必须进一步进行模式分解为以下形式:
    选课(学号,课名,分数)
    学生(学号,姓名,系名)
    系(系名,系主任)
    对于选课表,符合3NF的要求,之前已经分析过了。
    对于学生表,码为学号,主属性为学号,非主属性为系名,不可能存在非主属性对于码的传递函数依赖,所以符合3NF的要求。
    对于系表,码为系名,主属性为系名,非主属性为系主任,不可能存在非主属性对于码的传递函数依赖(至少要有三个属性才可能存在传递函数依赖关系),所以符合3NF的要求。。
    新的函数依赖关系如图6

    图6
    新的数据表如表5

    表5
    现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?

    1. 删除某个系中所有的学生记录
      该系的信息不会丢失。——有改进
    2. 插入一个尚无学生的新系的信息。
      因为系表与学生表目前是独立的两张表,所以不影响。——有改进
    3. 数据冗余更加少了。——有改进

    结论
    由此可见,符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常 做到2NF或者1NF,但是作为数据库设计人员,至少应该知道,3NF的要求是怎样的。

    ==============时隔半年,终于决定把这个坑填上,来晚了 ===========
    BCNF范式
    要了解 BCNF 范式,那么先看这样一个问题:
    若:
    某公司有若干个仓库;每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
    一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。
    那么关系模式 仓库(仓库名,管理员,物品名,数量) 属于哪一级范式?
    答:已知函数依赖集:仓库名 → 管理员,管理员 → 仓库名,(仓库名,物品名)→ 数量
    码:(管理员,物品名),(仓库名,物品名)
    主属性:仓库名、管理员、物品名非主属性:数量
    ∵ 不存在非主属性对码的部分函数依赖和传递函数依赖。
    ∴ 此关系模式属于3NF。
    基于此关系模式的关系(具体的数据)可能如图所示:

    好,既然此关系模式已经属于了 3NF,那么这个关系模式是否存在问题呢?我们来看以下几种操作:
    先新增加一个仓库,但尚未存放任何物品,是否可以为该仓库指派管理员?——不可以,因为物品名也是主属性,根据实体完整性的要求,主属性不能为空。
    某仓库被清空后,需要删除所有与这个仓库相关的物品存放记录,会带来什么问题?——仓库本身与管理员的信息也被随之删除了。
    如果某仓库更换了管理员,会带来什么问题?——这个仓库有几条物品存放记录,就要修改多少次管理员信息。
    从这里我们可以得出结论,在某些特殊情况下,即使关系模式符合 3NF 的要求,仍然存在着插入异常,修改异常与删除异常的问题,仍然不是 ”好“ 的设计。
    造成此问题的原因:存在着主属性对于码的部分函数依赖与传递函数依赖。(在此例中就是存在主属性【仓库名】对于码【(管理员,物品名)】的部分函数依赖。
    解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。
    仓库(仓库名,管理员)
    库存(仓库名,物品名,数量)
    这样,之前的插入异常,修改异常与删除异常的问题就被解决了。
    以上就是关于 BCNF 的解释。

    问:关于码的定义,如果除K之外的所有属性都完全函数依赖于K时才能称K为码,那么在判断2NF时又怎么会存在非主属性对码的部分函数依赖这种情况?

    答 :在“码”的定义中,除 K 之外的所有属性应该看成是一个集合 U(也就是一个整体),也就是说,只有 K 能够完全函数决定 U 中的每一个属性,那么 K 才是码。如果 K 只是能够完全函数决定 U 中的一部分属性,而不能完全函数决定另外一部分属性,那么 K 不是码。
    比如有关系模式 R (Sno, Sname, Cno, Cname, Sdept, Sloc, Grade),其中函数依赖集为 F= {Sno → Sname, Sno → Sdept, Sdept → Sloc,Sno → Sloc, Cno → Cname, (Sno, Cno) → Grade }
    那么 R 中的码只能是 (Sno, Cno),Sno 或 Cno 并不能完全函数决定除 Sno / Cno 之外的所有其他属性(其实就是不能决定 Grade ),所以单独的 Sno 与 Cno 并不能作为码。
    所以可得到主属性:Sno, Cno
    非主属性:Sname, Cname, Sdept, Sloc, Grade
    R 中存在非主属性 Cname 对于码 (Sno, Cno) 的部分函数依赖 (Cno → Cname) 。(还有很多别的例子就不一一列举了)。所以 R 不符合 2NF 的要求。

    4. 小结

    搬运工觉得这个讲解对于初步学习的人比较好。
    数据库范式那些事
    总结:
    1NF: 字段是最小的的单元不可再分
    2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到)
    3NF:满足2NF,非主键外的所有字段必须互不依赖4NF:满足3NF,消除表中的多值依赖

    搬运自知乎如何解释关系数据库的第一第二第三范式?
    摘选刘慰胡永浩的回答

    展开全文
  • 酶在催化的过程中会先与底物结合形成酶-底物复合物(enzyme-substrate complex, ES),所以当底物浓度达到定量时,所有的酶分子就会结合上底物,从而使酶饱和。这就可以解释为什么米氏酶具有饱和现象了。所以,米氏...
  • Hibernate的一级二级缓存

    千次阅读 2016-04-13 21:38:08
    1. 管理session session对象的生命周期与本地线程绑定 thread 使用本地线程绑定,每次都从当前的... * 当前线程如果不存在session对象,获取个新的session对象和当前线程绑定 Session s1 = sf.getCurrentSession();
  • 搅拌式反应釜设计(三维SW)【全套含有CAD图纸三维建模】理工...、 毕业设计(论文)内容及要求(包括原始数据、技术要求、达到的指标和应做的实验等) 聚酯聚合反应器,是化纤生产的关键设备,在高温 、负压条件下,对...
  • 在低底物浓度时,反应速度与底物浓度成正比,表现为一级反应特征。 随底物浓度增加,反应速度不再呈正比例增加,表现为混合级反应。 当底物浓度达到一定值,反应速度达到最大值,此时再增加底物浓度,反应速度不再...
  • NISP一级模拟题( 部分 )

    千次阅读 2021-12-29 18:55:48
    试题 1、信息安全保障包括:生命周期、保障要素、安全特征 2、Unix和Linux都是免费试用的,因为许多操作系统课程用来介绍操作系统的 基本概念(操作系统安全设计原则:最小权限、完整性、经济性、公开性、 权限...
  • STL:二级空间配置器浅谈

    千次阅读 2016-05-09 16:22:10
    我们在编写程序过程中,需要内存时,我们第一反应就是malloc,但是这样容易产生内————存碎片,比如先申请50字节的空间,...在STL中提到了空间适配器,它主要分为两级:一级空间适配置器,二级空间配置器。一级空间
  • 知识点目录 考试内容(考试大纲) 基本要求 考试内容 、计算机基础知识 二、Word 的功能和使用 ...计算机二级公共基础知识 计算机的发展、类型及其应用领域 计算机软硬件系统的组成及主要技术指标 计算机中...
  • 、全国计算机软件专业技术资格和水平考试(人事部和信息产业部) 从99年月份起,国家人事部将这项考试作为计算机应用软件人员专业技术任职资格的凭证,在全国首次实行以考代评。国家人事部和信息产业部计算机软件...
  • 【Java面试】第章:P5面试

    万次阅读 多人点赞 2021-03-23 18:50:51
    红黑树和二叉平衡树的区别,红黑树和B树,B+树的区别,Mysql大引擎索引底层实现,HashMap在多线程环境中为何出错?ConcurrentHashMap底层实现,CAS,原子引用,ABA问题,volatile,如何解决HashMap出现的OOM问题?...
  • **:**氧化还原反应: 1:氧化还原反应: 化学反应分为两大类: 有电子转移的反应:如酸碱...碱金属指的是元素周期表中,第主族除了氢之外的元素(包括Li.Na.K.Rb.Cs等),而碱土金属指的是第主族的元素(包括Be
  • 引入:导航栏的功能繁多,选取了几个常用的效果做个练手。...一般来说,用户只是在选择进入某菜单时(未点击)会用到此功能。所以实现起来简单。 功能2:鼠标点击后,菜单保持高亮并跳转到相...
  • NISP一级参考题

    万次阅读 多人点赞 2020-06-06 17:32:32
    上个月刚考完NISP一级(已过),这里是参考题目,希望对大家有帮助 1.与计算机硬件关系最密切的软件是( )。 A、编译程序 B、数据库管理程序 C、游戏程序 D、OS 答案:D \2. 系统的主要功能有( )。 A、进程管理、...
  • ​​​​​​​NISP一级考试题库

    万次阅读 多人点赞 2019-09-02 09:26:59
    NISP一级考试题库,本人以过考试,因为资料是图片转过来得,所有有得地方有乱码,不喜勿喷,仅送给有需要得人。 与计算机硬件关系最密切的软件是()。 A、编译程序 B、数据库管理程序 C、游戏程序 D、OS ...
  • MySQL高级特性四:查询缓存

    万次阅读 2019-02-02 13:16:17
    MySQL在某些场景下也可以实现,但是MySQL还有另种不同的缓存类型:缓存完整的select查询结果,也就是查询缓存。 MySQL查询缓存保存查询返回的完整结果。当查询命中该缓存,MySQL会like返回结果,跳过了解析、优化...
  • 第三阶段在线作业 单选题 (共11道题) 收起 ...1.(2.5分) 反应A + B ...2.(2.5分) 有相同初始浓度的反应物在相同的温度下,经一级反应时,半衰期为t1/2 ;若经二级反应,其半衰期为t1/2',那么 A、t1/2=t1/...
  • 如何判断电脑电源供电不足?

    千次阅读 2021-06-28 10:39:19
    1、开机没有反应;2、不认增加的存储设备 硬盘出现怪声 ;3、不稳定!经常重启和进不了系统 ,影响主板、CPU和内存,造成主板的短路和爆电容;4、运行游戏卡 或者死机花屏 , 排除显卡问题的前提下,电源对主板的...
  • Oracle 高级教程

    万次阅读 多人点赞 2018-06-06 11:10:15
    目录 、Oracle体系结构的概览... 2 、Oracle高级查询... 10 三、Oracle触发器... 18 四、Oracle存储过程... 26 五、Oracle事务... 30 六、Oracle锁... 37 七、Oracle包... 40 八、Oracle游标... 42 九、Oracle...
  • 听力如何提高

    千次阅读 2018-09-19 19:49:13
    如何在英语六听力的高分 1.考前多听   在考试前期,要多加练习听力,力不是天两天就能完成的,要反复练习,是日积月累才能达到的。请记住,世上无难事,只怕有心人。用心去听,不懂得要反复听,对着听力原文...
  • 嵌入式系统三考试终结版2019.3

    万次阅读 2019-03-28 15:25:59
    总结得很晚,很着急,前面是一些知识点(很偏的可能没有),后面是部分错题知识点,全部掌握,不能保证优秀,良好还是可以的,加油吧,祝我和大家... //初始化GPE4~GPE7为输入 //判断键盘中是否有键按下 for(i=1; ...
  • 、实现功能 实现了部分RV32I指令集中的部分指令类型,如下表 具体指令如下: 实现了单周期CPU和五流水线。其中,五流水线为顺序读取、顺序放回;跳转指令可以冲刷流水线;没有预测跳转功能;占用资源较多,微...
  • 章 JavaScript的完整实现包括以下三个部分: 1、核心(ECMAScript),提供核心语言功能。 2、文档对象模型(DOM),提供访问和操作网页内容的方法和接口。 3、浏览器对象模型(BOM),提供与浏览器交互的方法和...
  • 如何判断是否被职场PUA探针及处理

    千次阅读 2021-12-30 12:39:31
    判断自己是否被PUA了? 职场PUA有哪些种类? 职场PUA应对策略。...第次,曾经在A公司工作的时候,像领导提出加薪申请。加薪原因是因为根据工作量的增加以及新技能的习得,再根据招聘网站该岗位的经验和能力判断
  • 基因测序技术发展历史及、三代测序技术原理和应用 红皇后学术 公众号:红皇后学术(ID: zzlphs2516) 已关注 125 人赞同了该文章 基因测序技术 基因测序技术也称作DNA测序技术,即获得目的DNA片段碱基...
  • Mycat高级进阶---事务支持

    万次阅读 2017-03-22 19:48:51
    Mycat里的数据库事务Mycat 目前没有出来跨分片的事务强一致性支持,目前单库内部可以保证事务的完整性,如果跨库事务, 在...XA事务原理分布式事务处理( Distributed Transaction Processing , DTP )指个程序或程
  • 以下问题大部分偏初中级,答案也都是简明扼要,可以在面试时应付一下,免得无点可说在第面就被PASS。如果这些问题能让你快速回忆起平时所学,串联起前后的技能点,在面试时有个好的发挥,也就不费我整理这些面试题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,274
精华内容 22,109
关键字:

判断一级反应二级反应

友情链接: qnetworkproxy_generic.rar