将复合主键和外键添加到三列中 table

Adding composite primary and foreign keys to three columns in one table

问题: 创建一个名为 REP_CONTRACTS 的 table,其中包含下表中列出的列。应分配包括 REP_ID、STORE_ID 和 QUARTER 列的复合 PRIMARY KEY 约束。此外,应将 FOREIGN KEY 约束分配给 REP_ID 和 STORE_ID 列。

create table REP_CONTRACTS
(       STORE_ID    number(5) not null  
    ,   NAME        number(5)   
    ,   QUARTER     char(3)   not null      
    ,   REP_ID      number(5) not null  
);



alter table REP_CONTRACTS
add           constraint  FK_ID_STORE                foreign key(STORE_ID)
reference REP_CONTRACTS(STORE_ID)
add           constraint  FK_ID_REP                  foreign key(REP_ID)
reference REP_CONTRACTS(REP_ID) 
add           constraint  PK_REP_CONTRACTS           primary key(STORE_ID, REP_ID, QUARTER) 
reference REP_CONTRACTS(REP_ID, STORE_ID, QUARTER)
;

即使没有 "not null",我仍然得到相同的结果。我尝试过在有和没有引用和约束的情况下添加主键和外键,但结果总是这样。

Error starting at line : 618 in command -
alter table REP_CONTRACTS
add           constraint  FK_ID_STORE                foreign key(STORE_ID)                      
reference REP_CONTRACTS(STORE_ID)
add           constraint  FK_ID_REP                  foreign key(REP_ID)                        
reference REP_CONTRACTS(REP_ID)  
add           constraint  PK_REP_CONTRACTS           primary key(STORE_ID, 
REP_ID, QUARTER)     reference REP_CONTRACTS(REP_ID, STORE_ID, QUARTER)
Error report -
ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:

你应该首先定义你的 primary key(每个 table 可能存在一次)或 unique keys,然后使用关键字 references 而不是 reference 之类的在以下 :

alter table REP_CONTRACTS add constraint  PK_REP_CONTRACTS primary key(STORE_ID, REP_ID, QUARTER);
alter table REP_CONTRACTS add constraint  PK_REP_CONTRACTS_ST unique(STORE_ID);
alter table REP_CONTRACTS add constraint  PK_REP_CONTRACTS_REP unique(REP_ID);

alter table REP_CONTRACTS add constraint  FK_ID_STORE  foreign key(STORE_ID) references REP_CONTRACTS(STORE_ID);
alter table REP_CONTRACTS add constraint  FK_ID_REP foreign key(REP_ID) references REP_CONTRACTS(REP_ID); 
alter table REP_CONTRACTS add constraint  FK_ID_REP_ST_QU foreign key(REP_ID, STORE_ID, QUARTER) references REP_CONTRACTS(REP_ID, STORE_ID, QUARTER);

创建您的 table 并添加一个由 rep_id、store_id 和四分之一组成的复合主键,然后添加两个外键(rep_id 和 store_id).您可以使用 Table 级别方法创建 table 并在一个命令中添加约束。

CREATE TABLE REP_CONTRACTS(
Store_ID NUMBER(8),
Name NUMBER(5),
Quarter CHAR(3),
Rep_ID NUMBER(5),
CONSTRAINT rep_contracts_composite_pk PRIMARY KEY (Rep_ID, Store_ID, Quarter),
CONSTRAINT rep_contracts_Store_ID_fk FOREIGN KEY (Store_ID)
    REFERENCES BOOK_STORES(Store_ID),
CONSTRAINT rep_contracts_Rep_ID_fk FOREIGN KEY (Rep_ID)
    REFERENCES store_reps(Rep_ID)
);