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

    数据三大范式:建立科学的,规范的的数据库是需要满足一些条件。

    理解三大范式

    第一范式

    第一范式是表中的所有字段值都是不可分解的原子值否则,将有很多基本操作在这样的关系模式中实现不了。

    第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到地址这个属性,本来直接将地址属性设计成一个数据库表的字段就行。但是如果系统经常会访问地址属性中的城 市部分,那么就非要将地址这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算 满足了数据库的第一范式。

     第二范式对象的单一性

    确保表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。在一个表中,一个表中只能保存一种数据

    比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

     

     

    这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

    而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

    第三范式[对象的纯粹性]

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

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

    这样的表结构,我们应该拆开来,如下。(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

     

  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/sdpdf/p/4199145.html
Copyright © 2011-2022 走看看