问题标签 [sql-graph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3649 浏览

sql - 在 SQL Server 中高效查询图边的有向/无向表

我有一个 SQL 服务器表,其中每一行代表图形网络中的一条边。FromNodeID 和 ToNodeID 是节点表的外键,架构如下所示:

现在,如果我认为每条边都是有向的(即单向),那么很容易计算出我可以从任何节点直接到达的所有节点。我会在 FromNodeID 列中添加一个索引,然后运行如下查询:

结果:5

但是,如果我想将每条边视为单向的,那么构建我的表/查询的最佳方式是什么。即从节点3开始,我想得到结果:

结果:1、2、5

我能想到的最简单的方法是向 ToNodeID 列添加一个附加索引,然后运行如下查询:

但这显然涉及组合来自两个查询的结果集,并且看起来效率不高 - 有没有更好的方法可以在单个查询中编写它?(请注意,我不想将反向边缘再次插入表中 - 我需要能够在运行时将边缘视为有向或无向)。

感谢您的任何建议!

0 投票
1 回答
1625 浏览

sql - 图形问题:在 SQL 服务器中通过 NOCYCLE 先前替换连接?

问题:

我有以下(有向)图: 图形

而这张表:

而这个内容:

现在我可以像这样查询从点 x 到点 y 的最佳连接:

现在我想创建一个无向图,例如,我还可以获取从 D 到 A 的路径

我从一个最简单的改变开始,然后只为高清添加相反的方向。

现在,正如预期的那样,我的查询引发了异常:

超出无限递归/最大递归级别 (100)

因为现在可能的连接数是无限的。

现在在 Oracle 中,您使用“先验连接”而不是树来执行相同的操作。如果可能出现循环问题(无限递归),您只需将 NOCYCLE 添加到 CONNECT BY PRIOR,使其成为“CONNECT BY NOCYCLE PRIOR”

现在在 MS-SQL 中,我通过添加以下内容来修复该行为:

到内部连接子句,本质上是模拟 NOCYCLE。

但是,由于 LIKE 基本上是 strstr(或更差的 strcasestr),因此比检查父元素数组要慢得多,我非常担心性能。

毕竟,这只是一个例子,我打算基本上添加整个国家的数据。所以最终结果可能会非常缓慢。

其他人有更好(=更快)的方法来替换 MS SQL 中的 NOCYCLE 吗?

或者这是我除了切换到 Oracle 之外别无选择的地方(以可接受的速度这样做)?

注意:任何临时表(大量数据)解决方案都会变慢,因为当内存不足时临时表将被交换到硬盘(绝对确定)。

任何使用函数和表值函数的解决方案也是如此。

0 投票
1 回答
667 浏览

algorithm - Twitter 喜欢使用 SQL Server/Azure 或 Graph DB 的模型

是否可以使用 SQL Server 设计类似数据库的 Twitter?一个可确保高可扩展性和快速查询的数据库。

我正在构建一个 .NET 平台,该平台需要类似 twitter(用户、关注者、推文)这样的模型,并研究在快速查询和可扩展性方面最适合的模型。

是否可以使用关系数据库或图形数据库更好?

0 投票
1 回答
568 浏览

sql-server - 从 SQL Server 导出 CSV 数据以导入 Neo4j 图形数据库

我需要将一些高度连接的数据从 SQL Server 批量导入 Neo4j 进行分析。

Neo4j 开发人员指南中有 2 个链接讨论了这一点:

我第一次尝试从 SQL Server 导入和导出向导生成的 CSV 文件中导入数据,但未能将表中的列加载到节点属性中。

有谁知道配置 SSIS 包以生成符合上面链接中列出的 Neo4j 要求的 CSV 导出的指南?

0 投票
1 回答
779 浏览

sql-server - schemacrawler 未在 MS sql server db 的图形选项中显示关系/边

我一直在尝试绘制 SQL Server 数据库中表子集的关系图。

我使用以下选项在 MAC 操作系统上运行 sc.sh:

-server=sqlserver -host=<host> -database=<schema> -user=<user> -password=<password> -infolevel="maximum" -command="graph" -schemas=<schema> -tables="<database>\.<schema>\.TABLE1|<database>\.<schema>\.TABLE2" -grepcolumns=".*\.PRIMARYKEY" -tabletypes=TABLE -outputformat=pdf -outputfile=diagram.pdf

我使用的 graphviz 版本是 2.28.0(如果我使用的版本高于此版本,schemacrawler 和 schemaSpy 都会出错)。

当我运行命令时,我得到了输出 pdf 文件。但它只包含表/节点及其列,没有应该链接 2 个表的关系/边。

我还尝试为数据库中的所有表生成图表,输出再次是所有表/节点及其列的图表,但没有任何关系/边。

我可以运行作为模式爬虫下载一部分的图表示例,并且输出确实显示了关系/边缘。

最后,我可以在 schemaSpy 中生成显示正确关系的图表。我想看看我是否可以在 schemacrawler 中为一组特定的表和列生成图表。

我使用 schemacrawler-12.04.02-main

0 投票
1 回答
38 浏览

sql-server - SQL Server 2008R2 从表到图边

我偶然发现了一个有趣的挑战。我在 SQL Server 表中有以下格式/内容的数据。

我正在尝试将该表转换为包含图形边缘的文件。

我需要边文件必须包含表格显示的列和所有组合。

我怀疑这部分可以通过枢轴/取消枢轴来实现,但不知道如何继续将枢轴限制为仅两列。

另外,我不知道如何确保获得所有可能的节点组合,请注意前四个“节点”需要变成六个“边”。

0 投票
1 回答
232 浏览

c# - 结合来自 Sql Server 和 Graph 数据库的数据

在我的 C# 项目中,我将关系存储在图形数据库中,我想根据关系从我的主要数据库 Sql Server 中提取数据。

从这两个数据库中提取数据的最佳方法是什么。

0 投票
1 回答
858 浏览

sparql - Syntax to query for optional relationships in Microsoft SQL Server 2017 Graph Database?

I want to select optional relationships in . Similar to optional in e.g.:

from https://www.w3.org/2001/sw/DataAccess/rq23/#OptionalMatching.

And similar to LEFT JOIN in normal ; e.g.:

Is there an easier way via MATCH?

The documentation of MATCH describes no 'optional' construct and the remarks state:

OR and NOT operators are not supported in the MATCH pattern. MATCH can be combined with other expressions using AND in the WHERE clause. However, combining it with other expressions using OR or NOT is not supported.

0 投票
3 回答
213 浏览

graph - 在匹配子句中使用视图和表值函数作为节点或边表

我喜欢在子句中使用表值函数,就像使用一样。有没有办法做到这一点?MATCHNode

对表值函数的需求

Node将表值函数或视图用作表可以有多种用例。例如我的如下。
我有Node包含NVarChar(max)要搜索文字文本的字段的表。我只需要相等搜索而不需要全文搜索,所以我选择在文本字段的哈希值上使用索引。正如Remus Rusanu在他对SQL server 的回答中所建议的那样——值得索引大字符串键吗?https://www.brentozar.com/archive/2013/05/indexing-wide-keys-in-sql-server/。表值函数使用CHECKSUM索引处理;看消息 207 无效的列名 $node_id 用于内联表值函数中的伪列

示例数据定义

[TagsByName]返回https://stackoverflow.com/a/45565410/814206建议$node_id的别名。但是,实际包含另外两个我不知道如何导出的内部列。NodeIdNode

所需查询

我想查询类似这样的数据库:

但是,这会导致错误1 ​​:

消息 13901,级别 16,状态 2,行 ...子句
中的标识符“t”MATCH不是节点表或节点表的别名。

我有办法做到这一点吗?


PS。有一些解决方法,但它们看起来不像MATCH-query 那样优雅;特别是考虑到我的实际查询涉及匹配更多的关系和更多的字符串相等测试。我会将这些解决方法作为答案发布,并希望有人提出更好的主意。

1 这给出了视图和表之间非常具体的区别,用于SQL 中视图和表之间的差异;这仅在中发生并且仅在使用 SQL Graph 时发生。

0 投票
1 回答
389 浏览

sql-server - 在 SQL Server 2016 中创建图表

我正在尝试创建一个简单的节点表,使用:

但无论我尝试什么,我都会得到一个错误:

关键字“as”附近的语法不正确。好像它不理解“作为节点”部分。

我正在使用 SQL Server 13.0.1601。
数据库兼容性:SQL Server 级别 2016(130)
SSMS: v17.2
@@version: "Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) Apr 29 2016 23:23:58 版权所有 (c) Microsoft Corporation Express Edition (64 位) 在 Windows 10 Pro 6.3 (Build 14393:) (Hypervisor) 上"