繁体   English   中英

使用主键和 2 个外键创建表

[英]Create a table with primary key and 2 foreign keys

创建 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 - “缺少关键字”
*原因:
*行动:

我找不到我缺少的东西..有人可以帮忙吗?

您选择创建轮廓约束(这完全可以,只要您遵循语法)。 仅提及另一个选项,也许您会发现它们很有用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM