【问题标题】:ASP.NET C# problem with Table and SQL logic表和 SQL 逻辑的 ASP.NET C# 问题
【发布时间】:2010-11-09 02:21:23
【问题描述】:

嘿,我有 3 个表,分别称为 STUDENT、COURSE 和 ENROLLMENT。 STUDENT 的 PK 为 S_ID(学生 ID),COURSE 的 PK 为 C_ID(课程 ID)。在注册时它只有 S_ID 和 C_ID。我有一个对象数据源,用于在下拉菜单中显示所有学生的姓名(以文本形式,并以 S_ID 作为值),并使用数据网格和另一个对象数据源显示他在单击时注册了哪些课程。我不会让学生也注册多门课程,但我不能这样做,因为你不能在 COURSE 表中拥有相同的 ID,所以每个学生只注册一门课程。

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

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

一个例子可能会有所帮助 因此,如果一个名为 Joe 且 S_ID 为 123 的学生注册到 ISDV,他将注册到所有以 ISDV 开头的课程。但我的问题是我的 COURSE 表必须为每门课程都有唯一的 ID,例如 ISDV123、ISDV346、ISDV395 等……所以这也破坏了我的入学表,因为我不能简单地在里面放 ISDV,它需要一个特定的课程,但他已向所有人注册。将给出更多澄清:P 谢谢...

【问题讨论】:

    标签: c# .net sql logic


    【解决方案1】:

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

    因此,有一个非常简单的解决方法,您创建另一个表,其中至少包含这两列:student_id 和 class_id。这样,您可以有一个 class 可以链接到多个 students,也可以有多个 classes 可以链接到 student

    【讨论】:

      【解决方案2】:

      您正在寻找的是多对多关系 - 即一个学生可以有多个课程,一个课程可以有多个学生。因此,您的链接表(这是您打算注册的目的吗?)应该有两列,一列用于课程 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
      

      【讨论】:

        【解决方案3】:

        您的 Enrollment 表代表 Studend 和 Course 表之间的 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 的课程,以下将是 Enrollment 表的新行: (69, ISDVXXX), (69, ITSXXXX), (69, HGFXXXX), (96, ISDVXXX)。 这里要理解的重要一点是,Enrollment 表中的每一行代表一个已注册到课程的学生,除了学生 ID 和课程 ID 之外,不需要其他字段,因为这两个字段共同标识一个注册。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-14
          • 1970-01-01
          • 2017-11-26
          • 2013-12-07
          • 2016-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多