【问题标题】:Create a table with primary key and 2 foreign keys使用主键和 2 个外键创建表
【发布时间】:2020-04-14 01:23:22
【问题描述】:

创建 WPC 分配表。注意:有一个复合主键和 2 个外键,需要 3 个约束。见下图 2-44 取自教科书。另外,请记住,同一架构中的两个约束不能具有相同的名称。以下是部分 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-M 关系需要 2 个约束子句。每个子句都需要 REFERENCES 和父表名。
  • 以上是我老师回复的内容,但我还在苦苦挣扎。

标签: sql oracle


【解决方案1】:

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

请注意,不必将构成主键的列显式声明为not 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2013-09-09
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多