我试图让一张桌子让一张外键链接到我的层次结构中的另一张桌子,但是如果有人能告诉我这是一个很好的话,我就无法让它工作,我就是这样。 m得到错误ORA-02270:此列列表没有匹配的唯一键或主键。
CREATE TABLE name
(column_1_ID VARCHAR2(60) NOT NULL,
column_2 VARCHAR2(200),
column3 VARCHAR2(200),
PRIMARY KEY (column_1_ID));
CREATE TABLE name2
(bcolumn_ID VARCHAR2(60) NOT NULL,
bcolumn_1_ID VARCHAR2(60) NOT NULL REFERENCES name(column_1_ID),
Name VARCHAR2(500), PRIMARY KEY(bcolumn_ID, bcolumn_1_ID));
CREATE TABLE name_3
(ccolumn_1_ID VARCHAR2(60) NOT NULL,
ccolumn_2_ID VARCHAR2(60) NOT NULL REFERENCES name(column_1_ID),
ccolumn_3 VARCHAR2(500) NOT NULL,
PRIMARY KEY(ccolumn_1_ID, ccolumn_2_ID));
CREATE TABLE name4
(dcolumn_1_ID VARCHAR2(60) NOT NULL,
dcolumn_2 VARCHAR2(200) NOT NULL,
dcolumn_3_ID VARCHAR2(60) NOT NULL REFERENCES name_3(ccolumn_1_ID),
dcolumn4 VARCHAR2(100),
dcolumn_5 NUMBER(5,2),
PRIMARY KEY(dcolumn_1_ID,dcolumn_3_ID));
CREATE TABLE name5
(ecolumn_1_ID NOT NULL REFERENCES name4(dcolumn_1_ID),
ecolumn_2_ID VARCHAR2(60) NOT NULL,
ecolumn_3 NUMBER(5,2),
PRIMARY KEY(ecolumn_1_ID, ecolumn_2_ID));
我希望name3(ccolumn_1_ID)成为name4的外键。我还希望name4(dcolumn_2)有一个约束,它只允许" value" "值2"和" value3"但我得到一个错过的右括号错误。任何帮助表示赞赏!
答案 0 :(得分:1)
Oracle documentation非常明确:
非引号标识符必须以字母字符开头 您的数据库字符集。带引号的标识符可以以any开头 字符。
列出不以数字开头的列名称。因此,2column_ID
无效,除非用双引号括起来。但不要这样做。想出一个更好的名字。
答案 1 :(得分:0)
name_3表有一个合成主键,所以如果你想要一个外键你需要使用两列,让dcolumn_3_ID成为第一个:
CREATE TABLE name4
(dcolumn_1_ID VARCHAR2(60) NOT NULL,
dcolumn_2 VARCHAR2(200) NOT NULL,
dcolumn_3_ID VARCHAR2(60) NOT NULL,
dcolumn4 VARCHAR2(100),
dcolumn_5 NUMBER(5,2),
PRIMARY KEY(dcolumn_1_ID,dcolumn_3_ID),
constraint fk_name_3 FOREIGN KEY(dcolumn_3_ID, <Put the column that matches name_3.ccolumn_2_ID>)
references name_3(ccolumn_1_ID, ccolumn_2_ID));
无论如何,您需要第二列匹配ccolumn_2_ID
类型VARCHAR2(60)。
您在表name5
中遇到相同的错误。 (顺便说一句,请添加您的第二次尝试来解决问题而不是更改原始问题,以便其他人也可以帮助您)