Mysql 关系数据库中不同对象(实现类似接口)的图形

Mysql 关系数据库中不同对象(实现类似接口)的图形,mysql,database,postgresql,relational-database,Mysql,Database,Postgresql,Relational Database,因此,我在思考涉及到将对象序列化到关系数据库的某些问题 假设有N个不同的对象,它们都实现了一个特定的接口,也就是有向图接口。它们提供诸如getIncomingNodes、getOutgoingNodes等方法。 如果每个这样的对象在关系数据库中都有对应的表, 将这种有向图序列化到关系数据库的最佳实践是什么 假设N很小,在我的例子中,N=3,我将所有可能的链接分解为包含在一个单独的表中。 例如,从对象x指向y的链接表类似于: tbl_links_X_Y { int X_id int Y_id }

因此,我在思考涉及到将对象序列化到关系数据库的某些问题

假设有N个不同的对象,它们都实现了一个特定的接口,也就是有向图接口。它们提供诸如getIncomingNodes、getOutgoingNodes等方法。

如果每个这样的对象在关系数据库中都有对应的表, 将这种有向图序列化到关系数据库的最佳实践是什么

假设N很小,在我的例子中,N=3,我将所有可能的链接分解为包含在一个单独的表中。 例如,从对象x指向y的链接表类似于:

tbl_links_X_Y {
int X_id
int Y_id
}
问题是,您会得到N^2个这样的表——效率不高,将来很难扩展到N+1个对象

有没有解决这个问题的模式?即使它不涉及关系数据库,我也很高兴听到


谢谢!o

您也可以轻松地将对象类表名存储在连接表中

tbl_links_X_Y {
int X_id
int Y_id
enum {user, customer, product} X_type
enum {user, customer, product} Y_type
}
他们建议您将其包含在where或join子句中


我想这不是一个严格的关系数据库,因为您不能使用/强制外键约束。

您还可以强制图形遵循关系模型:ie

表图{ 整数顶点, 瓦查尔边缘学者 }

edgelist可以成为一个基于分隔符的字符串:例如{2,10}、{3,12}、{4,13}等等,其中条目是{incident vertex,weight} 这样,表中的行数将启用,而不是^2


然后,当应用程序读取图形并执行某些操作时,您必须在内存中构建图形,并执行相同的操作

最近,我遇到了一个NoSQL框架调用,DB引擎可以准确地处理这个问题。 它是一个能够执行SQL查询和延迟加载对象(如由另一个对象指向的相邻顶点)的对象 剩下的一件事是将此框架的性能与传统SQL数据库的性能进行比较。当然,我必须考虑从传统SQL数据库中查询的原始响应构造对象所需的时间。。


一旦我有了这个比较的结果,我就把它们贴在这里。

你的问题被标记为和。你用的是哪一个?我还没有真正承诺任何框架。我想我会使用一个能最有效地解决我的问题的方法:-当你尝试连接时也会有问题。我猜如果你有N个不同的对象,你想得到某个对象的所有邻居,那么就没有避难所了。您必须对查询进行查询。。。我认为边缘列表方法效果最好。也许通过一些优化,它不会那么糟糕……你有机会做这个比较吗?在最初的问题中,您询问了如何将图形结构映射到关系模型。有一件事不应该被忽视/低估,那就是依靠像Postgres这样久经考验的关系数据库的优势,以及相关论坛/邮件列表的响应能力。如果调试损坏的数据,这不仅仅是性能问题。。你不想找到一个死气沉沉的邮件列表,而开发这个的主要人已经离开了!!