我正在尝试为名为Words_in_group的表创建一个外键,该表保存用户创建的所有单词。
我正在尝试将这些单词引用到一个名为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:此列列表没有匹配的唯一键或主键
答案 0 :(得分:1)
外键必须始终指向唯一键(显式定义为此键或定义为主键)。如您所述,word
中的words
不一定是唯一的 - 只有word, file_sn
的组合。您可以将word
本身设为唯一,也可以将flie_sn
列添加到word_in_group
表,并使用复合外键,以更好地适合您的应用程序逻辑。
答案 1 :(得分:0)
您为表WORDS创建了复合主键。但是你只需要参考表WORDS_IN_GROUP中的单个列。这是不允许的。
您只能引用那些唯一的列/列列(启用主键/唯一键)。如果它是复合的,那么您可以创建复合FK。