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要求要“精”,选取合适的字段作为一张数据表,减少冗余;

  • 相关阅读:
    Window 中的自带方法Base64
    React_Class1
    npm 常用操作
    React__生命周期
    axios 简单方法个人理解
    JavaScript_Window对象
    常见的搜索引擎技巧
    JS_String常见问题Demo
    java调用C++代码
    java虚拟机指令dup的理解
  • 原文地址:https://www.cnblogs.com/xujanus/p/3456214.html
Copyright © 2011-2022 走看看