1

我有以下情况:

在销售代表跟踪订单的订单跟踪系统中:每个订单总共可以有 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 作为我的数据库。

4

2 回答 2

0

您应该将订单、产品和产品类型保存在它们自己的表中。然后,在 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;
于 2013-07-02T17:42:50.060 回答
0

建立一个标准的订单数据模型,并将您的应用程序逻辑放在它所属的地方,即应用程序层(或者可能是 db sprocs)。

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

于 2013-07-02T18:44:02.680 回答