热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

数据库转储的意义是什么(什么是第一范式,第二范式,第三范式)

目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。显而易见Discount(折扣),Quantity(数量)完全依赖(取决)于


范例:英文名为Normal Form,这是英国人E.F.Codd (关系数据库的祖先)在20世纪70年代提出关系数据库模型后总结的,范例是关系数据库存储目前有痕迹的共有8种范式,依次为1NF、2NF、3NF、BCNF、4NF、5NF、DKNF、6NF。 通常仅使用前三种范式:第一范式(1NF )、第二范式(2NF )、第三范式(3NF )。 让我简单介绍一下这三种范式。 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。


我会考虑这样的表。 【联系方式】(姓名、性别、电话) )。


在实际情况下,如果某个联系人有家庭电话和公司电话,这个表结构设计还没有达到1NF。 要配合1NF,分割列(电话)就可以了。 即【联系方式】(姓名、性别、家庭电话、公司电话)。 1NF容易分辨,但2NF和3NF容易混淆。 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。


想想订单明细表吧。 【订单详细信息】(OrderID、ProductID、UnitPrice、Discount、Quantity、ProductName )。


因为知道一个订单可以订购多个产品,所以只有一个OrderID不能成为主键。 主键必须为(OrderID,ProductID )。 显然,“Discount (折扣)”、“Quantity (质量)”和“数量”完全取决于主键(OderID、ProductID ) ),而“UnitPrice”和“ProductName”仅取决于产品id。 所以订单详细信息表不适合2NF。 不符合2NF标准的设计容易产生冗馀的数据。


将【OrderDetail】表更改为【OrderDetail】(OrderID、ProductID、Discount、Quantity )和【Product】) ProductID、UnitPrice、Product


认为订单表单【Order】(OrderID、OrderDate、CustomerID、CustomerName、CustomerAddr、CustomerCity )的主键为) OrderID


其中,OrderDate、CustomerID、CustomerName、CustomerAddr、CustomerCity等非主键列都依赖于主键(OrderID ),因此为2NF 但是,问题是客户名称、客户addr、客户city不是直接依赖主键,而是直接依赖客户id (非主键列),因为它只有传递后才依赖主键,所以3nn


【Order】为【Order】(OrderID,OrderDate,Customer )和【Customer】(CustomerID,CustomerName,CustomerAddr,customerer )


第二范式(2NF )和第三范式)的概念容易混淆,但区分它们的关键在于 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。


推荐阅读
  • LIN总线技术详解
    LIN(Local Interconnect Network)总线是一种基于UART/SCI(通用异步收发器/串行接口)的低成本串行通信协议,主要用于汽车车身网络中智能传感器和执行器之间的通信。 ... [详细]
  • A1166 峰会区域安排问题(25分)PAT甲级 C++满分解析【图论】
    峰会是指国家元首或政府首脑之间的会议。合理安排峰会的休息区是一项复杂的工作,理想的情况是邀请的每位领导人都是彼此的直接朋友。 ... [详细]
  • 2022年4月15日的算法练习题,包括最长公共子序列和线段树的应用。 ... [详细]
  • 使用Pandas DataFrame探索十大城市房价与薪资对比
    在本篇文章中,我们将通过Pandas库中的DataFrame工具,深入了解中国十大城市的房价与薪资水平,探讨哪些城市的生活成本更为合理。这是学习Python数据分析系列的第82篇原创文章,预计阅读时间约为6分钟。 ... [详细]
  • 最新进展:作为最接近官方声明的信息源,本文吸引了大量关注。若需获取最新动态,请访问:lkhill.com/ccie-version-5-update ... [详细]
  • 本文深入分析了在使用JavaScript中的Date.UTC()方法初始化Date对象时,getDay()方法返回值与预期不符的原因,并提供了相应的解决方案。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • 本文探讨了在iOS开发中如何利用WKWebView实现H5页面与原生应用的高效融合。通过具体案例分析,展示了一种新颖的方法来解决H5页面内容高度的动态获取问题,旨在为开发者提供实用的技术参考。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 本文介绍如何使用 Python 计算两个时间戳之间的时间差,并将其转换为毫秒。示例代码展示了如何通过 `time` 和 `datetime` 模块实现这一功能。 ... [详细]
author-avatar
那年磕长头
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有