温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

2.3.1关于规范化

发布时间:2020-08-09 07:40:23 来源:网络 阅读:217 作者:彭思棋 栏目:大数据

规范化是一个数据设计过程,其高级目标是将每个事实保持在一个位置,以避免数据冗余以及插入,更新和删除异常。有多个级别的规范化,本节将介绍前三个级别。考虑到第三范式(3NF)项是多么基本,只看到如何达到3NF才有意义。

考虑一种跟踪销售情况的情况。您跟踪的核心实体是销售订单,其中每个销售订单包含有关所购买的每个项目的详细信息(称为行项目):其名称,价格,数量等。该订单还包含客户的名称和地址等。有些订单有很多不同的订单项,有些订单只有一个。

在第一范式(1NF)中,没有重复的数据组,也没有重复的行。行和列(字段)的每个交集都只包含一个值,并且没有包含相同事实的列组。为避免重复行,有一个主键。对于销售订单,在第一范式中,不显示表格的单个字段中的每个销售订单的多个行项目。此外,不会有多个列显示订单项。

然后是第二范式(2NF),其中设计是第一范式,每个非键列依赖于完整的主键。因此,订单项会分为销售订单行项目表,其中每行代表一个订单的一个订单项。您可以查看订单项表,并查看所售商品的名称不依赖于订单项表的主键:销售商品是其自己的实体。因此,您将销售项目移动到其自己的表格,显示项目名称。每件商品的价格可能因订单而异(例如,由于折扣),因此这些价格保留在订单项表中。对于销售订单,客户的名称和地址不依赖于销售订单的主键:客户是其自己的实体。从而,

接下来是第三范式,其目标是确保不依赖于非关键属性。因此,目标是获取与行的主题(主键)不直接相关的列,并将它们放在自己的表中。因此,有关客户的详细信息(例如客户名称或客户城市)应放在单独的表中,然后将客户外键添加到订单表中。

2NF表与3NF表的不同之处的另一个例子是网球锦标赛的获胜者表,其中包含锦标赛,年份,获胜者和获胜者出生日期的列。在这种情况下,获胜者的出生日期很容易出现不一致,因为同一个人可能会在不同的记录中显示出生日期。避免这个潜在问题的方法是将桌子分成一个用于比赛获胜者,另一个用于球员出生日期

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI