所以我尝试创建以下表格,psql
不允许我创建这些表格,除非C_Subject
表中的UNIQUE
约束Curriculum_Subjects
。
CREATE TABLE IF NOT EXISTS Curriculum(
CID SERIAL NOT NULL,
Curriculum_Name VARCHAR(100),
Classes_Needed INTEGER,
Classes_Total INTEGER,
PRIMARY KEY(CID)
);
CREATE TABLE IF NOT EXISTS Class_Subjects(
C_Subject SERIAL NOT NULL,
Class_Subject VARCHAR(100),
PRIMARY KEY(C_Subject)
);
CREATE TABLE IF NOT EXISTS Curriculum_Subjects(
C_Subject SERIAL UNIQUE NOT NULL REFERENCES Class_Subjects(C_Subject),
CID SERIAL NOT NULL REFERENCES Curriculum(CID),
PRIMARY KEY(C_Subject, CID)
);
然而,我希望我的数据库工作的方式是一个C_Subject
可以在许多课程中。所以下面将相同的C_Subject
插入两个不同的课程应该是有效的。 CID
是不同课程的标识符。
INSERT INTO Curriculum_Subjects(C_Subject, CID)
VALUES(2,1);
INSERT INTO Curriculum_Subjects(C_Subject, CID)
VALUES(2,2);
psql
不会允许此插入,因为C_Subject
具有UNIQUE
约束。如果C_Subject
UNIQUE
属于复合键Curriculum_Subjects
,为什么PRIMARY KEY(C_Subject, CID)
需要{{1}}?这个插件可以实现吗?