数据库工作流程分析

时间:2016-04-30 14:11:03

标签: database oracle11g analytics

我已经分析了我的如下,我有两点我很困惑

1-目前,当我在订单中插入商品时,我将order_ID作为PK 所以订单中的每个项目都是自己的PK ...和订单中所有项目的同一个customer_id (FK)所以......在这种情况下,发票号码与customer_ID相同

应该考虑的是这个工作流程有什么问题吗?

2 - 在某些情况下,我不需要记录我想要的客户信息 在没有他们的客户信息的情况下插入订单。我不清楚想法应该如何发生:S

3-如果我想对某些客户订单应用折扣,我应该允许用户在每个订单级别上对该项目进行折扣?  还是整个订单?以及应存储折扣列的地方

Database structure

1 个答案:

答案 0 :(得分:1)

1 - 这个设计似乎对问题很好。您说的是,对于订购的每件产品,这都是客户专线。您可以选择ID,姓名,税/财政号码,地址等。

2 - 如果您不需要任何类型的客户信息,请使Orders表上的customer_id接受NULL。这是最干净的方法。

如果由于某种原因NULL不是一个选项,或者您想在数据库上保留一些基本的匿名客户数据,您可以为匿名用户在客户上创建一行(例如:ID:1 /名称:ANONYMOUS ... )并将该ID放在订单行上。

3 - 根据订购的产品放置折扣可能是更好的主意。

  • 如果您想对整个订单应用折扣,您只需在每个订单行上设置折扣。

  • 如果您想为单个产品申请折扣,您只需将该折扣放在该产品线上。

  • 如果您想对数量有限的单个产品申请折扣(例如:折扣50%但限购1次),并且客户购买超过此限额,您只需要为同一产品下2个订单。一个是折扣和最大数量,另一个没有折扣,其余数量。

将此设置在订单级别上不适用于单品折扣。

这是您的问题的答案。我也会在以下几点质疑你的设计:

  1. 如果客户更改地址,您的订单是否也应该更改?如果没有,您应该使用正常的订单方法,即具有订单标题表,具有固定信息,如客户的地址和外键,以及订单行表,就像您的订单行一样,但是带有订单标题的外键。这也避免了重复。

  2. 您预计最多2个电话号码吗?如果你这样做,设计就可以了。如果您不知道预期的电话号码数量,可能是带有电话号码的表格,以及向客户提供外键可能是更好的方法。