ASP.NET C#表和SQL逻辑问题

ASP.NET C#表和SQL逻辑问题,c#,.net,sql,logic,C#,.net,Sql,Logic,嘿,我有三张表,分别是学生表、课程表和招生表。学生的主键为S_ID(学生ID),课程的主键为C_ID(课程ID)。在注册中,它只有S_ID和C_ID。我有一个对象数据源,可以在下拉菜单中显示所有学生的姓名(文本,S_ID作为值),并使用数据网格和另一个对象数据源显示单击时他注册的课程。我不会让学生也注册多个课程,但我不能这样做,因为课程表中不能有相同的ID,所以每个学生只注册一个课程 是否有某种选项可以在表中使用相同的ID 如果没有,那么我必须知道如何操作课程表中C_ID中的字符串,因为所有课程

嘿,我有三张表,分别是学生表、课程表和招生表。学生的主键为S_ID(学生ID),课程的主键为C_ID(课程ID)。在注册中,它只有S_ID和C_ID。我有一个对象数据源,可以在下拉菜单中显示所有学生的姓名(文本,S_ID作为值),并使用数据网格和另一个对象数据源显示单击时他注册的课程。我不会让学生也注册多个课程,但我不能这样做,因为课程表中不能有相同的ID,所以每个学生只注册一个课程

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

如果没有,那么我必须知道如何操作课程表中C_ID中的字符串,因为所有课程都以ISDVXXX或ITSXXXX或HGFXXXX开头。这可能很难理解,但希望有人能帮忙

举个例子可能会有所帮助
因此,如果一个S_ID为123的名为Joe的学生注册到ISDV,他将注册到所有以ISDV开头的课程。但我的问题是,我的课程表对于每门课程都必须有唯一的ID,比如ISDV123、ISDV346、ISDV395等等。。。所以这也破坏了我的注册表,因为我不能简单地把ISDV放在那里,它需要一个特定的课程,但他已经注册了所有的课程。任何进一步的澄清都将被给出:P谢谢…

您所寻找的是一种多对多关系,即一个学生可以有多个课程,一个课程可以有多个学生。因此,您的链接表(这是您打算注册的吗?)应该有两列,一列用于课程ID,一列用于学生ID

如果你有123号学生和234号学生,还有ABC和XYZ课程,你的桌子看起来像:

S_ID   C_ID
123    ABC
123    XYZ
234    ABC
现在,对于注册上的PK,您可以使用复合密钥,也可以添加唯一的整数RowId(标识或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

您试图解决的是一个多值属性问题。基本上,您有两个表,其中一个(
students
)的主键是另一个表(
classes
)中的外键。您不希望在
classes
表中有多个相同的类,但您确实希望
student
能够有多个


因此,有一个非常简单的修复方法,您创建另一个表,其中至少包含这两列:student_id和class_id。这样,您可以有一个
类,多个
学生链接到该类,还有多个
,学生可以链接到这些类。

您的注册表代表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之外的其他字段,因为这两个字段一起标识注册