zoukankan      html  css  js  c++  java
  • Java基础88 数据库设计的三大范式

    数据库的设计原则:建议设计的表尽量遵守三大范式

    1、第一范式    

    要求表的每个字段必须是不可分割的独立单元

    1 Student表:    name       -- 违反了第一范式
    2              张三/二狗子  
    应改为:
    4 Student表:    name      oldName   -- 符合第一范式 5                张三      二狗子

    解析:如上所示,当name这个字段有两种属性值的时候,就应当再加一个字段,将其分开

    2、第二范式    

    在第一范式的基础上要求每张表只表示一个意思表的每个字段都和表的主键有依赖

    1 Employee表:员工编号  员工姓名  部门编号  订单名称(应改为订单编号,且再加一张订单表)   -- 符合第一范式,但违反了第二范式
    2 
    3 应改为:
    4 Employee表:员工编号  员工姓名  部门编号  订单编号   -- 符合第二范式
    5      订单表:订单编号  订单名称    

    解析:如上所示,“员工编号”、“员工姓名”、“部门编号”可作为一张表,表示一个意思;“订单名称”也可作为一张表,表示另一个意思。且“员工姓名”、“部门编号”可依赖主键“员工编号”;“订单名称”应该再创建一张订单表,依赖于订单表的主键“订单编号”。

    3、第三范式    

    在第二范式的基础上,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系

    1 Employee表:员工编号(主键)  员工姓名   部门编号  部门名称  -- 符合第二范式,但违反了第三范式(数据冗余高)  [部门名称字段 数据冗余了]
    2 
    3 应改为:
    4 Employee表:员工编号(主键)  员工姓名   部门编号   -- 符合第三范式(降低数据冗余)
    5 部门表:部门编号(主键)  部门名称

    解析:如上所示,员工编号(主键)可直接决定“员工姓名”、“部门编号”,但 不能直接决定“部门名称”;否则就违反了第三范式(依赖关系重复了,且造成数据冗余),应该再创建一张部门表,由主键“部门编号”来决定“部门名称”

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/10549839.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    Spring异步调用注解@Async的使用
    maven 打包前 Junit 测试
    windows 访问局域网共享文件
    IBM MQ 集成CXF 发送JMS 消息
    VO、DTO、DO、PO的概念、区别和用处
    myeclipse创建的项目发布不了文档
    js获取jsp上下文地址
    Maven编译时,出现找不到符号
    Cause: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.ibatis.mapping.MappedStatement
    使用IDEA从github中下载fastdfs-client-java
  • 原文地址:https://www.cnblogs.com/dshore123/p/10549839.html
Copyright © 2011-2022 走看看