【问题标题】:SQL Server : graph/hierarchy SQL structureSQL Server:图形/层次结构 SQL 结构
【发布时间】:2019-08-10 03:56:55
【问题描述】:

经过N小时的设计,如何将这样的结构保存到关系数据库(SQL Server)中。

我结束了这个结构,但它不是很好。

create table [OperationalModel]
(
    [Id] int,
    [Name] varchar(150),
    [Code] varchar(10),
    [OrgId] int,
    [Vertex] int,
    [RelatedOrgIdOnSameVertex] int
);

insert into [dbo].[OperationalModel] 
values
    (1, 'x', 1, NULL),
    (1, 'x', 2, 1),
    (1, 'x', 3, 1),
    (1, 'x', 4, 2, 3),
    (1, 'x', 5, 2),
    (1, 'x', 6, 2),
    (1, 'x', 7, 3),
    (1, 'x', 8, 4);
.
.
.
.

有人知道如何将这种结构保存在 SQL Server 等关系数据库中吗?

谢谢

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?我问是因为在 SQL 2017 中,他们向引擎添加了 Graph 扩展。但即使这不是您的选择,如果不知道它需要支持哪种查询,也很难判断一个表。想到的另一个问题:你的图是有向的吗?也就是说,这些关系是分层的(即父/子)还是这些关系更多地代表了对等模型?
  • 这将是一个简单的1:n-hierachy,如果没有节点 4,它有两个父节点。到目前为止正确吗?您的图片看起来好像有层次结构。是否有已知的最大深度?关系可以忽略级别(例如 4 到 9 之间的线)吗?您可以使用两个表并以from -> to 格式存储关系。当然,您应该详细解释一些业务规则。但是 - 老实说 - 这个问题可能会因为 超出 SO... 的范围而关闭
  • 起初我想像一棵树一样接近它。入口将是两个节点(ID),一个是主节点,另一个是主节点。结果应该是决定另一个节点是主节点的从属节点还是上级节点。我需要每秒评估 600 次。
  • 层次结构多久会改变一次,会有多大?如果您需要在 1 毫秒或更短的时间内获得劣质/优质结果,则在更新图表时对数据进行非规范化并计算关系可能更有意义,而不是按需执行遍历。
  • 好问题,现在偶尔,但在近地功能中大约每分钟 4 次。

标签: sql-server tsql hierarchical-data sql-graph


【解决方案1】:

you need two table. 
one is for the nodes: 
Table: OperationalModel: 
Columns: 
[Id] int,
[Name] varchar(150),
[Code] varchar(10),

another is the edges: 
Table: Edges: Columns: 
Id, OperationalModelId, VertexId, Etc ... 

Data: insert into [dbo].[OperationalModel] values
(1,'x',1),
(1,'x',2),
(1,'x',3),
(1,'x',4),
(1,'x',5),
(1,'x',6),
(1,'x',7),
(1,'x',8);

Data For second table: As per the relationship.
insert into [dbo].[Edge] values
(1,1,2),
(2,1,3),
(3,2,1),
(4,2,4),
(5,3,1),
(5,3,4),
(5,3,5);

The Edge table will be Many to many relationship.

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多