MySQL表遇到麻烦:当两列中的一列必须为空(连续)时

时间:2013-01-06 09:27:03

标签: mysql database

我正在使用MySQL,我的表是使用innoDB存储的,目的是引用完整性。

问题

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

  

客户使用以下任何一种方式与我打交道:运费或COD(现金   在交付/亲自见到他)。   装运的每个包裹都有一个跟踪代码,而对于COD,必须有一个地方可以做到这一点。因此,列tracking_codeCOD_place

问题是,如果首选发货,则COD_place列应为NULL或保留为空;否则,tracking_code必须为NULL。

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

我真的想不出任何优雅的解决方案,所以我转向你的帮助。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

在Invoice上有一个额外的transaction_type字段,您知道要加入哪个表,以便收集其他信息。如果您将来添加第三种类型,您将不会最终得到一个不断扩展的发票表。