创建具有主键和2个外键的表

时间:2020-04-14 01:23:22

标签: sql oracle

创建WPC分配表。注意:有一个复合的PRIMARY KEY和2个FOREIGN KEY,需要3个CONSTRAINT。请参阅下面的图2-44,摘自教科书。另外,请记住,同一架构中的任何2个约束都不能具有相同的名称。这是部分DDL,您可以完成:

CREATE TABLE ASSIGNMENT 
(
    EmployeeNumber INTEGER NOT NULL, 
    ProjectID INTEGER NOT NULL,
    Hoursworked NUMBER (6,2),

    CONSTRAINT PK_Assignment 
        PRIMARY KEY (EmployeeNumber, ProjectID),

    CONSTRAINT FK_Assignment_EMPLOYEE 
        FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE,…

(请自行填写本声明的其余部分)

我得到一个错误:

从第1行开始的错误:

CREATE TABLE ASSIGNMENT 
(
    EmployeeNumber INTEGER NOT NULL,
    ProjectID INTEGER NOT NULL,
    Hoursworked NUMBER (6,2),

    CONSTRAINT PK_Assignment 
        PRIMARY KEY (EmployeeNumber, ProjectID),
    CONSTRAINT FK_Assignment_EMPLOYEE 
        FOREIGN KEY (EmployeeNumber), 
    CONSTRAINT FK_Project_Assignment 
        FOREIGN KEY (ProjectID) REFERENCES EMPLOYEE.employeenumber(EmployeeNumber), PROJECT.projectID(ProjectId)
)

错误报告:

ORA-00905:缺少关键字
00905. 00000-“缺少关键字”
*原因:
*动作:

我找不到我想要的东西。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您选择创建 outline 约束(仅在遵循语法的情况下,这完全可以)。仅提及其他选项,也许您会发现它们很有用。

请注意,构成主键的列不必显式声明为not null,因为主键约束始终不会接受null。


轮廓约束(它们遵循列的定义):

SQL> create table assignment
  2  (   employeenumber integer,
  3      projectid      integer,
  4      hoursworked    number (6,2),
  5      constraint pk_assignment
  6          primary key (employeenumber, projectid),
  7      constraint fk_assignment_employee
  8          foreign key (employeenumber) references employee (employeenumber),
  9      constraint fk_project_assignment
 10          foreign key (projectid) references project (projectid)
 11  );

Table created.

内联约束,与列在同一行;因为有一个复合主键(由两列或更多列组成),所以不能内联

SQL> create table assignment
  2  (   employeenumber integer constraint fk_assignment_employee
  3                             references employee (employeenumber),
  4      projectid      integer constraint fk_project_assignment
  5                             references project (projectid),
  6      hoursworked    number (6,2),
  7      constraint pk_assignment
  8          primary key (employeenumber, projectid)
  9  );

Table created.

表是单独创建的,约束是使用ALTER TABLE命令创建的:

SQL> create table assignment
  2  (   employeenumber integer,
  3      projectid      integer,
  4      hoursworked    number (6,2)
  5  );

Table created.

SQL> alter table assignment add constraint pk_assingment primary key (employeenumber, projectid);

Table altered.

SQL> alter table assignment add constraint fk_assignment_employee
  2    foreign key (employeenumber) references employee (employeenumber);

Table altered.

SQL> alter table assignment add constraint fk_project_assignment
  2    foreign key (projectid) references project (projectid);

Table altered.