Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 如何为图形数据库建模模式?_Database Design_Graph_Neo4j_Database Schema_Graph Databases - Fatal编程技术网

Database design 如何为图形数据库建模模式?

Database design 如何为图形数据库建模模式?,database-design,graph,neo4j,database-schema,graph-databases,Database Design,Graph,Neo4j,Database Schema,Graph Databases,我正在寻找一种通用的方法来实现图形数据库上的限制模式 我熟悉关系数据库系统,其中定义具有特定列的表。然后,所有传入数据的存储方式与数据库模式中建模的数据完全相同。所有传入数据都会自动验证,即不能存储缺少必需列值的记录 图形数据库,如neo4j,允许节点和关系的无限制和自由式存储。我想知道是否有类似于图形数据库的模式。我正在寻找一种已建立的符号/定义或通用方法来对图形数据库中的限制性模式进行建模,它对应于基于关系表的数据库中的表模式定义 示例限制可能是:表示“用户”的节点始终需要与表示“部门”的节

我正在寻找一种通用的方法来实现图形数据库上的限制模式

我熟悉关系数据库系统,其中定义具有特定列的表。然后,所有传入数据的存储方式与数据库模式中建模的数据完全相同。所有传入数据都会自动验证,即不能存储缺少必需列值的记录

图形数据库,如neo4j,允许节点和关系的无限制和自由式存储。我想知道是否有类似于图形数据库的模式。我正在寻找一种已建立的符号/定义或通用方法来对图形数据库中的限制性模式进行建模,它对应于基于关系表的数据库中的表模式定义

示例限制可能是:
表示“用户”的节点始终需要与表示“部门”的节点至少有一个关系。

我不是特别寻找neo4j方式,而是一般形式主义或符号。这样的事情存在吗


同时,我发现了一个建议,可以向数据库中添加定义元模型的节点。但我希望能找到一些答案,这些答案能帮助我找到既定的最佳实践、研究论文或数学定义,比如说,
数据库模式是整个图的一个子图,并与包含实际数据的节点形成一个二部图

我的理解: 对于关系数据模型,我们应该尝试将其转换为自然语言的描述,然后将自然语言的描述转换为图形模型或其他模型


例如,用户表user_id是注释表的外部构造,那么表达式是自然语言是“用户注释”,但是用户表中的记录也是用户的属性,注释表的记录是自己关注的。属性,两者都是节点,并且关系是外部关系

并非所有图形数据库都是“无模式的”。Objective/DB是一个使用模式的面向对象图形数据库。然后,如您所料,使用模式来约束分配给对象字段的数据。节点和边是对象

由于Objective/DB用于大型对象和图形数据库,因此模式还用于支持“放置模型”,即在数据库中放置不同对象的位置。放置模型加快了检索速度,因为系统仅在存储X的那些放置位置中查找X类型的对象


此外,Objective/DB支持“模式演化”,其中定义的模式类型可以更改,并且数据库了解如何对现有数据解释这些更改。

表示“用户”的节点始终需要与表示“部门”的节点至少有一个关系。

这种约束听起来像--现在允许孤立顶点--每个顶点都必须附加一个关系


或者,将“部门:字符串”建模为vertex“用户”类型(表)的属性字段是否合理。

假设您在社交网络应用程序中创建了一个用户帐户。它是否要求您在创建帐户时拥有一个朋友(关系)?但是它要求你有一个密码,因为它是一个属性而不是一个关系(edge)。我刚才告诉过你,限制的“形式定义”依赖于DBMS&根据DBMS文档,因为“graph DB”或“graph DB schema”没有“形式定义”――它们是像“Toll”这样的通用术语。如果代码中没有具体的案例,那么您只是要求我们重写文档。PS我可以理解,你想完成这样一个“模式”将被用来做的事情,但你没有说清楚。PS请不要插入编辑/更新,只是让您的文章成为目前为止最好的演示文稿。添加一些不清楚的内容并不能说明问题。要在非RDBMS上强制执行任意约束,您始终可以编写查询,在每次更新后必须返回一组空的冲突。(假设我们对关系元数据和应用程序进行关系建模,然后将这些表和约束映射到非RDBMS。)一个困难是,RDBMS用于一般查询,而非RDBMS用于专门结构的专门查询,但是检查结构是否满足不变量是昂贵的,更不用说使用专门用于非不变量检查器的应用程序的DBMS来实现了。(但我们可以对任何事物进行关联建模。)目前的一个问题是,就标准而言,graph DB仍然相对年轻,而且有多个graph DB,都由不同的供应商提供,大多数都有自己的独立查询语言,很少有标准化方面的问题,即使这是某种程度的标准化(OpenCypher,Tinkerpop),约束的定义和实现往往超出了这一范围,因此仍然存在差异。当然,你可能会找到提供各种正式解决方案的论文,但如果它们没有实现或标准化,那就无关紧要了。特别是对于Neo4j,我们知道这些约束在关系方面的价值在节点之间(每种类型,总是有关系,从来没有关系,或者更复杂的事情),所以我想说,在这些被引入产品之前只是时间问题,只是优先级问题。