【问题标题】:Can one table's composite primary key be used as part of a composite primary key on another table?一个表的复合主键可以用作另一个表的复合主键的一部分吗?
【发布时间】:2013-02-18 11:45:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql oracle


    【解决方案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)
    );
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 2020-05-15
        相关资源
        最近更新 更多