我正在试图弄清楚如何实现包含集合的数据库。
元素可以是三种类型,简单的基本元素,那些元组甚至是元组(当然还有那些元组)。
它开始觉得几乎不可能。
我的第一种方法是使用两个元素表,这些元素也可能包含具有ID,Name和potentail第二个元素的集合以形成元组:
| elemtID | elementName | is_set | element_to_the_right |
0 a false null // (a)
1 a false 0 // (a,a)
2 a false 1 // (a,a,a)
3 A true null // the set A
4 B true 3 // the set BxA
上面的行显示了如何制作元组(a,a,a)以及一些集合A
要指定成员船,我简单地有一种以下形式的邻接表:
| elemtID | setID |
0 3 // a <- A
其中两个ID都指向第一个表中的elemID。
这个想法是模拟有限集的类别,我希望能够拥有任意深度的嵌套集,这需要递归和可能非常高级的查询。
为了摆脱这种局面,我一直在寻找具有更灵活架构的mongoDb等替代品。但由于它们不支持连接,我必须在一个集合中包含所有内容,而我无法真正地围绕它。
现在我想知道是否有替代设计或数据库模型。 任何评论都会有所帮助
此致,托比亚斯
答案 0 :(得分:0)
看起来你需要类似的东西:
考虑:
您可以通过简单的方式获取同一个set / tuple的所有(直接,非递归)元素:
SELECT * FROM ELEMENT WHERE SET_ID = <whatever>
与子集非常相似。
但是,以递归方式获取所有元素将需要递归查询(WITH子句,如果您的DBMS支持它),或者需要对每个集合级别进行连续查询。
然而,除了&#34;邻接列表&#34;上面描述的模型,有一些替代方案可以提供不同的性能特征或减少递归查询的需要 - 看看this presentation by Bill Karwin。