• 关系型数据库


    有了理论才能有实践,所以理论也是很重要的。

    关系

    其实所谓关系,在数学上的定义就是笛卡尔积的一个子集。

    例如有两个集合:

    s1 ={a,b}

    s2 = {1,2}

    那s1和s2的笛卡尔积就是 :

    s1 × s2 = {(a,1),(a,2),(b,1),(b,2)}

    那么S 的任意一个子集都是关系:

    {(a,1),(a,2)} 是一个“关系”

    {(a,2), (b,1),(b,2)} 是另外一个“关系”

    {(b,2)} 也是关系

    ......

    如果你把s1和s2竖起来看,把s1看做列x能取值的集合, s2看做列y 能取值的集合, 那(x, y)它不就是一张表吗?

    事务ACID

    原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

    数据库范式

    第一范式是基本要求,即每个列都是不分割的数据项, 如果连这个都满足不了,还是洗洗睡吧。

    第二范式要求实体属性要完全依赖主键,不能依赖部分主键。

    第三范式就是一个表中不能包含其它表中已包含的非主关键字信息。不严谨地说就是这个表只包含其他表的ID。

    一般来说,你们都会遵循第一和第二范式, 但是为了性能,为了避免过多的join, 有时候会违反第三范式,冗余一些字段的信息, 这我都可以理解。

    索引

      经常会问到主键和索引有什么区别?主键就是用于强制表的实体完整性,对应上面的第二范式,所以不能为空。而索引是对数据行的排序,方便查询用。在SQLServer中,主键的创建必须依赖于索引,默认创建的是聚集索引(也可以是非聚集索引)。如果对索引执行强制删除,主键也会被跟着一起删除,所以主键必须依赖于索引的观点暂时是正确的。

      聚集索引(Clustered Index)

        每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。只有当表包含聚集索引时,表中的数据行才按排序顺序存储。
      如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。

      非聚集索引(NonClustered Index)

      覆盖索引

        覆盖索引是在SQLServer2005中引入的概念,只能建立在非聚集索引的基础上,通常情况下,非聚集索引的索引页是不包含真实数据的,只存储着指向数据页中数据行的指针,

      而覆盖索引则是通过将数据存储在索引页上,从而在查找对应数据的时候,只要找到索引页就可以访问到数据,无需再去查询数据页,所以说这个索引是数据“覆盖”的。

    参考:

  • 相关阅读:
    结对作业评分
    Week6&7——第一次项目冲刺(Alpha版本)
    软工辅修团队项目选题参考
    Week5——团队选题&需求分析
    Week4——结对练习&团队作业1
    nginx与Apache的对比以及优缺点
    oracle数据库-错误编码大全
    spring MVC原理
    Java操作Memcached
    zookeeper应用场景-java
  • 原文地址:https://www.cnblogs.com/bigbrid/p/9102715.html
Copyright © 2020-2023  润新知