复合键 table 和非主键 table 之间的关系

Relationship between composite keyed table & non primary key table

我有两个table,分别命名为ORDER_HEAD和ORDER_DETAIL,下面是它们的结构。

ORDER_HEAD:

ORD_ID (PK)
ORD_TYPE (PK)
ORD_DATE
ORD_NET_TOTAL

ORDER_DETAIL:

ODD_ID
ODD_LINE_NO
ODD_PRODUCT_ID
ODD_QTY

我想在 ORDER_HEAD 中的 ORD_IDORDER_DETAIL table 中的 ODD_ID 之间建立关系。但是 SQL 服务器显示一条错误消息:

primary key or unique constraint must be defined for table before it can participate in a relationship

为什么会出现此错误?有没有办法在这两列之间执行连接,或者我的数据库设计有问题?

更新

在重新考虑问题后,我认为您应该通过添加参考列 ODD_TYPE(如用户@NoDisplayName 所述)并为您的 table ORDER_DETAIL 创建复合 PK 来实现您的目标,其中包括3列(ODD_ID, ODD_TYPE, ODD_LINE_NO),则为:

ORDER_DETAIL
============
ODD_ID          (PK)
ODD_TYPE        (PK)
ODD_LINE_NO     (PK)
ODD_PRODUCT_ID
ODD_QTY

在 SQL 中可能是:

ALTER TABLE ORDER_DETAIL ADD CONSTRAINT PK_Order_Detail PRIMARY KEY NONCLUSTERED (ODD_ID, ODD_TYPE, ODD_LINE_NO)

然后,在 ORDER_DETAIL table 中,对于特定的货币对 (ODD_ID, ODD_TYPE),您将有记录作为其订单行。

我认为在删除之前的 PK、添加列并设置上面的键(即使在可视化编辑器中)之后,在两个 table 之间创建 FK 并映射正确的时应该不会有问题列在一起。

如果您想从 Composite primary key 创建关系,那么任何引用还应包括 Composite primary key

中的所有列 ORDER_DETAIL

Schema 应该是

ORDER_DETAIL
============
ODD_ID (Fk)
ORD_TYPE(Fk) -- you need to add this column
ODD_LINE_NO
ODD_PRODUCT_ID
ODD_QTY

像这样创建Foreign key

ALTER TABLE ORDER_DETAIL
  ADD CONSTRAINT FK_ORDER_DETAIL
  FOREIGN KEY(ODD_ID, ORD_TYPE) REFERENCES ORDER_HEAD(ODD_ID, ORD_TYPE)