zoukankan      html  css  js  c++  java
  • 数据库设计范式

    什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

    什么是三大范式:

    第一范式:数据库表的每一列都是不可分割的原子数据项时,称R是满足第一范式的,简记为1NF。

    第二范式:要求实体的属性完全依赖于主关键字。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

    第三范式:在1NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。

    注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性。

    理解三大范式

    第一范式

       1、每一列属性都是不可再分的属性值,确保每一列的原子性。

       2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

     

     

     

    如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。

     

     

     

    显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。

     

    第二范式

     

    每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

     

     

    一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

     

     

     

     

     

    这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

     

    第三范式

     数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

    比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

    这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

    这样的表结构,我们应该拆开来,如下。

    (学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

     

    最后:

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/Nickzerui/p/4872005.html
Copyright © 2011-2022 走看看