2

我刚刚开始研究 Neo4J,以跟踪内部开发的使用 SQL Server 的应用程序以及这些应用程序使用的表和列。

[背景] 我们目前正在将一些单体应用程序重新架构为基于微服务的应用程序。这些单体都共享一个公共数据库,并且在此过程完成之前,该数据库将成为事实的来源。我们可以看到,随着这项工作的增加,我们将需要跟踪哪些应用程序正在使用哪些表,特别是这些表中的哪些列。

我们需要知道的,是这个。“如果一个应用程序需要修改表中的一列,还需要评估哪些其他微服务以了解这些更改可能产生的负面影响?” (是的)我知道“真正的”微服务会维护自己的事实来源并参考其他服务来访问不受其控制的数据。该项目是在转换过程中跟踪该数据。基本上第一天,我们不会神奇地打开几十个服务,它们都有自己的数据源。

[问题] 我的问题是这样的。

我有三种节点类型(表、列、应用程序)。我已经映射了 Column -> Table 和 App -> Column 之间的关系,但是我应该从 App -> Table 映射一个关系,因为我可以像这个 App --> Column --> Table 那样遍历图表

查看图表以了解我所指的内容。

我已经包含了 Cypher 代码来创建图表。

我知道,在总体方案中,我基本上是在询问三 (3) 个关系(在我的示例中),所以为什么还要麻烦,因为这些关系与列关系的数量相比(只需添加它们)。

问的原因更多是关于正确性和学习最佳实践。

感谢您的反馈。

在此处输入图像描述

在此处输入图像描述

这是用于创建示例图的密码代码

CREATE (Customers:Table {Name:'Customers'})

CREATE (CustomerId:Column {Name:'CustomerId'})
CREATE (FirstName:Column {Name:'FirstName' })
CREATE (LastName:Column {Name:'LastName' })
CREATE (Address1:Column {Name:'Address1' })
CREATE (City:Column {Name:'City' })
CREATE (State:Column {Name:'State' })
CREATE (Cellphone:Column {Name:'Cellphone' })
CREATE (eMail:Column {Name:'eMail' })

CREATE (App_1:App {Name:'Call Back system'})
CREATE (App_2:App {Name:'Support'})
CREATE (App_3:App {Name:'Marketing'})


 
CREATE (CustomerId)-[:CONTAINED_IN]->(Customers)
CREATE (FirstName)-[:CONTAINED_IN]->(Customers)
CREATE (LastName)-[:CONTAINED_IN]->(Customers)
CREATE (Address1)-[:CONTAINED_IN]->(Customers)
CREATE (City)-[:CONTAINED_IN]->(Customers)
CREATE (State)-[:CONTAINED_IN]->(Customers)
CREATE (Cellphone)-[:CONTAINED_IN]->(Customers)
CREATE (eMail)-[:CONTAINED_IN]->(Customers)

//App 1
CREATE (App_1)-[:REFERENCES]->(Customers)
CREATE (App_1)-[:USES]->(CustomerId)
CREATE (App_1)-[:USES]->(FirstName)
CREATE (App_1)-[:USES]->(LastName)
CREATE (App_1)-[:USES]->(Cellphone)

//App 2
CREATE (App_2)-[:REFERENCES]->(Customers)
CREATE (App_2)-[:USES]->(CustomerId)
CREATE (App_2)-[:USES]->(FirstName)
CREATE (App_2)-[:USES]->(LastName)
CREATE (App_2)-[:USES]->(Address1)
CREATE (App_2)-[:USES]->(City)
CREATE (App_2)-[:USES]->(State)

 //App 3
CREATE (App_3)-[:REFERENCES]->(Customers)
CREATE (App_3)-[:USES]->(CustomerId)
CREATE (App_3)-[:USES]->(FirstName)
CREATE (App_3)-[:USES]->(LastName)
CREATE (App_3)-[:USES]->(eMail)
;

4

1 回答 1

0

您不应该引入冗余关系,除非您确定它们在您的数据模型中是必要的(例如,重要用例的剖析表明执行 1 跳而不是 2 跳的能力会带来必要的性能改进)。

一般来说,应该避免冗余,并且不值得为保持关联关系同步和额外的存储要求而付出额外的努力。

于 2019-03-14T03:06:55.023 回答