我是ASP.NET新手,但不是编程人员。我正在将我们当前的站点从PHP / MySQL迁移到ASP.NET(3.5)/ SqlServer。自网站推出以来,我一直潜伏在这里,所以我相信你们中的一个(或更多)可以帮助我。这是场景:
这是一个培训部门网站和部门。有一个课程目录存储在表course
中。每个课程可能有许多必备课程,例如,A和B是C的先决条件。我通常将其存储为course
中的逗号分隔列或单独的表course_prereq
或{{ 1}}作为递归关系。这部分我可以做。
但是,业务规则要求每个课程都有多套先决条件。例如,course_course
需要N
,A
和B
,或C
需要N
和X
。这就是我被困住的地方。
以前,我将此信息存储在行Y
的列中作为N
,将ID解析为PHP 2D数组,为其ID在该数组中的所有行提交第二个查询,然后使用PHP将这些行分成各自的组。完成所有这些处理后,先决条件组将在网页上显示为单独的表格,如下所示:
A,B,C|X,Y
如何使用ASP.NET实现此目的?
答案 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_id
,prereq_id
和set_id
,它们共同构成主键。
在ASP.NET页面中,我使用转发器遍历sqldatasource存储过程,该过程返回课程的先决条件集,以及在该转发器内部的gridview,它从第二个sqldatasource存储过程读取各个先决条件信息。像这样:
RepeaterSqlDataSource
(返回设置ID)
Repeater
。 。 。GridViewSqlDataSource
(返回集合中每个prereq_id的课程信息 。 。 。GridView
希望这对其他任何寻找类似场景的人都有帮助。