【问题标题】:Database Normalization into 2NF数据库规范化为 2NF
【发布时间】:2016-04-02 11:05:20
【问题描述】:

我得到了一个潜在的数据库解决方案。我拥有的实体之一称为“订单”,它包括属性:

  • Sum_Of_Req
  • Served_By
  • 服务名称
  • 客户反馈
  • Customer_Email
  • Requirement_Date
  • Served_Time

我需要找到一个复合键,这样我才能将此关系放入 2NF(因此每个属性在功能上都完全依赖于主键(在这种情况下,我觉得它是一个复合键))。但是,我看不出哪两个可以唯一标识一个订单。

请注意:我无法添加“订单#”或类似内容。不幸的是(尽管非常明显和简单)我的讲师特别指出我们不允许使用唯一 ID。

【问题讨论】:

  • Customer_Email 和 Served_Time?这是假设这些意味着“在时间 Y 由 X 排序”,并且这以独特的方式定义了一个顺序。您应该提供更多信息,说明每列所代表的内容以及您迄今为止尝试过的内容(以及您认为它不起作用的原因)。
  • @Sam 老实说,他没有向我们解释属性,所以我和你一样一无所知。但是,我觉得这是一个很好的答案,并且可以唯一地标识一个订单。但是Customer_Email是另一个实体的主键,能不能有外键和主键的复合键??

标签: database normalization


【解决方案1】:

为了达到 2NF,您需要将主键定义为:

Served_time、Served_by、Service_Name、Customer_Email

一种关系的示例数据:

  • Served_Time:'10:30'
  • Served_By:“乔”
  • Service_Name:“Service_a”
  • Customer_Email:'email@abd.com'
  • Customer_Feedback:“服务很好!!”
  • Requirement_Date: '42368'
  • Sum_Of_Req: '5'

【讨论】:

  • 您为什么需要服务?时间还不够吗?因为我看不到收银员何时可以同时处理 2 个订单。
  • 您需要“服务于”,因为不同的代理可能为同一客户提供多个订单。您需要“served_time”,因为同一个代理将为同一个客户有多个订单。理论上,他可以同时处理多个订单。或者至少它们可能同时记录在系统中,所以你不能只依赖served_time。
  • 但是现在会是第二范式吗?因为我不认为 Sum_Of_Request 取决于谁为他们服务,也不是客户。
  • 根据我掌握的信息,我相信“sum_of-Req”是此订单的一部分。它可以例如描述订单中请求项目的数量。所以它完全依赖于我提出的主键。
  • 但它在功能上并不完全依赖于其他两个? 2NF 不需要依赖所有的候选键吗?
猜你喜欢
  • 2016-08-12
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多