一个表的复合主键是否可以用作另一个表上的复合主键的一部分?

时间:2013-02-18 11:45:39

标签: sql oracle

我创建了三个表。表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)
);

执行时表示缺少左副手......

如何使用另一个表复合主键的一部分创建复合主键?

2 个答案:

答案 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的大小。