【发布时间】:2011-08-07 06:25:20
【问题描述】:
我目前正在做一个小项目,我需要对以下场景进行建模:
场景
- 客户来电,他想要一辆新车的报价。
- 销售代表。注册客户信息。
- 销售代表。在系统中创建报价,并将项目添加到报价(汽车)中。
- 销售代表。通过电子邮件将报价发送给客户。
- 客户接受报价,现在报价不再是报价而是订单。
- 销售代表。检查订单,一切正常,他为订单开具发票。该订单现在不再是订单,而是发票。
想法
我需要一些帮助来找出理想的建模方法,但我有一些想法。
- 我认为草稿/报价/发票基本上都是一个订单。
- 草稿/报价/发票需要单独的唯一编号(ID),所以我正在考虑为所有这些单独的表格。
型号
这是我的数据模型 v.1.0,请告诉我你的想法。
关注
不过,我对这个模型有些担心:
- 草稿/报价单/发票在订单行上可能有不同的项目和价格。在此模型中,所有草稿/报价/发票都连接到同一订单和订单行,因此不可能有单独的报价行/草稿行/发票行。也许我会为此制作新表,但是基本上相同的信息会存储在多个表中,这也不好。
- 有时两个或多个报价会变成发票,该模型将如何处理这个问题?
如果您对如何更好地建模有任何提示,请告诉我!
编辑:数据模型 v.1.4
【问题讨论】:
-
所有子类型共有的列应该向上移动到超类型中。如果每个子类型都有一个 subtype_date 列,它可能应该移到超类型中。 (删除 quote_date、order_date、invo_date;只需使用 stmt_date。)对于 subtype_canceled 也是如此。 order_id 和 invo_id 列需要保留在它们的子类型中,因为您需要考虑每个 id 号。 (没有间隙。)引号也可能是这样。我不知道。
-
好的,我明白了。以为我误会了。我在子类型中添加 order_date 的原因是我希望报价/订单/发票日期彼此不同,我还认为所有报价/订单/发票的声明都是相同的。但是我看到,对于您制作的每份报价/发票/订单,您也会做出一份声明,对吗?但是当报价被接受并需要变成订单时会发生什么?我是否只是创建一个新订单并复制报价详细信息,以便旧报价和新订单都存在?是否也是两个陈述,每个陈述一个?我可以将 Q 与 I 联系起来吗?
-
如果您以这种方式构建表格,“statement”中的每一行都是报价单、发票或订单。当报价“变成”订单时,您在可更新视图“订单”中插入一行(请参阅下面的答案),然后复制报价行项目。 (您只需要一个订单项表格;我稍后会尝试发布。)如果订单项从未有任何更改 - 这是一个hard never --您可以使用不同的、更简单的结构。 (我经常看到类似“是的,我们为此报价 39.95 美元,但我们感谢您的业务,因此我们将免费提供”之类的内容。)
-
而且,是的,您可以将报价与发票相关联。只需将报价单号(我想还有订单号)存储在发票子类型中。
-
所以您认为我应该在 Invoice 表中为 Quote-/OrderID 添加一个字段?如果没有报价或订单相关,那么这些字段将是空白的怎么办?那是好的数据库设计吗?
标签: sql database-design data-modeling invoice