我使用MySQL并且我的表使用innoDB存储以达到参照完整性目的。MySQL表中的问题:当两列中的一列必须为空(连续)
问题
我建立一个销售订单系统。 我invoice
表有tracking_code
列和COD_place
列
客户的交易与我使用上述两种方法之一:航运或COD(现金 交付/他见面了个人)。 每件出货的包裹都有一个跟踪代码,而对于COD,则必须有一个地方可以做到这一点。因此列
tracking_code
和COD_place
。
问题是,如果装运是首选,那么COD_place
列应为NULL或留空;否则,tracking_code
必须为NULL。
这不是优雅。代表这一点的最佳方式是什么?你可以在MySQL中创建一个广义实体,method
?
我真的想不出任何优雅的解决方案,所以我转向你的帮助。 提前谢谢!
一个选项是将细节存储在单独的表中。例如发票表可以有Enum(TRACKING,COD),reference_id。 '跟踪'表格将具有id,tracking_code。 'COD'表将具有id,cod_place。跟踪表和COD表都将通过reference_id与发票表相关。话虽如此,如果您要频繁查询Invoice表,也许您的原始设计会更好(尽管为空字段),因为它将避免在表拥有数百万条记录后可能变得繁重的联接。 –
是的,谢谢你。我不喜欢太多的NULL。 但我不喜欢在该跟踪发票reference_id和COD可以有相同的ID(自动增量优先于alphanum)值,虽然我可以确定哪个表从Enum列加入。但是,这将使用PHP实际上我希望它是内部的。 所以我想我会坚持原来的设计。 Thaaanks! –
你需要的是一个CHECK约束。不幸的是,这些在MySQL中不被支持。看到这里http://stackoverflow.com/questions/2115497/check-constraint-in-mysql-is-not-working和这里http://stackoverflow.com/questions/5807231/mysql-check-constraint-alternative的方法使用触发器。 –