我知道有一些算法(甚至是工具)可以将关系数据库(RDBMS)转换为Graph数据库,反之亦然。
我确实有几个比这个问题更大的问题:
是否存在用于此类转换的通用实践工作算法,例如RDBMS =>图(或几个)?
这个算法是双射的吗?更确切地说:
2.1。给定所述算法,是转换RDBMS =>图形内射(一对一)?更明显的是,是否可以将任何两个关系数据库转换为相同的图形数据库?
2.2。同样,任何Graph DB都可以由关系数据库表示吗?基本上,我问的是算法函数是否是主观的(上)?
答案 0 :(得分:2)
<强> TL; DR 强>
从图形(节点集,边缘关系)的特定数学概念到关系表示,通常存在明显的双射。基本上因为数学使用集合和关系。
没有标准图表DBMS。没有标准的方法来使用一个来表示应用程序/业务情况。因此,图形数据库状态和图形数据库状态之间没有标准映射。一个关系状态,更不用说在另一个状态中给出一个对所代表情况很自然的代表状态。
如果没有关系值属性,映射在非关系结构和关系结构之间并不总是双射的,因为我们有时必须使用我们将使用的关系值来选择关系代理值1:1。
有时我们对特定情况不感兴趣,我们只对数据结构感兴趣。然后我们可以提出它的各种关系版本。
但是数据库或数据结构变量通常表示应用程序/业务情况。通常存在从情况到表示的一对多或一对一映射。在关系模型下,每个表都有一个关联的(特征)谓词(语句模板),并保存从其谓词中生成真正的命题(语句)的行。其他数据结构以临时方式用于表示情况。
关系模型的特殊之处在于,您可以通过谓词逻辑和/或关系运算符进行一般查询 - 查询表达式确定谓词,其结果包含从其谓词中生成真正命题的行。 (以一定的复杂性保证和自动优化的某些机会计算。)
表示相同情况的结构之间的映射取决于数据库如何表示情况。因此,表示之间没有一般的映射,即使对于使用相同数据结构的两个表示也是如此。
另一方面,你可以定义两个结构之间的一些通用映射,它可能是双射的,但是当一个情况用一个表示时,另一个告诉你情况的另一个表示因此情况只是间接的,而不是直接的情况本身。因此,不要期望描述其他结构代表的关系版本就像该应用程序/业务的良好关系设计一样。
这是ORM&amp; amp;的问题。对象数据库。您可以定义从特定面向对象状态到关系的映射,但关系仅描述面向对象的状态,而不是其表示的情境。每次对象值将oid保存到引用而不是包含的对象时,该引用对象表示关系/关联实体实例。但通常没有给出对应于这类对象的关系的显式谓词。相反,我们从一些完整的代表状态到一个代表的情况给出了一个表示函数。而在关系设计中,每个表(基本或查询结果)的每个超级键值与一些(可能是关联的)实体是1:1。