我在这个论坛中发现了类似的问题,但是他们中的任何一个都可以让我的想法得到解决方案,所以我认为有人可以知道答案。
我有这个数据库场景:
商品,供应商和订单。这些是表,我有另外两个表: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或任何其他
答案 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。