当前位置: 首页 > news >正文

黎平网站建设网站常见的风格

黎平网站建设,网站常见的风格,十大求职招聘app排行,万站群cms系统数据库的设计规范 文章目录 数据库的设计规范1. 范式2. 键和相关属性的概念3. 第一范式4. 第二范式5. 第三范式6. 小结7. 反范式化7.1 概述7.2 反范式的新问题7.3 反范式适用场景 8. 巴斯范式9. 第四范式、第五范式和域键范式 1. 范式 在关系型数据库中#xff0c;关于数据表…数据库的设计规范 文章目录 数据库的设计规范1. 范式2. 键和相关属性的概念3. 第一范式4. 第二范式5. 第三范式6. 小结7. 反范式化7.1 概述7.2 反范式的新问题7.3 反范式适用场景 8. 巴斯范式9. 第四范式、第五范式和域键范式 1. 范式 在关系型数据库中关于数据表设计的基本原则、规则就称为范式。范式的英文名称是 Normal Form 简称 NF 。它是英国人 E.F.Codd 在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础也是我们在设计数据库结构过程中所要遵循的 规则 和 指导方法。 目前关系型数据库有六种常见范式按照范式级别从低到高分别是: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF) 、巴斯-科德范式 (BCNF)、第四范式(4NF) 和第五范式 (5NF又称完美范式) 在关系型数据库设计中一般最高也就遵循到 BCNF 普遍还是 3NF 。但也不绝对有时为了提高查询性能我们还需要破坏范式规则也就是 反规范化 2. 键和相关属性的概念 范式的定义会使用到主键和候选键数据库中的键(Key)由一个或者多个属性组成。数据表中常用的几种键和属性的定义 超键能唯一标识元组的属性集叫做超键候选键如果超键不包括多余的属性那么这个超键就是候选键主键用户可以从候选键中选择一个作为主键外键如果数据表 R1 中的某属性集不是 R1 的主键而是另一个数据表 R2 的主键那么这个属性集就是数据表 R1 的外键主属性包含在任一候选键中的属性称为主属性非主属性与主属性相对指的是不包含在任何一个候选键中的属性 通常我们也将候选键称之为“码”把主键也称为“主码”。因为键可能是由多个属性组成的针对单个属性我们还可以用主属性和非主属性来进行区分。 举例 这里有两个表 球员表(player) 球员编号 | 姓名 | 身份证号 | 年龄 | 球队编号 球队表(team) 球队编号 | 主教练 | 球队所在地 超键 对于球员表来说超键就是包括球员编号或者身份证号的任意组合比如球员编号球员编号姓名身份证号年龄等。 候选键 就是最小的超键对于球员表来说候选键就是球员编号或者身份证号。 主键 我们自己选定也就是从候选键中选择一个比如球员编号。 外键 球员表中的球队编号。 主属性 、 非主属性 在球员表中主属性是球员编号身份证号其他的属性姓名年龄球队编号都是非主属性。 3. 第一范式 第一范式主要是确保数据表中每个字段的值必须具有 原子性也就是说数据表中每个字段的值为 不可再次拆分的最小数据单元。 比如一张人员信息表有的人有多个手机号如果设计一行数据中一个字段使用number1number2…的方式存储或者一个字段存储多种信息则违反了第一范式。 解决方案将单个字段中的多个属性拆出来分别另分字段存储 4. 第二范式 第二范式要求在满足第一范式的基础上还要满足数据表里的每一条数据记录都是可唯一标识的。而且所有非主键字段都必须完全依赖主键不能只依赖主键的一部分。如果知道主键的所有属性的值就可以检索到任何元组 (行)的任何属性的任何值。(要求中的主键其实可以拓展替换为候选键)。 举例说明 比赛表 player_game 里面包含球员编号、姓名、年龄、比赛编号、比赛时间和比赛场地等属性这里候选键和主键都为球员编号比赛编号我们可以通过候选键或主键来决定如下的关系 (球员编号, 比赛编号) → (姓名, 年龄, 比赛时间, 比赛场地得分)但是这个数据表不满足第二范式因为数据表中的字段之间还存在着如下的对应关系部分依赖 (球员编号) → (姓名年龄) (比赛编号) → (比赛时间, 比赛场地)对于非主属性来说并非完全依赖候选键会产生如下问题 数据冗余一个球员可以参加 m 场比赛那么球员的姓名和年龄就重复了 m-1 次。一个比赛也可能会有 n 个球员参加比赛的时间和地点就重复了 n-1 次插入异常如果我们想要添加一场新的比赛但是这时还没有确定参加的球员都有谁那么就没法插入删除异常如果我要删除某个球员编号如果没有单独保存比赛表的话就会同时把比赛信息删除掉更新异常如果我们调整了某个比赛的时间那么数据表中所有这个比赛的时间都需要进行调整否则就会出现一场比赛时间不同的情况 为了避免出现上述的情况我们可以把将原部分依赖关系的字段选出作为新表即球员比赛表设计为下面的三张表 表名属性字段球员player表球员编号、姓名和年龄等属性比赛game表比赛编号、比赛时间和比赛场地等属性球员比赛关系player_game表球员编号、比赛编号和得分等属性 这样的话每张数据表都符合第二范式也就避免了异常情况的发生 1NF 告诉我们字段属性需要是原子性的而 2NF 告诉我们一张表就是一个独立的对象一张表只表达一个意思 小结第二范式2NF要求实体的属性完全依赖主关键字。如果存在不完全依赖那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体新实体和元实体是一对多的关系 5. 第三范式 第三范式是在第二范式的基础上确保数据表中的每一个非主键字段都和主键字段直接相关也就是说要求数据表中的所有非主键字段不能依赖于其他非主键字段(即不能存在非主属性 A 依赖于非主属性 B非主属性B 依赖于主键C的情况即存在“A→B→C”的决定关系)通俗地进该规则的意思是所有 非主键属性 之间不能有依赖关系必须 相互独立这里的主键可以拓展为候选键。 举例说明 订单表order里面包含订单id产品id产品名称产品数量通过候选键来决定如下关系 (订单id) → (产品id产品名称产品数量)其中产品名称又依赖于产品id这违反了第三范式可将该部分依赖关系分离出来 (订单id) → (产品id产品数量) (产品id) → (产品名称)符合3NF的数据模型通俗的讲“每个非键属性依赖且只依赖于主键” 6. 小结 关于数据库表的设计有三个范式要遵循 第一范式确保每列的 原子性第二范式确保每列都与主键 完全依赖第三方式确保每列都和主键列 直接相关而不是间接相关 范式的优点数据的标准化有助于消除数据库中的 数据冗余第三范式(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好的平衡。 范式的缺点范式的使用可能 降低查询的效率。因为范式等级越高设计出来的数据表就越多、越精细数据的冗余度就越低进行数据查询的时候就可能需要 关联多张表这不但代价昂贵也可能使一些 索引策略无效。 范式只是提出了设计的标准实际上设计数据表时未必一定要符合这些标准。开发中我们会出现为了性能和读取效率违反范式化的原则通过 增加少量的冗余 或重复的数据来提高数据库的 读性能减少关联查询join 表的次数实现 空间换取时间 的目的。因此在实际的设计过程中要理论结合实际灵活运用。 范式本身没有优劣之分只有适用场景不同。没有完美的设计只有合适的设计我们在数据表的设计中还需要根据需求将范式和反范式混合使用。 7. 反范式化 7.1 概述 通过 增加冗余字段 提升查询的性能使用该范式主要遵循业务优先的原则 规范化 vs 性能 为满足某种商业目标 , 数据库性能比规范化数据库更重要在数据规范化的同时 , 要综合考虑数据库的性能通过在给定的表中添加额外的字段以大量减少需要从中搜索信息所需的时间通过在给定的表中插入计算列以方便查询 比如商品流水表中经常要通过流水表中商品id关联看商品名称就可考虑将商品名称一起加入到商品流水表中就无需再关联查表可达到加快查询的目的 7.2 反范式的新问题 存储 空间变大 了一个表中字段做了修改另一个表中冗余的字段也需要做同步修改否则 数据不一致在 数据量小 的情况下反范式不能体现性能的优势可能还会让数据库的设计更加 复杂 7.3 反范式适用场景 当 冗余信息有价值 或者能 大幅度提高查询效率 的时候我们才会采取反范式的优化。 1.增加冗余字段的建议 这个冗余字段 不需要经常进行修改这个冗余字段 查询的时候不可或缺 2.历史快照、历史数据的需要 在现实生活中我们经常需要一些冗余信息比如订单中的收货人信息包括姓名、电话和地址等。每次发生的 订单收货信息 都属于 历史快照 需要进行保存但用户可以随时修改自己的信息这时保存这些冗余信息是非常有必要的。 反范式优化也常用在 数据仓库 的设计中因为数据仓库通常 存储历史数据 对增删改的实时性要求不强对历史数据的分析需求强。这时适当允许数据的冗余度更方便进行数据分析。 8. 巴斯范式 人们在 3NF 的基础上进行了改进提出了巴斯范式 (BCNF)也叫做巴斯科德范式 (Boyce-Codd Normal Form)。BCNF被认为没有新的设计规范加入只是对第三范式中设计规范要求更强使得数据库冗余度更小。所以称为是 修正的第三范式或 扩充的第三范式 BCNF不被称为第四范式。 若一个关系达到了第三范式并且它只有一个候选键或者它的每个候选键都是单属性则该关系自然达到BC范式它在3NF的基础上消除了主属性对候选键的部分依赖或者传递依赖关系 一般来说一个数据库设计符合3NF或BCNF就可以了 举例说明 有一个 仓库表 其中包含字段仓库名管理员物品名数量这其中(仓库名物品名)和管理员物品名都是候选键先选定(仓库名物品名)为主键 判断是否符合三范式 首先数据表每个属性都是原子性的符合 1NF 的要求 其次数据表中非主属性”数量“都与候选键全部依赖仓库名物品名决定数量管理员物品名决定数量。因此数据表符合 2NF 的要求 最后数据表中的非主属性不传递依赖于候选键。因此符合 3NF 的要求。 存在的问题 插入异常增加一个仓库但是还没有存放任何物品。根据数据表实体完整性的要求主键不能有空值因此会出现插入异常如果仓库更换了管理员我们就可能会 修改数据表中的多条记录 问题解决 首先我们需要确认造成异常的原因主属性仓库名对于候选键管理员物品名是部分依赖的关系这样就有可能导致上面的异常情况。因此引入BCNF它在 3NF 的基础上消除了主属性对候选键的部分依赖或者传递依赖关系。 那么我们可以进行以下的调整拆分成2个表 仓库表(仓库名) → (管理员) 库存表(仓库名) → (物品名数量)这样就不存在主属性对于候选键的部分依赖或传递依赖上面数据表的设计就符合 BCNF。 9. 第四范式、第五范式和域键范式 这三种范式因为实际开发中一般不考虑使用且相对来说比较复杂想要了解时自行查阅资料这里不做记录。
http://www.sadfv.cn/news/317279/

相关文章:

  • 上海网站设计哪家公司好有凡客模版怎么建设网站
  • 家具设计手绘镇江网站排名优化
  • 著名的网站建设平台企业百度网站怎么做
  • 泉州企业自助建站公司建设网站需要什么资质
  • 京网站建设品牌营销的概念
  • 网站建设销售提成多少事业单位网站建设方案
  • 资源网站不好找了wordpress前端开发教程
  • 免费自建手机网站网站显示危险网站
  • 国外无版权图片网站网站推广应该坚持什么策略
  • 网店营销网站网站优化塔山双喜
  • 自己做网站是用什么软件一般做网站用什么字体
  • 一级a做爰片迅雷网站建设银行国际互联网网站
  • 网站建设应该有什么特点什么是成交型网站建设
  • 可以做免费推广的网站怎样创建一个自己的网站
  • 做网站怎么买服务器吗创建网页模板的作用
  • 江苏建设教育考试网站如何向百度提交站点收录信息
  • 上海建设网站哪家好网站连接微信支付
  • 天津建设合同备案网站网页设计师培训无锡
  • 沈阳城市建设管理学校网站wordpress 更改数据库密码
  • 滨海做网站找哪家好正规seo关键词排名网络公司
  • 嘉峪关市建设局建管科资质网站网站系统制作
  • 商城网站建设如何定制开发电商网站建设公司
  • 做网站是用什么语言做成的长沙环路建设开发有限公司网站
  • 网站备案信息页面兼职做网站这样的网站
  • 台州市建设项目规划网站七牛sdk wordpress
  • html网站分页怎么做的软件开发公司名字大全
  • 建设银行佛山分行网站中文网站怎么做英文版
  • 网站开发推进计划表网页设计标准的尺寸是多少
  • asp.net 旅游网站开发做网站应该注意些什么问题
  • 怎么在网上免费做公司网站可以看帖子的网站