Как создать базу данных графа в этом сценарии?

Вот мой сценарий У меня есть предопределенная структура типов данных для книг. Просто возьмите это в пример ради простоты. Структура выглядит как на рисунке ниже. Это помеченный граф свойств, и информация самоочевидна. Эта структура типов данных является фиксированной, я не могу ее изменить. Я просто использую это.

Пример DTR

Когда есть 1 книга, назовем ее " Гарри Поттер", в системе это может выглядеть так:

DTR 1 книга

Итак, книга имеет собственное свойство (ID, Имя,...), а также содержит тип поля MandatoryData, Глядя на этот график, мы можем узнать всю информацию о книге.

Проблема возникает, когда у меня есть 2 книги в системе, которая выглядит следующим образом:

DTR 2 Книги

В этом случае есть еще одна книга под названием Graph DB, с выделенной информацией.

Проблема этого дизайна: мы не знаем, какая информация принадлежит какой книге. Например, мы не можем различить publishedYear больше.

Мой вопрос: как решить или избежать этой проблемы? Должен ли я создать 1 MandatoryData для каждой книги? Не могли бы вы предложить мне какой-нибудь дизайн?

Я использую Neo4j и Cypher. Спасибо за помощь!

1 ответ

ОБНОВИТЬ

Из комментариев (@AnhTriet):

Спасибо за ваше предложение. Но я хочу иметь какую-то связь между этими книгами. Если мы создадим новые MandatoryData, эти книги будут полностью разделены. (...) Я имел в виду, что две книги должны указывать на одни и те же узлы, если у них один и тот же автор или год публикации, верно?

После некоторых разъяснений в комментариях я предлагаю создать MandatoryData узел для каждого свойства в базе данных. Затем вы подключите данную книгу к различным MandatoryData узлы, в зависимости от количества свойств книги.

Таким образом, две книги одного автора будут связаны с одним и тем же узлом MandatoryData.


Поскольку вы не можете изменить модель данных, я настоятельно рекомендую вам создать новую MandatoryData узел для каждой новой книги, добавленной в систему.

Таким образом, вы сможете получить информацию о конкретной книге с такими запросами, как:

// Get the author's name of the book with ID = 1
MATCH (:Book {ID : 1})-->(:MandatoryData)-->(:Author)-->(:Name)-->(v:Value)
RETURN v.value

Модель, предложенная в вашем вопросе, нежизнеспособна, так как не имеет возможности идентифицировать владельца конкретной собственности, как указано вами.

Другие вопросы по тегам