zoukankan      html  css  js  c++  java
  • 数据库设计:关于范式的理解

    前言:这是一篇我以前写的关于数据库设计当中范式理解的笔记,现在转到博客园上来。

    书本上关于范式的内容太抽象,难易理解,更难记忆。所以去网上搜罗了一些资料,结合自己的经验,用较为直白的语言总结下关于范式的内容:

    第一范式(1NF)

    原文:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。

    个人理解:设计一张表的字段的时候,要结合实际需求,设计详细完整的字段。

    例如:设计一张投票的表时,如果只设计了一个“住址”的字段,而实际情况却是有关于“住址”的国家、城市、地区3个属性的值,那这个表设计的就是不合理的,不符合第一范式的。

    第二范式(2NF)

    原文:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF

    个人理解:不要使用组合键作为码,而添加一个流水号ID,即可满足第二范式。

    PS.第二范式要求数据库表中的每个实例或行必须可以被唯一地区分。

    第三范式(3NF)

    关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z ? Y), 使得X→Y,Y→Z,成立,则称R<U,F> ∈ 3NF。

    简单的说:第三范式是为了消除数据库中关键字之间的依赖关系

    个人理解:设计表的时候,结合实际功能需求,将一定的独立数据或者有依赖关系的数据,分离出去成为一张新的表。

    例如:建用户表的时候,如果用户的权限分级较多,可以分离出一张角色表。再打个比方,比如评论表,如果你将用户ID,用户头像都放在这留言表中,就是不合适的了。用户头像是依赖于用户ID,而不依赖该评论。

           一般,一个数据库设计符合第三范式就可以了。在第三范式以上还有BC范式、第四范式、第五范式。但在绝大多数应用中不需要设计到这种程度。并且,某些情况下,过于范式化甚至会对数据库的逻辑可读性和使用效率起到阻碍。

            一个严格恪守数据库设计范式来进行数据库设计的人,必定是个傻球;
           一个没有研究过数据库设计范式就进行数据库设计的人,必定也是个傻球

           上面这2句话是网上一条关于范式的评论。不过也道出了我关于范式的心声:理论毕竟是理论,结合实际开发出真正合适的系统才是最重要的。关于范式的理论需要借鉴和注意,但结合实际业务反复研究和修改更才是王道。

    最后用自己的话关于范式的总结:

    1NF要求要“细”,分析所有可能需求,记录详细字段;

    2NF要求要“唯一”,每条记录要有唯一性,要有唯一标识;

    3NF要求要“精”,选取合适的字段作为一张数据表,减少冗余;

  • 相关阅读:
    yii2.0缓存的使用
    yii2.0框架where条件的使用
    yii2.0自带验证码使用
    spring中MessageSource的配置使用方法1[转]
    DOM、JDOM、DOM4J的区别
    探秘Java虚拟机——内存管理与垃圾回收
    MySQL开发规范和原则大全
    Java Classloader机制解析
    Junit之测试顺序---FixMethodOrder
    MySQL的btree索引和hash索引的区别
  • 原文地址:https://www.cnblogs.com/xujanus/p/3456214.html
Copyright © 2011-2022 走看看