【问题标题】:ASP.NET and a One-to-Many-to-Many ScenarioASP.NET 和一对多对多场景
【发布时间】:2009-03-20 16:04:54
【问题描述】:

我是 ASP.NET 新手,但不是编程新手。我正在将我们当前的站点从 PHP/MySQL 迁移到 ASP.NET(3.5)/SqlServer。自从该网站启动以来,我一直潜伏在这里,所以我相信你们中的一个(或多个)可以帮助我。这是场景:

这是一个培训部门网站和部门。有一个课程目录存储在表course 中。每门课程可能有许多必备课程,例如,A 和 B 是 C 的先决条件。我通常会将其存储为course 中的逗号分隔列或单独的表course_prereqcourse_course 作为递归关系。这部分我可以做。

但是,业务规则要求每门课程可以有多组先决条件。例如,N 需要 ABC,或 N 需要 XY。这就是我卡住的地方。

以前,我将此信息存储在行N 的列中为A,B,C|X,Y,将 id 解析为 PHP 2D 数组,为 id 在该数组中的所有行提交第二个查询,然后使用 PHP将这些行分成各自的组。完成所有这些处理后,先决条件组将在网页上显示为单独的表格,如下所示:

| A | A's information goes here |
| B | B's information goes here |
| C | C's information goes here |
- - - - - - - OR - - - - - - - -
| X | X's information goes here |
| Y | Y's information goes here |

我将如何使用 ASP.NET 完成此任务?

【问题讨论】:

    标签: asp.net sql-server one-to-many


    【解决方案1】:

    添加一个表格来保存Prerequisite Sets。该表为该组中的每门课程保存一个组 ID 和返回课程表的密钥。对于给定的集合 ID,该表可能有几行,因此您的主键将是集合 ID加上课程 ID。然后在您的course_prereq 表中,您将课程与不同的先决条件集相关联。可以在那里假设 OR 关系,因为任何 ANDs 都在它们的集合中强制执行。

    【讨论】:

    • 我喜欢数据库模型。现在如何让它显示在 ASP.NET 页面中,以便每个 prereq_set 都是它自己的网格视图?中继器可以对返回的行进行分组,还是我需要为此构建自定义控件?
    • 您可以将 gridview 和 sqldatasource 放在中继器中,但这意味着向数据库发送多个请求。您可能希望使用自定义 html 构建一个中继器 - 您可以使用多种不同的方式来处理它。
    【解决方案2】:

    有一个名为 PrerequisiteSet 的表,它对每个先决条件进行 FK。然后有一个 Course_PrerequisiteSet 多对多表,该表对 Course 和 PrerequisiteSet 进行了 FK。大多数情况下 Course_PrerequistieSet 中只有一个条目,但如果有多个条目,则为 OR 关系。

    【讨论】:

    • (请参阅对 Joel Coehoorn 回答的评论。)
    【解决方案3】:

    以上两个答案都非常有帮助。我最终只使用了一个数据库表,而不是建议的两个。该表包含course_idprereq_idset_id,它们共同构成主键。

    在 ASP.NET 页面中,我使用转发器循环返回课程的先决条件集的 sqldatasource 存储过程,以及该转发器内的 gridview 从第二个 sqldatasource 存储过程读取各个先决条件信息。像这样:

    RepeaterSqlDataSource(返回集合 ID)
    Repeater
    . . . GridViewSqlDataSource(返回集合中每个 prereq_id 的课程信息
    . . . GridView

    希望这对其他看到类似情况的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2014-08-02
      相关资源
      最近更新 更多