【问题标题】:Assigning primary and foreign key in multiple tables oracleoracle在多个表中分配主键和外键
【发布时间】:2015-09-18 20:57:19
【问题描述】:

我刚刚开始了 Oracle SQL 的课程,我们被分配了创建 3 个实体表和 2 个关系表的任务。他给了我们这些字段并说在我们认为有必要时添加:

Course: department, semester, maximumEnrolled
Instructor: firstName, lastName, ssn
Room: roomNumber, building
Teaches: instructor, course
Uses: course, room

当我创建表时,只有前 4 个有效,但我无法创建使用表。错误是:

ORA-02270: 此列列表没有匹配的唯一键或主键。

这就是我所做的:

CREATE TABLE course
    (course_id NUMBER(4) PRIMARY KEY,
    courseName VARCHAR2(30) NOT NULL,
    department VARCHAR2(50),
    semester VARCHAR2(10),
    maximumEnrolled NUMBER(36) NOT NULL);

CREATE TABLE room
    (roomNo NUMBER(5) PRIMARY KEY,
    building VARCHAR2(10));

CREATE TABLE instructor
    (instructor_id NUMBER(6) PRIMARY KEY,
    firstName VARCHAR2(20),
    lastName VARCHAR2(30) NOT NULL
    ssn NUMBER(9) NOT NULL);

CREATE TABLE teaches
    (instructor_id NUMBER(5) NOT NULL,
    course_id NUMBER(4) NOT NULL,
    teachingCourse VARCHAR2(4) PRIMARY KEY, 
    CONSTRAINT instructor_fk FOREIGN KEY (instructor_id) REFERENCES instructor (instructor_id)
    CONSTRAINT course_fk FOREIGN KEY (course_id) REFERENCES course (course_id));

CREATE TABLE uses
    (course_id NUMBER(4) NOT NULL,
    roomNo NUMBER(5) NOT NULL,
    roomUse VARCHAR2(4) PRIMARY KEY,
    CONSTRAINT course_fk FOREIGN KEY (course_id) REFERENCES course (course_id)
    CONSTRAINT room_fk FOREIGN KEY (roomNo) REFERENCES room (roomNo));

我认为问题可能是我在教表中使用 course_id 作为 FK,所以我尝试了:

CREATE TABLE uses
  (roomUsage VARCHAR2(30) PRIMARY KEY,
  roomNo NUMBER(5) NOT NULL,
  courseName VARCHAR2(30) NOT NULL,
  CONSTRAINT room_fk FOREIGN KEY (roomNo) REFERENCES room (roomNo),
  CONSTRAINT course_fk FOREIGN KEY (courseName) REFERENCES course (courseName));

但它也不起作用并给出了同样的错误。我做错了什么?

【问题讨论】:

    标签: sql oracle foreign-keys primary-key


    【解决方案1】:

    您的某些表定义中缺少一些逗号(在instructor 中的lastname 之后,在最后两个表中的第一个fk 之后),并且instructor_id 中的数据类型不匹配(大小) teaches。此外,外键约束名称必须是唯一的 - 您在 uses 表中重用 course_fk - 重命名它。

    更正后的代码是这样的:

    CREATE TABLE course
        (course_id NUMBER(4) PRIMARY KEY,
        courseName VARCHAR2(30) NOT NULL,
        department VARCHAR2(50),
        semester VARCHAR2(10),
        maximumEnrolled NUMBER(36) NOT NULL
        );
    
    CREATE TABLE room
        (roomNo NUMBER(5) PRIMARY KEY,
        building VARCHAR2(10));
    
    CREATE TABLE instructor
        (instructor_id NUMBER(6) PRIMARY KEY,
        firstName VARCHAR2(20),
        lastName VARCHAR2(30) NOT NULL,
        ssn NUMBER(9) NOT NULL
        );
    
    CREATE TABLE teaches
        (instructor_id NUMBER(6) NOT NULL,
        course_id NUMBER(4) NOT NULL,
        teachingCourse VARCHAR2(4) PRIMARY KEY, 
        CONSTRAINT instructor_fk FOREIGN KEY (instructor_id) REFERENCES instructor (instructor_id),
        CONSTRAINT course_fk FOREIGN KEY (course_id) REFERENCES course (course_id)
        );
    
    CREATE TABLE uses
        (course_id NUMBER(4) NOT NULL,
        roomNo NUMBER(5) NOT NULL,
        roomUse VARCHAR2(4) PRIMARY KEY,
        CONSTRAINT course_fk2 FOREIGN KEY (course_id) REFERENCES course (course_id),
        CONSTRAINT room_fk FOREIGN KEY (roomNo) REFERENCES room (roomNo)
        );
    

    Working SQL Fiddle

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 2020-09-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多