2013-08-20 113 views
1

我需要知道复合键是否允许重复值?复合键是否允许重复

例如:

我有2个表格。

1)表'学生'有字段studentID(PK),标准,地址。

2)表'Class'具有字段classID(PK),classname,studentID(FK)。

通过组合键为(classID,studentID),它是否允许重复值?

正是我想知道的是,有没有可能在类表的classID字段中输入重复值?因为我不能输入重复的值到classID中,因为它是主键字段。

复合键将帮助我实现这一目标吗?请帮助我。

+1

你试过了吗?它允许重复吗? – Michelle

+0

ya。它正在增加。我有第三个表“school”,其中包含schoolID(PK),classID(FK),studentID(FK)的字段。但问题是我不能像表格'学校'那样为键(classID,studentID,schoolID)添加一个组合键。那么2个外键和一个主键的组合会在'学校'表中创建一个组合键时出现问题吗? – ramakrishnan

回答

0

有了你现在列出的结构,你将不会有任何一个班的学生在一个以上。我认为你误解了组合键的用途。为了规范这个数据库,你所期望的EnrolledStudents或类似的第三个表,其中包含一个复合主键:

 

     Student 
     studentID(PK) 

     Class 
     classID(PK) 

     EnrolledStudent 
     studentID(PK) (FK on Student.studentID) 
     classID(PK) (FK on Class.classID) 
 

这样,你保证你不重复无效最终的任何地方。

1

在一个组合键中,整个元素集很独特,但每个元素可以重复多次。

因此,

  • 如果你有studentID = 1,2,3 ...
  • 与同为Class

Student有几个记录 - >那么你的第三个表可以有复合钥匙

(1, 1) 
(2, 2) 
(1, 2) 
... 
1

它允许重复。不允许的唯一可能性是复合键(studentID,classID)的重复,就像“C.Champagne”所说的那样。所以我们可以再次有(1,2)(1,3)(2,3)但不是(1,2)或(1,3)的组合。

而我的问题的第二个答案是,我没有通过使用前2个表的主键为第三个表('学校')添加组合键。例如:第三张“学校”有字段schoolID(PK),classID(FK),studentID(FK)。但我面临的问题是,我不能添加一个组合键为表'学校'的字段(classID,studentID,schoolID)。我犯的错误是,我试图通过参考前两张表格和它的工作,将外键添加到学校表格中。我最初给出的是:

ALTER TABLE学校ADD FOREIGN KEY(studentID) REFERENCES student(studentID);

ALTER TABLE学校ADD FOREIGN KEY(classID) REFERENCES class(classID);

我犯的错误是我试图从两个班级和学生表添加外键。

但最后,下面通过添加外键,校表的工作是:

ALTER TABLE学校添加外键(studentID,的classID) 参考类(studentID,的classID);

这里给作为参考类表是绰绰有余作为类表已经持有studentID,的classID。

那么这就是它是如何工作的最后。