2015-12-28 46 views
0

我已经给出了数据库的潜在解决方案。我有被称为 '订单' 的实体,它包含的属性:将数据库归一化为2NF

  • Sum_Of_Req
  • Served_By
  • SERVICE_NAME
  • Customer_Feedback
  • CUSTOMER_EMAIL
  • Requirement_Date
  • Served_Time

我需要找到一个组合键,所以我可以把这个关系放到2NF中(所以每个属性完全依赖于主键(在这种情况下我觉得它将是一个组合键))。但是,我不明白哪两个可以唯一标识订单。

请注意:我无法添加'Order#'或类似内容。不幸的是(虽然完全明显而简单),我的讲师明确指出,我们不允许使用唯一的ID。

+1

CUSTOMER_EMAIL和Served_Time?假设这些意思是'在Y时刻由X排序',并且这以一种独特的方式定义了一个订单。你应该包括更多的信息,每列代表什么,以及你到目前为止尝试过什么(以及为什么你认为它不起作用)。 – Sam

+0

@Sam老实说,他没给我们任何关于属性的解释,所以我和你一样无知。但是,我觉得这是一个很好的答案,并且会唯一确定一个订单。但是,Customer_Email是另一个实体的主键,您是否可以拥有一个外键和主键的组合键? – OSmart

回答

0

为了得到2NF需要定义主密钥,作为复合:

Served_time,Served_by,SERVICE_NAME,CUSTOMER_EMAIL

实施例的数据为一个关系:

  • Served_Time:'10:30'
  • Served_By: '乔'
  • SERVICE_NAME: 'SERVICE_A'
  • CUSTOMER_EMAIL: '[email protected]'
  • Customer_Feedback: '尼斯服务!'
  • Requirement_Date: '42368'
  • Sum_Of_Req: '5'
+0

为什么你需要服务?时间不够吗?由于我没有看到收银员何时可以在同一时间处理2份订单。 – OSmart

+0

您需要“服务”,因为不同代理商可能会为同一客户订购多个订单。 您需要“serve_time”,因为同一个代理将为同一个客户提供多个订单。理论上他可以同时处理多个订单。或者至少它们可能会同时记录在系统中,所以你不能只依赖于serve_time。 –

+0

但现在是否会以第二范式出现?因为我不认为Sum_Of_Request取决于谁为他们提供服务,也不取决于客户。 – OSmart