1

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

我有这个数据库场景:

商品、供应商和订单。这些是表,我还有另外两个表: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 来为每个供应商注册他们提供给商店的商品。

因此,订单必须限制供应商仅提供在供应商商品中“预先记录”的商品。

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

所以,我需要多个表的外键,如下所示:

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

但是,不幸的是,这不起作用。

任何人都知道是否有任何方法可以做我想做的事?

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

4

1 回答 1

1

使用复合键和关系:

  • supplier_id列添加到orders_merchandises
  • 做一个 FK 从orders_merchandisesorderon(order_id, supplier_id)
  • 创建一个 FK 从orders_merchandisessupplier_merchandiseson(supplier_id, merchandise_id)

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

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

于 2014-06-02T08:11:11.347 回答