数据库,不是第二范式可以是第三范式吗? 10

详细说明下... 详细说明下 展开
 我来答
重庆新华电脑学校
2022-01-03 · 学动漫、设计、电竞、电商、短视频、软件等
重庆新华电脑学校
重庆新华电脑学校隶属于新华教育集团,经重庆市人力资源和社会保障局审批成立的重庆地区大规模IT人才教育基地。是国家信息化教育全国示范基地,中国IT教育十大影响力品牌学校。
向TA提问
展开全部

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。考虑一个订单明细表OrderDetail其属性如下:               (OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。
因为我们知道在一个订单中可以订购多种产品,所以单单一个OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF的设计容易产生冗余数据。

可以把OrderDetail表拆分为:

  • OrderDetail(OrderID,ProductID,Discount,Quantity)

  • Product (ProductID,UnitPrice,ProductName)

  • 来消除原订单表中UnitPrice,ProductName多次重复的情况。
    第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。考虑一个订单表Order:      (OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。
    其中OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity
    等非主键列都完全依赖于主键(OrderID),所以符合 2NF。

    不过问题是CustomerName,CustomerAddr,CustomerCity 直接依赖的是
    CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
    通过拆分Order为Order(OrderID,OrderDate,CustomerID)和Customer(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

CVVDZVD

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
大橘道长
2022-01-03 · 超过107用户采纳过TA的回答
知道小有建树答主
回答量:1171
采纳率:100%
帮助的人:24.7万
展开全部
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。考虑一个订单明细表OrderDetail其属性如下: (OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。
因为我们知道在一个订单中可以订购多种产品,所以单单一个OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF的设计容易产生冗余数据。

可以把OrderDetail表拆分为:

OrderDetail(OrderID,ProductID,Discount,Quantity)

Product (ProductID,UnitPrice,ProductName)

来消除原订单表中UnitPrice,ProductName多次重复的情况。
第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。考虑一个订单表Order: (OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。
其中OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity
等非主键列都完全依赖于主键(OrderID),所以符合 2NF。

不过问题是CustomerName,CustomerAddr,CustomerCity 直接依赖的是
CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
通过拆分Order为Order(OrderID,OrderDate,CustomerID)和Customer(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

CVVDZVD
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
葱漫卡阳17

2022-06-29 · 超过14用户采纳过TA的回答
知道答主
回答量:963
采纳率:70%
帮助的人:23.1万
展开全部
第一范式:第一范式要求每列必需是最小的原子单元,即不能再分。第二范式:第二范式要求每列必需和主键相关,不相关的列放入别的表中,即要求一个表只描述一件事情。第三范式:第三范式要求表中各列必需和主键直接相关,不能间接相关,浏览每个表,都满足第三范式要求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
机了点0I

2022-06-28 · 贡献了超过810个回答
知道答主
回答量:810
采纳率:41%
帮助的人:25.6万
展开全部
第一范式:第一范式要求每列必需是最小的原子单元,即不能再分。第二范式:第二范式要求每列必需和主键相关,不相关的列放入别的表中,即要求一个表只描述一件事情。第三范式:第三范式要求表中各列必需和主键直接相关,不能间接相关,浏览每个表,都满足第三范式要求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
十七只糖

2022-06-30 · TA获得超过496个赞
知道小有建树答主
回答量:9120
采纳率:94%
帮助的人:225万
展开全部
不行,数据库不是第二范式不能是第三范式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式