我需要知道复合键是否允许重复值?
例如:
我有 2 张桌子。
1)表“学生”,其中有学生ID(PK),标准,地址字段。
2) 表 'Class' 具有字段 classID(PK)、classname、studentID(FK)。
通过将复合键作为(classID,studentID),它是否允许重复值?
正是我想知道的是,是否有可能在类表的 classID 字段中输入重复值?因为我不能在 classID 中输入重复值,因为它是一个主键字段。
复合键会帮助我实现这一目标吗?请帮助我。
我需要知道复合键是否允许重复值?
例如:
我有 2 张桌子。
1)表“学生”,其中有学生ID(PK),标准,地址字段。
2) 表 'Class' 具有字段 classID(PK)、classname、studentID(FK)。
通过将复合键作为(classID,studentID),它是否允许重复值?
正是我想知道的是,是否有可能在类表的 classID 字段中输入重复值?因为我不能在 classID 中输入重复值,因为它是一个主键字段。
复合键会帮助我实现这一目标吗?请帮助我。
在复合键中,整个元素集必须是唯一的,但每个元素可以重复多次。
因此,
Student有studentID= 1, 2, 3...Class-> 然后你的第三个表有复合键
(1, 1)
(2, 2)
(1, 2)
...
您可以看到多个记录具有相同的 studentId(此处为 1)或 classId(此处为 2),但整个组合永远不会相同。
它允许重复。唯一不允许的可能性是复合键(studentID,classID)的重复项,如“C.Champagne”所说。所以我们可以有像(1,2)(1,3)(2,3)这样的组合,但不能再有(1,2)或(1,3)。
我的问题的第二个答案是我未能通过使用前 2 个表的主键为第三个表(“学校”)添加复合键。
例如:第三张表“学校”有字段 schoolID(PK)、classID(FK)、studentID(FK)。但是我面临的问题是我无法为带有字段(classID,studentID,schoolID)的表“学校”添加复合键。我犯的错误是,我尝试通过引用第一个两个表来将外键添加到 School 表中,并且它不起作用。我最初给出的是这样的:
ALTER TABLE school ADD FOREIGN KEY (studentID) REFERENCES student(studentID);
ALTER TABLE school ADD FOREIGN KEY (classID) REFERENCES class(classID);
我犯的错误是我试图从班级和学生表中添加外键。
但最后通过在学校表中添加外键来实现以下工作:
ALTER TABLE school ADD FOREIGN KEY (studentID,classID) REFERENCES class(studentID,classID);
在这里作为类表提供参考已经绰绰有余,因为类表已经包含学生ID,类ID。
所以这就是它最终的工作方式。
使用您当前列出的结构,您将不会有超过一个学生的任何课程。我认为您误解了复合键的目的。为了规范化这个数据库,你会期望第三个表EnrolledStudents或类似的表,它包含一个复合主键:
Student
studentID(PK)
Class
classID(PK)
EnrolledStudent
studentID(PK) (FK on Student.studentID)
classID(PK) (FK on Class.classID)
这样你就可以确保你不会在任何地方出现无效的重复。