0

我正在使用 MySQL,并且出于参照完整性的目的,我的表使用 innoDB 存储。

问题

我正在建立一个销售订单系统。我的invoice表有tracking_code列和COD_place

客户使用以下任一方法与我打交道:运输或 COD(货到付款/亲自与他会面)。每个运送的包裹都有一个跟踪代码,而对于 COD,必须有一个地方可以做到这一点。因此列tracking_codeCOD_place

问题是,如果首选运输,则该COD_place列应为 NULL 或留空;否则,tracking_code必须为 NULL。

它不优雅。代表这一点的最佳方式是什么?你能method在 MySQL 中创建一个通用实体吗?

我真的想不出任何优雅的解决方案,所以我在这里求助于你。先感谢您!

4

1 回答 1

0

您应该引入一个附加列来指定请求的事务类型。不要试图根据其他信息隐含地假设这一点。

在表中包含冗余信息字段是可以接受的(使用 NULL)。

或者,您可以为每种类型的事务创建一个附加表,其中仅包含该类型事务所需的相关字段。这具有额外的优势,即能够清楚地表示这些过程而不受其他过程的干扰。

例如,您可能有应该处理 COD 交易的业务逻辑,其中包括“司机收款”状态,而您的运输交易可能有一个列来处理“付款预授权交易 ID”。COD 逻辑无需关心运输交易,反之亦然。

通过 Invoice 上的附加 transaction_type 字段,您知道要加入哪个表,以便收集附加信息。如果您将来添加第 3 种类型,您将不会得到一个不断扩大的 Invoice 表。

于 2013-01-06T09:41:36.060 回答