我想代表在RDBMS以下递归关系:递归实体瓦特/父/子关系
作为一个基本的例子,我们有以下字段:
1 - computer science
2 - computer engineering
3 - electrical engineering
4 - mathematics
我想将相似的领域相互关联。我可以使用第二个表格将字段相互关联。理想情况下,我能想象它看起来像这样:
+----------+----------+
| field1 | field2 |
+----------+----------+
| 4 | 1 | (math -> comp sci)
| 4 | 2 | (math -> comp eng)
| 4 | 3 | (math -> elect eng)
| 2 | 1 | (comp eng -> comp sci)
| 2 | 3 | (comp eng -> elect eng)
+----------+----------+
然而,如果该键为(FIELD1,FIELD2),我可以看到两个潜在的问题:
- 元组可以被复制,尽管无序
- 如果没有重要性可能查询不必要的复杂到哪个字段是其中塔(如sgeddes指出,查询列和过滤出一式两份)
例如:
+----------+----------+
| field1 | field2 |
+----------+----------+
| 1 | 4 | (comp sci -> math)
| 4 | 3 | (math -> elect eng)
| 4 | 2 | (math -> comp eng)
| 3 | 4 | (elect eng -> math)
| 2 | 1 | (comp eng -> comp sci)
| 3 | 2 | (elect eng -> comp eng)
| 1 | 2 | (comp sci -> comp eng)
+----------+----------+
我应该如何接近非分层递归关系?
我应该继续并有意地复制每个元组,像第二个表中一样?还是有另一种方法,我是超视?
我可能会困惑(仍然),但我认为我需要多对多,而你的例子只允许文学有一个类似的领域。 *(我更新了我的问题中的例子)* – 2013-02-14 01:02:36
@DavidKaczynski - 我非常肯定,使用这种方法,您可以在这方面建立N-N关系,但是在类似组中有1-N关系。请参阅上面的编辑。 – sgeddes 2013-02-14 01:16:11
感谢您的澄清。请允许我问这个问题:如果我想获得所有类似于阅读的字段,该查询将如何查看?例如,'从SimilarField中选择SimilarId,FieldId,其中SimilarId = 3或FieldId = 3 ... ...但是,接下来如何将生成的[(SimilarId,FieldId)]元组转换为一组单独的Ids以查询原始Field表? – 2013-02-14 01:19:47