【问题标题】:MySQL table for saving a quantity to a 1:M relationship用于将数量保存到 1:M 关系的 MySQL 表
【发布时间】:2017-08-18 22:52:34
【问题描述】:

我有一个名为invoiceiteminvoice_item 的表。 invoice 项目表具有 invoice_iditem_id 列来存储 1:M 类型的关系,其中发票可以有许多项目。

现在我想以某种方式存储项目数量的信息。是否适合创建一个invoice_item_quantity 表,分别存储invoice_iditem_idinvoice_item_quantity 值?或者会有更优化的解决方案?

我可能对此进行了过度设计,但在 invoice 表中添加类似 item_quantity 列的内容将不起作用,因为您可以拥有许多不同类型的项目,因此那里没有上下文。

我基本上需要一种方法来存储这样的模型:

  • 发票
    • 项目 1 x 5
    • 项目 2 x 2
    • 项目 3 x 15

如何在上述模型中以最佳方式存储数量?

【问题讨论】:

  • 为什么不在 invoice_item 表中添加数量?如果您考虑一下, invoice_item 打破了 M:M 关系,一个项目可能在许多发票上,而一个发票可能有许多项目。由于此表是关于项目与发票的关联,因此与该关系关联的属性(例如数量)将存在是有道理的。你可能想要一个“OrderQTY 和一个 ModifiedOrderQty 以防有人说他们想要 10 个电话并说不做那个 7,这样你就可以跟踪差异(也许它也会上升到 20!)
  • 其他属性可能包括运送地点(可能线路有不同的目的地?或线路的状态或交付方式,或采购供应商,或计划发货日期,或照顾(如果订单发往 1 个地址,但同一行有不同的人)......你明白了。
  • 好点 xQbert,既然 Karl 已经给出了答案,我明白你的评论了。

标签: mysql database-design


【解决方案1】:

我可能会误解,但听起来您在 invoiceitem 表之间存在多对多关系,并且您正在使用联结表来支持 invoice_item 表(此联结与invoiceitem 具有一对多关系。

如果您正在寻找一个典型的标准化数据库设计,那么将数量存储在invoice_item 表中是很好的选择。另一个好主意是将发票 ID 和项目 ID 作为连接表上的复合主键。

【讨论】:

  • 啊,我没想到,我想invoice_item 表已经是一个联结表,所以使用invoice_item_quantity 只是为了存储一个额外的值有点多余。话虽如此,我可以在quantity 之后将任何新字段添加到同一张表中吗?
  • 新字段支持/唯一的关系并保持材料和项目之间的适当基数。所以我不想在这里爆炸制造该物品所使用的材料。我也不想显示在此处下订单的客户,因为它属于订单。但是诸如 Ship To(如果按项目分开,则覆盖订单)之类的信息可能是有意义的。想想圣诞节。我为我和住在不同州的侄子买礼物。我不希望它们全部运送给我,并且单独下订单会抵消我购买超过 50 美元的折扣。那么请您运送到两个地方吗
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 2016-09-06
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2017-07-13
  • 1970-01-01
相关资源
最近更新 更多