我有两个名为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
我希望在ORD_ID
和ORDER_HEAD
之间建立ODD_ID
之间的关系。 ORDER_DETAIL
表格中的{{1}}。但SQL Server显示错误消息:
必须先为表定义主键或唯一约束才能参与关系
为什么我收到此错误?有没有办法在这两列之间执行连接,或者我的数据库设计中是否存在问题?
答案 0 :(得分:2)
如果您想从Composite primary key
创建关系,那么任何引用都应该包含Composite primary key
Schema
的{p> ORDER_DETAIL
应为
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)
答案 1 :(得分:1)
<强>更新强>
重新思考问题后,我认为您应该通过添加引用列ODD_TYPE
(如用户@NoDisplayName所述)并为您的表ORDER_DETAIL
创建包含3列(ODD_ID, ODD_TYPE, ODD_LINE_NO)
的复合PK来实现目标那么它会是:
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
,ODD_ID
)的ODD_TYPE
表中,您将记录为其订单行。
我认为删除之前的PK,添加列并设置上面的键(即使在可视编辑器中),在两个表之间创建FK并将正确的列映射到一起时,不应该有问题。