0

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

执行时说缺少左括号....

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

4

2 回答 2

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)
);
于 2013-02-18T12:09:40.137 回答
0

如果您使用的是 Oracle(这很有帮助!),您忘记指定 department.project_id 的大小。

于 2013-02-18T12:11:32.300 回答