ASP.NET和一对多对多方案

时间:2009-03-20 16:04:54

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

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

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

但是,业务规则要求每个课程都有多套先决条件。例如,course_course需要NAB,或C需要NX。这就是我被困住的地方。

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

  

A,B,C|X,Y

如何使用ASP.NET实现此目的?

3 个答案:

答案 0 :(得分:1)

添加一个表以保留Prerequisite Sets。此表包含集合ID和键,返回集合中每个课程的课程表。对于给定的集ID,该表可能有多行,因此您的主键将是设置ID 加上的课程ID。然后在您的course_prereq表中,您将课程与不同的先决条件集相关联。可以在那里假设OR关系,因为任何AND都在集合中强制执行。

答案 1 :(得分:1)

有一个名为PrerequisiteSet的表,它对每个先决条件都有FK。然后有一个Course_PrerequisiteSet多对多表FKs到Course和PrerequisiteSet。大部分时间在Course_PrerequistieSet中只有一个条目,但如果有多个条目,则它将是OR关系。

答案 2 :(得分:0)

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

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

  

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

希望这对其他任何寻找类似场景的人都有帮助。