Я только начал изучать Neo4J, чтобы отслеживать собственные приложения, использующие SQL Server, для таблиц и столбцов, которые используют эти приложения.
[Фон]
В настоящее время мы реорганизуем несколько наших монолитных приложений в приложения на основе микросервисов. Все эти монолиты имеют общую базу данных, и эта база данных будет источником правды, пока этот процесс не будет завершен. Мы видим, что по мере роста этих усилий нам нужно будет отслеживать, какие приложения используют какие таблицы и, в частности, какие столбцы в этих таблицах.
Что нам нужно знать, так это «Если одному приложению необходимо изменить столбец в таблице, какие другие микросервисы необходимо оценить на предмет возможных негативных последствий этих изменений?» (да) Я знаю, что «настоящий» микросервис будет поддерживать собственный источник правды и ссылаться на другие службы, чтобы получить доступ к данным, которые не находятся под их контролем. Этот проект предназначен для отслеживания этих данных в процессе конвертации. По сути, в первый день мы не будем волшебным образом включать несколько десятков сервисов со своими собственными источниками данных.
[Вопрос]
У меня вопрос такой.
У меня есть три типа узлов (Таблица, Столбец, Приложение). Я сопоставил отношения между Столбец -> Таблица и из Приложения -> Столбец, но я должен сопоставить отношение из Приложения -> Таблица, поскольку я могу перемещаться по графику, как это приложение -> Столбец -> Таблица
Посмотрите на диаграммы, чтобы получить наглядное представление о том, что я имею в виду.
Я включил код 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)
;