我创建了三个表。表1的唯一键用作表2的复合主键以及表2的唯一键。我试图在表3的复合键中使用表2的复合键部分。但我不能这样做?任何人都可以告诉我吗?
table 1:
create table emp1(
associate_id number(5) not null,
associate_name varchar2(25),
salary decimal(10,2),
doj date,
grade varchar2(6),
constraint emp1_cons unique(associate_id)
);
table 2:
create table project(
associate_id number references emp1(associate_id) not null,
pm_id number(5),
project_id varchar2(10) unique,
project_name varchar2(20),
project_desc varchar2(20),
status varchar2(20),
grade varchar2(6),
primary key(associate_id,project_id)
);
table 3:
create table department(
dept_id varchar2(5),
project_id varchar2 references project(project_id),
dept_name varchar2(10),
dept_code number(5),
proj_startdate date,
proj_enddate date,
primary key(dept_id,project_id)
);
执行时表示缺少左副手......
如何使用另一个表复合主键的一部分创建复合主键?
答案 0 :(得分:1)
您的架构设计似乎有点缺陷。你想做什么样的约束?
我不明白为什么要使用复合键。
create table emp1(
associate_id number(5) not null, -- PK
associate_name varchar2(25),
salary decimal(10,2),
doj date,
grade varchar2(6),
primary key(associate_id)
);
create table project(
project_id varchar2(10), -- PK
associate_id number references emp1(associate_id) not null,
pm_id number(5),
project_name varchar2(20),
project_desc varchar2(20),
status varchar2(20),
grade varchar2(6),
primary key(project_id)
);
create table department(
dept_id varchar2(5), -- PK
project_id varchar2 references project(project_id),
dept_name varchar2(10),
dept_code number(5),
proj_startdate date,
proj_enddate date,
primary key(dept_id)
);
答案 1 :(得分:0)
如果你正在使用Oracle(说得好!),你忘了指定department.project_id的大小。