连接三个表的外键

时间:2013-04-16 02:40:47

标签: foreign-keys

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

我有这个数据库场景:

商品,供应商和订单。这些是表,我有另外两个表: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

规则是:

供应商只能提供他们能够提供的商品。因此,我有桌子供应商_merchandises为每个供应商注册他们提供给商店的商品。

因此,订单必须限制供应商仅提供供应商_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 个答案:

答案 0 :(得分:1)

使用复合键和关系:

  • supplier_id列添加到orders_merchandises
  • orders_merchandises
  • 上从order(order_id, supplier_id)制作一个FK
  • orders_merchandises
  • 上从supplier_merchandises(supplier_id, merchandise_id)创建一个FK

这会将供应商的订单锁定为仅供应商在supplier_merchandise中找到的商品。

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