首页 文章

无法在oracle上创建外键

提问于
浏览
2

我正在尝试为名为Words_in_group的表创建一个外键,该表保存用户创建的froup中的所有单词 .

我试图将这些单词引用到一个名为:Words的表中,它的P-key是“Word” .

也许这与表“Words”有关,它使用复合键?

这是用于创建外键的脚本 .

alter table "WORDS_IN_GROUP" add constraint
"WORDS_IN_GROUP_FK1" foreign key ("WORD") references "WORDS" ("WORD")
/

以下是表SQL:

CREATE TABLE  "WORDS_IN_GROUP"  (   "GROUP_CODE" NUMBER(9,0) NOT NULL ENABLE, 
"WORD" VARCHAR2(45) NOT NULL ENABLE, 
 CONSTRAINT "WORDS_IN_GROUP_PK" PRIMARY KEY ("GROUP_CODE") ENABLE  ) ;ALTER TABLE  "WORDS_IN_GROUP" ADD CONSTRAINT "WORDS_IN_GROUP_FK" FOREIGN KEY ("GROUP_CODE")
  REFERENCES  "GROUP_OF_WORDS" ("GROUP_CODE") ON DELETE CASCADE ENABLE;CREATE OR REPLACE TRIGGER  "BI_WORDS_IN_GROUP"  before insert on "WORDS_IN_GROUP"                for each row  begin    if :NEW."GROUP_CODE" is null then 
select "GROUP_OF_WORDS_SEQ".nextval into :NEW."GROUP_CODE" from dual; end if; end; /ALTER TRIGGER  "BI_WORDS_IN_GROUP" ENABLE;
***///////////

CREATE TABLE  "WORDS"  (    "WORD" VARCHAR2(45) NOT NULL ENABLE, 
"FILE_SN" NUMBER(9,0) NOT NULL ENABLE, 
"FILE_NAME" VARCHAR2(16) NOT NULL ENABLE, 
"POSITION_NUM" NUMBER(5,0) NOT NULL ENABLE, 
"SECTION_NUM" NUMBER(5,0) NOT NULL ENABLE, 
"WORD_SECTION_POSITION" NUMBER(4,0) NOT NULL ENABLE, 
 CONSTRAINT "WORDS_PK" PRIMARY KEY ("WORD", "FILE_SN") ENABLE ) ;

这是我得到的错误:

ORA-02270:此列列表没有匹配的唯一键或主键

2 回答

  • 1

    外键必须始终指向唯一键(显式定义为此键或定义为主键) . 如您所述, words 中的 word 不一定是唯一的 - 只有 word, file_sn 的组合 . 您可以将 word 本身设为唯一,也可以将 flie_sn 列添加到 word_in_group 表中,并使用复合外键,以更好地适合您的应用程序逻辑 .

  • 0

    您为表WORDS创建了复合主键 . 但是你只需要参考表WORDS_IN_GROUP中的单个列 . 这是不允许的 .

    您只能引用那些唯一的列/列组(启用主键/唯一键) . 如果它是复合的,那么您可以创建复合FK .

相关问题