将复合主键和外键添加到三列中 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)
);
问题: 创建一个名为 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)
);