简体   繁体   English

PostgreSQL错误:没有唯一约束匹配给定键的引用表

[英]PostgreSQL Error: there is not unique constraint matching given keys for referenced table

I am making a database for registration of classes and I am having trouble with the "Enrollment" table. 我正在建立一个用于注册班级的数据库,而“注册”表遇到了麻烦。 I need to pass all the primary keys from sections into enrollment, but I also want to pass an additional key ("sectionNumber"). 我需要将所有主键从各个部分传递到注册中,但是我还想传递一个附加键(“ sectionNumber”)。 However, I do not want to make "sectionNumber" part of the primary key for "Sections", because I don't want to be passing sectionNumber into every table that I have a foreign key in that is from "Sections." 但是,我不想将“ sectionNumber”作为“ Sections”的主键的一部分,因为我不想将sectionNumber传递到我有外键的每个表中,这些表都来自“ Sections”。 Anyone got any suggestions on how to fix this? 有人对如何解决此问题有任何建议吗? I keep getting the error below. 我不断收到以下错误。

-- HOLDS A SPECIFIC COURSE WITHOUT THE INSTANCES OF THE CLASS --
CREATE TABLE Courses (
    courseID      SERIAL      UNIQUE NOT NULL,
    department    TEXT               NOT NULL,
    courseNumber  VARCHAR(10)        NOT NULL,
    courseName    TEXT        UNIQUE NOT NULL,
    credits       INT                NOT NULL,
    PRIMARY KEY(courseID)
);

-- PEOPLE SUPERTYPE --
CREATE TABLE People (
    pid   SERIAL            UNIQUE NOT NULL,
    fname TEXT                     NOT NULL,
    lname TEXT                     NOT NULL,
    PRIMARY KEY(pid)
);

-- HOLDS THE DIFFERENT PROFESSORS TEACHING AT THE SCHOOL --
-- SUBTYPE OF PEOPLE --
CREATE TABLE Professors (
    professorID  INT  UNIQUE NOT NULL,
    status       TEXT        NOT NULL,
    CHECK(status = 'Full-Time' OR status = 'Part-time'),
    PRIMARY KEY(professorID),
    FOREIGN KEY(professorID) REFERENCES People(pid)
);

-- HOLDS THE SPECIFIC INSTANCES OF THE CLASS DEPENDING ON THE YEAR AND TERM --
CREATE TABLE Sections (
    courseID      INT          NOT NULL,
    year          INT          NOT NULL,
    term          TEXT         NOT NULL, 
    sectionNumber INT          NOT NULL,
    startDate     DATE         NOT NULL,
    endDate       DATE         NOT NULL,
    crn           INT          NOT NULL,
    CHECK(term = 'Fall' OR term = 'Winter' OR term = 'Spring' OR term = 'Summer'),
    PRIMARY KEY(courseID, year, term),
    FOREIGN KEY(courseID) REFERENCES Courses(courseID)
);

-- HOLDS THE EVENT OF THE CLASS --
-- A CLASS MAY HAVE DIFFERENT DAYS ON WHICH --
-- THEY MEET ON, SO THIS ALLOWS A CERTAIN --
-- SECTION TO HAVE SEVERAL DAYS WITHOUT CONFLICT --
CREATE TABLE ClassEvent (
    professorID   INT   UNIQUE NOT NULL,
    courseID      INT          NOT NULL,
    year          INT          NOT NULL,
    term          TEXT         NOT NULL,
    day           TEXT, 
    startTime     TIME,
    endTime       TIME,
    location      TEXT,
    campus        TEXT,
    CHECK(day = 'Monday' OR day = 'Tuesday' OR day = 'Wednesday' OR day = 'Thursday' OR day = 'Friday' OR day = 'Saturday' OR day = 'Sunday' OR day IS NULL),
    CHECK(term = 'Fall' OR term = 'Winter' OR term = 'Spring' OR term = 'Summer'),
    PRIMARY KEY(professorID, courseID, year, term, day, startTime, endTime),
    FOREIGN KEY(professorID) REFERENCES Professors(professorID),
    FOREIGN KEY(courseID, year, term) REFERENCES Sections(courseID, year, term)
);

-- GENERATES THE PREREQUESITES --
CREATE TABLE Prerequisites (
    courseID      INT        NOT NULL,
    year          INT        NOT NULL,
    term          TEXT       NOT NULL,
    prereqID      INT        NOT NULL,
    CHECK(term = 'Fall' OR term = 'Winter' OR term = 'Spring' OR term = 'Summer'),
    PRIMARY KEY(courseID, year, term, prereqID),
    FOREIGN KEY(courseID, year, term) REFERENCES Sections(courseID, year, term),
    FOREIGN KEY(prereqID) REFERENCES Courses(courseID)
);


-- HOLDS THE STUDENTS THAT WILL BE TAKING THE CLASSES --
-- SUBTYPE OF PEOPLE --
CREATE TABLE Students (
    studentID   INT  REFERENCES People(pid) UNIQUE NOT NULL,
    studentName TEXT                               NOT NULL,
    gradYear    DATE                        UNIQUE NOT NULL,
    PRIMARY KEY(studentID)
);

-- HOLDS A CLASS RECORD FOR STUDENTS (AND POSSIBLY PROFESSORS) --
CREATE TABLE Enrollment (
    studentID     INT  UNIQUE NOT NULL,
    courseID      INT         NOT NULL,
    year          INT         NOT NULL,
    term          TEXT        NOT NULL,
    sectionNumber INT         NOT NULL,
    grade         TEXT,
    CHECK(grade = 'A' OR grade = 'A-' OR grade = 'B+' OR grade = 'B' OR grade = 'B-' OR grade = 'C+' OR grade = 'C' OR grade = 'C-' OR grade = 'D+' OR grade = 'D' OR grade = 'D-' OR grade = 'F' OR grade = 'P/F'),
    CHECK(term = 'Fall' OR term = 'Winter' OR term = 'Spring' OR term = 'Summer'),
    PRIMARY KEY(studentID, courseID, year, term, sectionNumber),
    FOREIGN KEY(studentID) REFERENCES Students(studentID),
    FOREIGN KEY(courseID, year, term) REFERENCES Sections(courseID, year, term),
    FOREIGN KEY(sectionNumber) REFERENCES Sections(sectionNumber)
);

-- HOLDS THE DIFFERENT DEGREES THAT CAN BE ATTAINED AT THE COLLEGE/UNIVERSITY --
CREATE TABLE Degrees (
    degreeID     SERIAL       UNIQUE NOT NULL,
    degreeName   TEXT                NOT NULL,
    degreeType   TEXT                NOT NULL,
    degDepartment VARCHAR(4)          NOT NULL,
    CHECK(degreeType = 'Major' OR degreeType = 'Minor' OR degreeType = 'Masters'),
    PRIMARY KEY(degreeID)
);

-- HOLDS THE CLASSES THAT WILL MAKE UP A DEGREE --
CREATE TABLE DegreeReq (
    degreeID INT REFERENCES Degrees(degreeID) UNIQUE NOT NULL,
    courseID INT REFERENCES Courses(courseID)        NOT NULL,
    PRIMARY KEY(degreeID, courseID)
);

-- HOLDS THE INSTANCE OF A DEGREE FOR A CERTAIN STUDENT --
-- FOR EXAMPLE: A STUDENT CAN HAVE A MAJOR AND A MINOR --
-- SO HE/SHE CAN STORE THEM SEPARATELY --
CREATE TABLE DegreeInstance (
    degreeID        INT  REFERENCES Degrees(degreeID)   UNIQUE NOT NULL,
    studentID       INT  REFERENCES Students(studentID) UNIQUE NOT NULL,
    startDate       DATE                                       NOT NULL,
    endDate         DATE                                       NOT NULL,
    creditsRequired INT                                        NOT NULL, 
    PRIMARY KEY(degreeID, studentID)
);

-- HOLDS ALL THE RATE MY PROFESSOR STATS --
CREATE TABLE Rating (
    professorID      INT        UNIQUE NOT NULL,
    rmpID            BIGINT     UNIQUE NOT NULL,
    avgRating        FLOAT             NOT NULL,
    avgHelpfulness   FLOAT             NOT NULL,
    avgClarity       FLOAT             NOT NULL,
    avgEasiness      FLOAT             NOT NULL,
    PRIMARY KEY(professorID, rmpID),
    FOREIGN KEY(professorID) REFERENCES Professors(professorID)
);
ERROR:  there is no unique constraint matching given keys for referenced table "sections"
********** Error **********

ERROR: there is no unique constraint matching given keys for referenced table "sections"
SQL state: 42830

You have this relationship declared: 您已声明此关系:

FOREIGN KEY(sectionNumber) REFERENCES Sections(sectionNumber)

sectionnumber is not declared to be unique. sectionnumber未声明为唯一。 You need to fix the data structure or use the primary key. 您需要修复数据结构或使用主键。

暂无
暂无

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

相关问题 Postgresql错误:没有唯一约束匹配给定键的引用表 - Postgresql ERROR: there is no unique constraint matching given keys for referenced table 没有与引用表“用户”的给定键匹配的唯一约束(PostgreSQL) - No unique constraint matching given keys for referenced table “users” (PostgreSQL) 数据库原型 Postgresql:错误:没有唯一约束匹配给定键的引用表“消息” - Database prototype Postgresql: ERROR: there is no unique constraint matching given keys for referenced table “messages” 没有唯一约束匹配给定引用表的键 - No unique constraint matching given keys for referenced table PSQL错误,没有唯一约束匹配给定表引用的键 - PSQL Error there is no unique constraint matching given keys for referenced table 错误:没有唯一约束匹配给定键的引用表 - ERROR: there is no unique constraint matching given keys for referenced table 错误:没有唯一约束匹配给定键的引用表“bar” - ERROR: there is no unique constraint matching given keys for referenced table "bar" 远离错误:没有唯一约束匹配引用表的给定键 - Away around Error: There is no unique constraint matching given keys for referenced table 错误:没有唯一约束匹配给定表的键 - ERROR: No unique constraint matching given keys for referenced table 如何修复错误“没有唯一约束匹配引用表的给定键” - How to fix error "there is no unique constraint matching given keys for referenced table"
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM