主表 课题间的关系 课题号 课题名 课题间存在的关系 1001课题的关联课题
1001 abc 1001 1002 1001 1002
1002 cdg 1001 1005 ⇒ 1001 1005
1003 dfa 1006 1002 1001 1006
1004 her 1006 1003 1001 1003
1005 opo
1006 wer 课题主表已经确定,想创建一个课题间关联的关系表,来表达课题间的联系。例如:想知道课题号为1001课题跟那些课题联系,可以通过课题主表和课题间关联的关系表,查询得到课题号为1001课题所有相关课题。这样的课题间关联的关系表的表结构如何设计呢?
1001 abc 1001 1002 1001 1002
1002 cdg 1001 1005 ⇒ 1001 1005
1003 dfa 1006 1002 1001 1006
1004 her 1006 1003 1001 1003
1005 opo
1006 wer 课题主表已经确定,想创建一个课题间关联的关系表,来表达课题间的联系。例如:想知道课题号为1001课题跟那些课题联系,可以通过课题主表和课题间关联的关系表,查询得到课题号为1001课题所有相关课题。这样的课题间关联的关系表的表结构如何设计呢?
1001 abc
1002 cdg
1003 dfa
1004 her
1005 opo
1006 wer
--------------
课题间存在的关系
1001 1002
1001 1005
1006 1002
1006 1003
--------------
↓
1001课题的关联课题
1001 1002
1001 1005
1001 1006
1001 1003
--------------
课题主表已经确定,想创建一个课题间关联的关系表,来表达课题间的联系。例如:想知道课题号为1001课题跟那些课题联系,可以通过课题主表和课题间关联的关系表,查询得到课题号为1001课题所有相关课题。这样的课题间关联的关系表的表结构如何设计呢?
设计不好的话不好查询的
原来的课题关系就是用图表示的,因为课题太多,连线成了蜘蛛网,现在想放在数据库里进行管理。
麻烦 TONY哥 帮下忙
使用三张表。前两张是你当前有的。分别为a、b。第三张存放关系。
可以做如此假设:任何两门课程之间都可能存在关系。那么假设存在n门课程,则可能的关系是(n-1)*(n-1)。那么我们认为它们之间的关系构成了一个图或是矩阵(两者没有本质上的区别)。在此我们选择矩阵,并把这个关系构成的矩阵看作为0-1矩阵,这时,关系,就变成了了矩阵相应元素的值。如果两门课程之间存在相应的关系,那么认为它们对应的元素为1,否则为0。
如下所示:
1 2 3 4
1 0 1 1 0
2 1 0 0 1
3 1 0 0 0
4 0 1 0 0以上可知,课程1、2、3、4之间的关系,12,13,24,之间有关系,那么我们可以得知,这个矩阵实际上是半角矩阵。课程之间的关系,也就变成了矩阵的存储问题。这个可用的方法就比较多了。但是,作为关系表来说。同样使用关系存放比较合理。一是课程数目不多,比如100门课程,那么存放的话,在最大可能下,也不到10000条(100-1*100-1),如果使用半角矩阵,也就只有一半的记录需要存放,检索上效率应该不成问题;二是课程之间关系的问题,这个我觉得在使用这个方法存储的话,也不用考虑的,原因和第一点一样。在使用以上结构中,具体操作时,可以使用如下访法。
a表
课题号 课题名
1001 abc
1002 cdg
1003 dfa
1004 her
1005 opo
1006 wer
b表课题间存在的关系
1001 1002
1001 1005
1006 1002
1006 1003 那么我们使用0-1矩阵存放关系的表,认为是c表,它的存在是明确表明两门课程关的关系,通过它,可以检索b表,获取更详细的课题关系。
c表
课题1 课题2 是否相关
1001 1002 1
1001 1003 1
1001 1004 0
1001 1005 1
1001 1006 1
..........................
当b表更新时,比如,1001和1007之间有关系,则我们认为,和1001有关系的课程,那么现在都和1007有关系,做如下操作:先搜索c表,把与1001之间有关系的课题选出为集合R,更新(或添加)c表,把1007和与集合R之间的“是否相关”字段都设置为1,并把1001和1007的“是否相关”字段也设置为1。
这样,查找相关课程信息时,可能先通过c表,再查找b表和a表。
以上个人建议,仅作参考