我在这个论坛上发现了类似的问题,但是其中任何一个都可以使我想出一个解决方案,因此我认为有人可以知道答案。

我有这个数据库方案:

商品,供应商和订单。 这些是表,我还有另外两个表:orders_merchandises和Suppliers_merchandises。

这些表是这样的:

merchandises
 -id
 -name

suppliers
 -id
 -name

orders
 -id
 -supplier_id

orders_merchandises
 -order_id
 -merchandise_id

suppliers_merchandises
 -supplier_id
 -merchandise_id

规则是:

供应商只能提供他们能够提供的商品。 因此,我有一个表Suppliers_merchandises来注册每个供应商的供应给商店的商品。

因此,订单必须限制供应商只供应“ pre-recorded”在vendor_merchandises中的商品。

我希望我能解释得足够清楚。

因此,我需要一个用于多个表的外键,如下所示:

ALTER TABLE suppliers_merchandises
ADD FOREIGN KEY FK_NAME (supplier_id, merchandise_id)
REFERENCES (orders.supplier_id, orders_merchandises.merchandise_id)

但是,不幸的是这行不通。

有人知道我有什么办法可以做吗?

它可以在任何dbms中。 SQLServer,Firebird或任何其他

===============>>#1 票数:1

使用复合键和关系:

  • 添加supplier_idorders_merchandises
  • orders_merchandises(order_id, supplier_id)上的order制作FK
  • (supplier_id, merchandise_id)上从orders_merchandisessupplier_merchandises创建一个FK

这会将供应商的订单锁定为仅用于在vendor_merchandise中为他们找到的商品。

您可能需要将主键从代理更改为复合键,并丢弃现有的竞争FK。

  ask by jairhumberto translate from so

未解决问题?本站智能推荐: