zoukankan      html  css  js  c++  java
  • 关系型数据库范式详解

    数据库的范式就是数据库开发设计过程中的规范,由满足条件逐渐提升规范类别,有1NF到6NF级别划分,较高级别是在满足较低级别规范的情况下上升的。这种数据库的规范利于数据库的简洁、逻辑清晰明确。

    第一范式 无重复的列

    第一范式的要求是同一列中不能有多个值,属性不可以重复比如:

    名称 类型
    颜色类型 品种类型
    苹果 红色 红富士
    橘子 橙色 柑桔
    类型这个属性可以再进行划分,所以不满足关系型数据库的概念,以上的数据库表设计可以用在非关系型的数据库中,比如Hbase中,每一列可以划分为若干的列族。

    第二范式 非主属性依赖于主键

    在满足第一范式的基础上,第二范式是为了每条数据可以被某列值唯一的区分,通常可以使用id来作为每一条数据的唯一标识。例如以上的表中可能包含很多种水果,加入我们使用name作为唯一的主码,而我们如果增加了多条不同的苹果数据,那么我们查询或者删除都无法定位到具体的数据,所以我们需要给每一条数据增加一个id,用来区分每一条数据。

    Id 名称
    颜色类型 品种类型
    1 苹果 红色 红富士
    2 橘子 橙色 柑桔

    第三范式 属性不依赖于其它非主属性

    在满足前两个范式的基础上,第三范式要求属性不依赖于其它非主属性,假设给上述表添加字段品种产地,品种特色,那么就构成了 id ->品种 ->品种产地,品种特色,就会发现品种产地以及品种特色都会依赖于品种类型,这种设计会造成后续的更改,删除等异常错误,正确的做法是新建一个品种表:

    品种类型 品种产地 品种特色
    红富士 土耳其 干脆
    柑桔 浙江 酸甜

    第四范式 不存在多对多关系

    在以上的品种表中,一个品种名可以对应多个生产地,比如柑桔生产于南方多个省市,那么这里就构成了一对多的关系,而品种特色可以有多种特色,比如可以有干脆、脆甜、肉质饱满等,这里就出现了多对多的关系,故品种表不符合第四范式,解决方法就是拆分成多个表即分为 品种名:品种产地 和品种名:品种特色两张表。

  • 相关阅读:
    Auto Mapper01
    一个ActionResult中定位到两个视图—<团委项目>
    网站根目录的问题
    数据库基础和断点调试
    linux 环境下jmeter+ant+jenkins
    Postman 下载和使用
    用ExtentReports美化你的测试报告
    extentreports报告插件与testng集成
    SourceTree使用图解
    charles4.2下载与破解方法以及配置https
  • 原文地址:https://www.cnblogs.com/supershuai/p/12822325.html
Copyright © 2011-2022 走看看