无法在表格中使用外键

时间:2015-11-26 22:35:32

标签: sql oracle

我试图让一张桌子让一张外键链接到我的层次结构中的另一张桌子,但是如果有人能告诉我这是一个很好的话,我就无法让它工作,我就是这样。 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"但我得到一个错过的右括号错误。任何帮助表示赞赏!

2 个答案:

答案 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中遇到相同的错误。 (顺便说一句,请添加您的第二次尝试来解决问题而不是更改原始问题,以便其他人也可以帮助您)