2010-11-09 39 views
0

嗨,我有3个名为STUDENT,COURSE和ENROLLMENT的表。学生有一个PK的S_ID(学生ID)和COURSE有PK的C_ID(课程ID)。在注册时,它只有S_ID和C_ID。我有一个对象数据源,在下拉菜单中显示所有学生的姓名(在文本中,S_ID为值),它将显示使用数据网格和另一个对象数据源在点击时注册了哪些课程。我不想让学生也有多个课程需要注册,但我不能这样做,因为你不能在COURSE表中输入相同的ID,所以每个学生只能注册一门课程。表和SQL逻辑的ASP.NET C#问题

是否有某种选项可以在表中使用相同的ID?

如果没有,那我肯定一些如何操纵C_ID字符串中的课程表,因为所有的课程,ISDVXXX或ITSXXXX或HGFXXXX启动。这可能很难理解,但希望有人会帮助。

一个例子可以帮助 所以,如果一个名为乔的123 S_ID学生注册到ISDV,他将被注册到所有以ISDV开始的课程。但我的问题是,我的课程表必须为每门课程设置独特的ID,例如ISDV123,ISDV346,ISDV395等......所以这也毁了我的注册表,因为我不能简单地在那里安装ISDV,它需要一个特定的课程,但他向所有人登记。任何更多的澄清,将获得:P谢谢...

回答

1

什么你”重新尝试解决是一个多值属性问题。基本上,你有两个表,其中一个(students)的主键是另一个表中的外键(classes)。您不希望在classes表中拥有同一班级的倍数,但您确实希望student能够拥有多个classes

所以,有一个很简单的解决,您创建一个包含至少这两列另一个表:student_id数据和类标识码。通过这种方式,你可以有一个class多个students链接到,也多次classes其中student可以链接到到。

1

你所寻找的是一个多对多的关系 - 即一个学生可以有多个课程,一门课程可以有多个学生。所以你的链接表(这是你想要注册的吗?)应该有两列,一个是课程ID,一个是学生ID。

所以,如果你有学生123学生234,和课程ABC和XYZ,你的表看起来是这样的:在入学现在

S_ID C_ID 
123 ABC 
123 XYZ 
234 ABC 

,你PK,你既可以使用组合键,或添加一个唯一的整数RowId(Identity或HiLo算法)。

在这种情况下,您的报名表将是这个样子:

S_ID C_ID  RowID 
123  ABC  1 
123  XYZ  2 
234  ABC  3 

然后,看到一个学生是在什么类,你可以不喜欢

Select * from courses c 
inner join enrollments e 
on c.C_ID = e.C_ID 
AND e.S_ID = @StudentId 
0

您的注册表代表Studend和课程表之间的m:n关系。

例如与S_ID = 69你的学生已注册到与C_ID = ISDVXXX,C_ID = ITSXXXX,C_ID = HGFXXXX课程 学生可以被登记到更多的课程多的学生可以被登记到相同的课程,这是为什么你有你的注册表。在我们的示例中,注册将具有以下行: (69,ISDVXXX),(69,ITSXXXX),(69,HGFXXXX)。 如果稍后S_ID = 96的学生以C_ID = ISDVXXX加入课程,以下将是注册表的新行: (69,ISDVXXX),(69,ITSXXXX),(69,HGFXXXX), (96,ISDVXXX)。 这里要理解的重要一点是,注册表中的每一行代表一个学生注册课程,并且不需要除学生ID和课程ID以外的其他字段,这两个字段一起标识注册。