zoukankan      html  css  js  c++  java
  • SqlServer系列(一)

    三大范式 

      三大范式补充理解 

    第一范式:具有原子性

    之前做开发的时候就遇到一个问题,一个列里面存储了一个Json信息,里面包含了用户,性别等信息,这就明显不符合第一范式,因为这列明显可以再拆分出来用户名,性别等其它列。

    第二范式:主键列与非主键列遵循完全函数依赖关系 非主键列必须通过主键(包括联合主键)确认出来,如果某列和联合主键中的某一列相关,和其它无关,那就不符合第二范式,换句话说就是一张表只描述一个对象!!  

    反例:一个表既存储了部门信息,用户信息,包含了部门信息的字段,同时也包含了用户信息的字段;表的职责不清晰,一个表做了多个表的事儿!

    第三范式:非主键列之间没有传递函数依赖关系 就是说非主键列不能通过其他非主键列确认出来   

    主键

    自增ID 

    数据库自动增加,int/bigint/ SqlServer默认是聚集索引,聚集索引确定了表中数据的物理排序。

    优点:查询效率高,其实是进行了排序,空间小;

    缺点:数据迁移的成本高,不同的数据库Id会冲突;

    GUID

    缺点:存储空间大,没有排序,查询效率相对较差。

    优点:数据迁移方便,值全球唯一。

    如果对于数据的性能要求十分严格,并且这个数据库基本不可能变化,不可能有数据迁移的情况,可以使用递增ID,否则还是使用GUID

    外键

    描述数据关系的,规范数据关系 ;可以做数据校验;还可以做级联删除;

    使用场景

    如果数据精度要求高,就可以使用外键;性能会有所损耗! 其实在互联网项目开发中,一般都没有使用外键; 通过程序来限定(虚拟外键,就是不使用数据库中的外键关系做约束)

  • 相关阅读:
    C++标准转换运算符(2)
    C++标准转换运算符(1)
    未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于……
    我的第一篇博客
    C语言C语言程序
    C语言基本运算符
    C语言流程控制
    C语言关键字、标识(zhi)符、注释
    msado15.dll版本引发的离奇故障
    mySQL错误: The used table type doesn't support FULLTEXT indexes
  • 原文地址:https://www.cnblogs.com/anjingdian/p/15334771.html
Copyright © 2011-2022 走看看