【发布时间】:2016-08-03 21:52:22
【问题描述】:
尝试创建一个数据库,该数据库允许一门课程有几个部分,一个部分有几个事件/时段,以了解他们何时相遇。一切都正确链接,但是我遇到了一个 PostgreSQL 错误的问题,我意识到它告诉我我需要“Sections”和“ClassEvent”表中的 UNIQUE 属性,但我不能让它们成为 UNIQUE,因为它是信息应该/可以重复。
删除表如果存在统计; DROP TABLE IF EXISTS ClassEvent; DROP TABLE IF EXISTS 注册; 如果存在 DegreeReq 则删除表; DROP TABLE IF EXISTS DegreeInstance; 如果存在部分,则删除表; 如果存在学生,则丢弃表; 如果存在学位,则删除表; 删除表如果存在教授; 如果存在人,则删除表; DROP TABLE IF EXISTS 课程; -- 在没有课程实例的情况下举办特定课程 -- 创建表课程( courseID SERIAL UNIQUE NOT NULL, 部门 VARCHAR(4) NOT NULL, courseNumber VARCHAR(5) NOT NULL, courseName TEXT UNIQUE NOT NULL, 积分 INT NOT NULL, 主键(课程 ID) ); -- 人超型 -- 创建表人( pid SERIAL UNIQUE NOT NULL, fname 文本不为空, lname TEXT NOT NULL, 主键(pid) ); -- 拥有不同的教授在学校任教 -- -- 人的亚型 -- 创建表教授( ProfessorID SERIAL UNIQUE NOT NULL, 状态文本不为空, 检查(状态='全职'或状态='兼职'), 主键(教授 ID) ); -- 持有取决于年份和期限的类的具体实例 -- 创建表部分( crn INT UNIQUE NOT NULL, courseID SERIAL REFERENCES Courses(courseID) NOT NULL, 年份 INT NOT NULL, 术语文本不为空, sectionNumber INT NOT NULL, 开始日期日期不为空, endDate 日期不为空, professorID INT REFERENCES Professors(professorID) UNIQUE NOT NULL, 主键(crn, courseID) ); -- 举办班级活动 -- -- 一个班级可能有不同的日子 -- ——他们见面了,所以这允许一定的—— -- 部分有几天没有冲突 -- 创建表类事件( crn INT REFERENCES Sections(crn) NOT NULL, year INT REFERENCES Sections(year) NOT NULL, term TEXT REFERENCES Sections(term) NOT NULL, professorID INT REFERENCES 教授(professorID)不为空, 日文本, 开始时间时间, endTime 时间, 位置文本, 校园文, CHECK(day = 'Monday' OR day = 'Tuesday' OR day = 'Wednesday' OR day = 'Thursday' OR day = 'Friday' OR day = 'Saturday' OR day = 'Sunday' OR day = NULL), 主键(crn,年份,期限) ); -- 持有将要上课的学生 -- -- 人的亚型 -- 创建表学生( studentID INT REFERENCES People(pid) UNIQUE NOT NULL, 学生姓名文本不为空, 毕业年份日期唯一不为空, 主键(学生 ID) ); -- 拥有学生(可能还有教授)的一流记录 -- 创建表注册 ( studentID INT REFERENCES Students(studentID) UNIQUE NOT NULL, crn INT REFERENCES Sections(crn) NOT NULL, 等级文本不为空, 主键(学生 ID,crn) ); -- 拥有可以在学院/大学获得的不同学位 -- 创建表度数( degreeID SERIAL UNIQUE NOT NULL, 学位名称文本不为空, degreeType TEXT NOT NULL, degDepartment VARCHAR(4) 非空, 检查(degreeType = 'Major' OR degreeType = 'Minor' OR degreeType = 'Masters'), 主键(学位 ID) ); -- 开设学位课程 -- 创建表 DegreeReq ( degreeID INT REFERENCES Degrees(degreeID) UNIQUE NOT NULL, courseID INT REFERENCES Courses(courseID) UNIQUE NOT NULL, 主键(学位 ID,课程 ID) ); -- 持有特定学生的学位 -- -- 例如:一个学生可以有一个主修和一个辅修 -- -- 这样他/她就可以单独存放它们 -- 创建表学位实例( degreeID INT REFERENCES Degrees(degreeID) UNIQUE NOT NULL, studentID INT REFERENCES Students(studentID) UNIQUE NOT NULL, 开始日期日期不为空, endDate 日期不为空, creditsRequired INT NOT NULL, 主键(学位ID,学生ID) ); -- 持有我教授统计的所有费率 -- 创建表统计信息( professorID INT REFERENCES Professors(professorID) UNIQUE NOT NULL, dateSubmitted TIMESTAMP UNIQUE NOT NULL, 评级浮动不为空, 帮助 FLOAT NOT NULL, 清晰度浮点非空, 容易浮动不为空, 主键(professorID, dateSubmitted) ); 插入课程(部门、课程编号、课程名称、学分) 价值观 ('CMPT', '120L', '编程入门', 4), ('CMPT', '220L', '软件开发 I', 4), ('CMPT', '221L', '软件开发 II', 4), ('CMPT', '230L', '软件系统 + 分析', 4), ('CMPT', '306N', '数据通信', 4), ('CMPT', '308L', '数据库管理', 4), ('CMPT', '307N', '互联网络', 4), ('CMPT', '330L', '系统设计', 4), ('CMPT','422L','计算机组织和架构',4), ('CMPT', '435L', '算法分析与设计', 4), ('CMPT', '424L', '操作系统', 4), ('CMPT', '432L', '编译器设计', 4), ('CMPT', '331L', '程序设计语言理论', 4), ('CMPT', '440L', '形式语言和可计算性', 4), ('CMPT', '333L', '语言学习', 4), ('CMPT', '475L', 'CS 项目 I', 4), ('CMPT', '476L', 'CS 项目 II', 4), ('BUS', '100N', 'Intro to Business & Management', 4), (“数学”,“130L”,“统计介绍 I”,3), ('数学','241L','微积分 I',4), ('数学','242L','微积分 II',4), ('FYS', '101L', '第一年研讨会', 4), ('ENG','120L','为大学写作',3), (“菲尔”,“101L”,“哲学观点”,3), ('MUS', '120L', '音乐理论 I', 3), ('ECON', '103L', '微观经济学原理', 3), ('ECON', '104L', '宏观经济学原理', 3), ('数学','343L','微积分 III',4), ('数学','310L','数学推理入门',3), ('CMPT', '416N', '网络安全简介', 4), ('CMPT', '446N', '计算机图形学', 4), ('CMPT','404L','人工智能',4), ('CMPT', '305L', '技术、伦理与社会', 3), ('CMPT', '192N', '竞争性编程', 1); 插入人员(fname,lname) 价值观 (“马科斯”,“巴比里”), (“詹姆斯”,“克劳利”), ('凯莉','教皇'), (“巴勃罗”,“里瓦斯”), (“马修”,“约翰逊”), ('安妮','马修斯'), (“乔”,“史密斯”), (“迈克”,“艾米特”), ('迈克尔·乔丹'), (“艾伦”,“劳工”); INSERT INTO Professors(professorID, status) 价值观 (4, '全职'), (5,“全职”), (6,“全职”), (7,“全职”), (10,“全职”); 插入部分(crn,courseID,year,term,sectionNumber,startDate,endDate,professorID) 价值观 (11111, 1, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 4), (11112, 1, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 4), (11113, 1, 2016, '秋季', 113, '2016-08-29', '2016-12-15', 4), (11121, 2, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 5), (11122, 2, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 5), (11123, 2, 2016, '秋季', 113, '2016-08-29', '2016-12-15', 5), (11211, 3, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 6), (11212, 3, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 6), (11213, 3, 2016, '秋季', 113, '2016-08-29', '2016-12-15', 6), (11214, 4, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 7), (11215, 4, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 7), (11216, 5, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 10), (11217, 6, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 10), (11118, 6, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 4), (11119, 6, 2016, '秋季', 113, '2016-08-29', '2016-12-15', 5), (11120, 6, 2016, '秋季', 114, '2016-08-29', '2016-12-15', 4), (11200, 7, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 5), (11201, 7, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 5), (11202, 8, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 10), (11203, 9, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 10), (11204, 10, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 6), (11205, 10, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 6), (11206, 10, 2016, '秋季', 113, '2016-08-29', '2016-12-15', 6), (11207, 10, 2016, '秋季', 114, '2016-08-29', '2016-12-15', 6), (11208, 11, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 4), (11209, 11, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 4), (11222, 12, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 4), (11333, 12, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 5), (11445, 12, 2016, '秋季', 113, '2016-08-29', '2016-12-15', 7), (11111, 12, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 4), (11678, 13, 2016, '秋季', 111, '2016-08-29', '2016-12-15', 10), (11679, 13, 2016, '秋季', 112, '2016-08-29', '2016-12-15', 4); 选择 * 从部分;我尝试这样做,但出现以下错误:
错误:没有唯一约束匹配引用表“节”的给定键 ********** 错误 ********** 错误:没有唯一约束匹配引用表“节”的给定键 SQL状态:42830
【问题讨论】:
标签: sql database postgresql unique