2016-04-30 76 views
0

我分析我的下面,我有两点我感到困惑数据库的工作流分析

目前1 - 当我插入订单内的项目,我给order_IDPK 所以顺序中的每个项目它自己的PK ...和相同的customer_id (FK)所有订单中的项目所以...在这种情况下,发票号码与customer_ID相同

这是应该怎么想,或者这个工作有什么问题流 ?

2,在某些情况下,我并不需要记录客户信息,我只是想 插入订单没有他们的客户的信息。我没有怎么想应该发生清晰的概念:S

3-如果我想对某些客户订单应用折扣,那么我应该允许用户在每个订单级别上应用该商品的折扣? 或整个订单?而这里的折扣列应存放

Database structure

回答

1

1 - 这种设计似乎罚款的问题。您要说的是,对于每个订购的产品,这都是客户线。您可以选择ID,名称,税/财务号码,地址等。

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

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

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

  • 如果您想为完整订单应用折扣,您只需将该折扣放置在每一个订单行上。

  • 如果您想为单个产品应用折扣,则只需将该折扣放置在该产品系列上即可。

  • 如果您想对数量有限的单件产品实施折扣(例如折扣为50%但限于一次购买),并且客户购买的数量超过该限制,则只需要为同一产品下2个订单。一个有折扣和最大数量,另一个没有折扣和剩余的数量。

将此设置在订单级别对于单个产品折扣不起作用。

这是您的问题的答案。我也会质疑您的设计,如:

  1. 如果客户更改地址,您的订单是否应该更改?如果没有,你应该使用订单正常的做法,这是有一个订单头表,固定信息,如地址和外键的客户和订单表,喜欢你的订单行,但使用订单标题的外键。这也避免了重复。

  2. 你期待长达2个的电话号码?如果你这样做,设计是好的。如果您不知道需要多少个电话号码,也许是一张带有电话号码的表格,而向客户提供外键可能是更好的方法。

+0

我不认为离开CUSTOMER_ID null是一个好主意,有关创建匿名客户其还为工作到处留下客户ID无效,但仍比让客户ID无效 我在想加入colmun“CUSTOMER_TYPE更好“区分我想要他们的个人信息存储或不存储的客户类型 但我不这样做的方式更好... – samer

+0

是的,你是正确的订购假折扣和这将导致数据重复,这将使第二 更好的办法了......最后一点感谢我并没有考虑过它 – samer

+0

回答你的问题 如果custome R变成地址,应该是你为了改变过于 没有,因为这inforamtion有关客户它的自我不是石坪订单ADDRES ......请如果你不介意给我更多的 explantion对于这一点......哪一个他们优点是,固定的信息将不会重复与每个订单 我完全同意你的意见.. – samer