zoukankan      html  css  js  c++  java
  • 数据库杂记

    数据库设计的范式

    • 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

    ​ 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

    ​ 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

    • 分类:
      1. 第一范式(1NF):每一列都是不可分割的原子数据项
      2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
      3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
    • 几个概念:

      1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A

        ​ 例如:学号-->姓名。 (学号,课程名称) --> 分数

      2. 完全函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。

        ​ 例如:(学号,课程名称) --> 分数

      3. 部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。

        ​ 例如:(学号,课程名称) --> 姓名

      4. 传递函数依赖:A-->B, B -- >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A

        ​ 例如:学号-->系名,系名-->系主任

      5. 如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码

        ​ 例如:该表中码为:(学号,课程名称)

    ​ * 主属性:码属性组中的所有属性

    ​ * 非主属性:除过码属性组的属性

    事务隔离级别

    • 概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
    1. 存在问题:

      1. 丢失数据修改:两个事务T1和T2读入同一数据并进行修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被T2覆盖掉了。
      2. 脏读:一个事务,读取到另一个事务中没有提交的数据。
      3. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。
      4. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务第二次读取到的数据总数和第一次不一致(就像幻觉一样)。
    • 隔离级别:

      1. read uncommitted:读未提交

        * 产生的问题:脏读、不可重复读、幻读

      2. read committed:读已提交 (Oracle)

        * 产生的问题:不可重复读、幻读

      3. repeatable read:可重复读 (MySQL默认)

        * 产生的问题:幻读

      4. serializable:串行化

        * 可以解决所有的问题

    ​ * 注意:隔离级别从小到大安全性越来越高,但是效率越来越低

    ​ * 数据库查询隔离级别:select @@tx_isolation;

    ​ * 数据库设置隔离级别:set global transaction isolation level 级别字符串;

    ​ * 演示:

    ​ set global transaction isolation level read uncommitted;

    ​ start transaction;

    ​ -- 转账操作

    ​ update account set balance = balance - 500 where id = 1;

    ​ update account set balance = balance + 500 where id = 2;

  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/i-chase/p/14146630.html
Copyright © 2011-2022 走看看