2014-02-11 4 views
4

Я работаю над примерами NEO4J, найденными в книге Spring Data.Neo4J Nodes vs Relationship Entities

Nodes   - Product, Person, Order 

Relationships - (Order) Items (Product), (person) Reviewed (product) 

Я проектирование своих первой базы данных Neo4j и подхожу к ситуации, когда Обзор мощи лучше служила в качестве узла вместо отношений.

, так что обзор теперь может иметь ЧЕХЛЫ отношения

Review COVERED Order , Review COVERED Product 

Этот обзор будет охватывать несколько, охватываемые отношения в некотором смысле.

Есть ли какие-либо мысли о создании узла Node и отношения узлов? Neo4J кажется очень гибким ... если я передумаю, кажется, я могу изменить это позже, да?

Это только казалось странным, повторяет по существу тот же самый текст обзора в отношениях, между несколькими узлами ... и вместо того, чтобы сэкономить вычислительные пространство и создать один узел обзора

Review Node Entity 
    - String comments 
    - int stars 

ответ

1

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

В этом случае, если вы удерживаете узел REVIEW отдельно, на самом деле будут созданы дополнительные узлы и отношения, чем сокращение вычислительного пространства.

(PERSON)-[:GIVEN]->(REVIEW)-[:COVERED]->(PRODUCT) 

Так что рассмотрите вопрос (прецедент) Получите отзывы о продукте A?

Граф сначала нужно будет проверить все REVIEW узлы, подключенные к PRODUCT A по RelationshipType COVERED, затем снова придется проследить, чтобы PERSON узел, чтобы получить который дал обзор.

Но если вы (PERSON)-[:REVIEWED]->(PRODUCT)

Вам просто нужно будет запрашивать сразу все relationshiptypes REVIEWED входящие в PRODUCT A от PERSON узла. И comments и stars вы можете хранить как отношения.

Так что я думаю, держа это связано непосредственно с помощью REVIEWED с attribs на REVIEWED будет аккуратнее дизайн и менее сложный

+0

Таким образом, вы бы рекомендовать удвоению данные обзора, в двух отношениях? – Erik

+0

Neo4j 2.0 позволяет хранить атрибуты в отношениях. Таким образом, вы можете сохранить данные обзора в качестве атрибутов в отношении REVIEWED. –

+0

. Я знаю об этом факте ... но если обзор охватывал два узла. Мне нужно написать ДВЕ-отношения. Это показалось неэффективным, так как теперь я удваиваю количество сохраненных данных. – Erik

Смежные вопросы