【问题标题】:How to design database for tracking orders with set max items如何设计用于跟踪具有设置最大项目的订单的数据库
【发布时间】:2013-06-30 04:46:17
【问题描述】:

我有以下场景:

在销售代表跟踪订单的订单跟踪系统中: 每个订单总共可以有 4 种产品类型(佣金桶),每个桶可以有 1 个或没有该产品类型的产品。

所以一个订单最多可以有 4 个产品(每种可能的类型之一)

我需要为四种产品类型中的每一种跟踪的信息都是相同的:product-sold-id(fk)、status、product-given-id(fk)

在订单表中添加 12 列有什么好处:每种产品类型 3 列,例如 product-type1-sold-id、product-type1-status、product-type1-given-id..... 等等?

这将是最简单的,但我的问题是大多数订单只会出售 2 或 3 种产品类型,这将导致每种产品类型有 3 个空字段未售出。每天有 100 个代表 @ 10 个订单,这将导致很多空字段。

我倾向于使用带有 order-id(fk) 的订单项表来减少所有空字段。 这种方法的问题在于,我必须向我的客户端代码添加一定程度的复杂性来处理嵌套数据,或者我的服务器代码必须在请求时展平数据并且还能够解析和保存从客户端发送修改后的平面数据。同样,每天有 100 个代表@10 个订单,每个订单有 1-4 种产品类型,这将导致每天向订单项表中添加 1000-4000 行。有什么办法可以克服吗?

任何建议将不胜感激。我正在使用 extjs 客户端,php 服务器端,以 MySQL 作为我的数据库。

【问题讨论】:

  • 通常最好有两个单独的表。通过正确的索引,您应该不会对行数有任何问题。

标签: php mysql database-design extjs data-modeling


【解决方案1】:

构建一个standard order data model,并将您的应用程序逻辑放在它所属的位置,即在应用程序层(或者可能是 db sprocs)中。

如果您的订单最多更改 4 个怎么办?

【讨论】:

    【解决方案2】:

    您应该将订单、产品和产品类型保存在各自的表格中。然后,在 PHP 中返回结果时,您将使用外键将表连接在一起。这将允许您以最小的努力扩展应用程序。例如,向产品添加多达五种类型将不需要更改数据库结构。当限制每个订单的产品类型和产品时,一切都将在 PHP 代码中处理。

    外键只是指向另一个表的指针。例如,表 product_types 应该有一个名为 product_id 的列作为相关产品的主键。这同样适用于订单中的产品。这是表示一对多或多对多关系的一种非常常见的方式。

    对于一个代码示例,这就是您返回带有产品的订单的方式。

    SELECT * FROM products AS p
    LEFT OUTER JOIN orders AS o ON o.id=p.order_id
    WHERE o.id=1234;
    

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2014-09-29
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      相关资源
      最近更新 更多