【发布时间】:2021-12-05 00:07:22
【问题描述】:
我有这两张桌子:
CREATE TABLE TBL1 (
DATERIF DATE NOT NULL,
DOMAINCODE VARCHAR2(20) NOT NULL,
DATACODE VARCHAR2(10) NOT NULL,
DSDATO VARCHAR2(50),
CDDWH CHAR(1),
CONSTRAINT PK_TBL1 PRIMARY KEY (DATERIF, DOMAINCODE, DATACODE)
)
;
和
CREATE TABLE TBL2 (
DATERIF DATE NOT NULL,
PRODUCTCODE CHAR(5 BYTE) NOT NULL,
PRODCATEG VARCHAR2(20) NOT NULL,
PRODUCTDESCR VARCHAR2(100),
PRODUCTTYPE VARCHAR2(10),
CODSECTION VARCHAR2(10),
CDDWH CHAR(1 BYTE),
DTUPDATED DATE,
CONSTRAINT PK_TBL2 PRIMARY KEY (DATERIF, PRODUCTCODE, PRODCATEG),
CONSTRAINT FK_TBL2_TBL1_PRODUCTTYPE FOREIGN KEY (PRODUCTTYPE) REFERENCES TBL1(DATACODE),
CONSTRAINT FK_TBL2_TBL1_CODSECTION FOREIGN KEY (CODSECTION) REFERENCES TBL1(DATACODE)
)
;
在创建 TBL2 表时,我得到 ORA-02270 : no matching unique key or primary key for this column-list 错误 真诚地,我无法解决问题。有人可以帮助我吗?谢谢
TT
【问题讨论】:
-
显然有错误但是你能说出你在外键背后的意图吗?
-
这也是我想问的。如果你解释一下表格,也许它会有所帮助。 TBL2 看起来像一个产品表,但产品代码不是主键。相反,只要它们位于不同的类别 (PRODCATEG) 和不同的 DATERIF 中,您就可以为不同的产品使用相同的产品代码。什么是 DATERIF? TBL1 代表什么?为什么 DATACODE 既可以是 PRODUCTTYPE 也可以是 CODESECTION(您尝试的外键)?这看起来很奇怪。我有一种不好的感觉,你可能真的想要一个与你目前拥有的完全不同的数据模型。
-
@Thorsten Kettner,看起来主键有不同的用途,我不确定这两个外键,但无论如何只要考虑到错误提供了可供 OP 澄清的答案。跨度>
-
情况正是如此:主键有不同的用途,因为 TBL1 是域表: PRODUCTTYPE 可以为 exple: 'motorcycle','cars' ,CODSECTION 可以是 '4 trokes' 或 ' 2 trokes' ...如果我想保存在 TBL2 中,'motorcycle' 和 '4 trokes' 必须在 TBL1.DATACODE 中。
标签: oracle foreign-keys