Я пытаюсь получить следующую структуру данных в моей графической базе данных Neo4J:
(User)-[:isEmployedBy]->(Company)
В то время как каждая «занятость» может иметь несколько «транзакций»
Я рассматриваю следующие варианты и хотел бы услышать, что будет самым «будущим доказательством»:
Simplest:
create
(matt:Person { name: 'Matt' } ),
(stackoverflow:Company { name: 'Stackoverflow' }),
(matt)-[:employed_by { from: date("2000-01-01"), until: date("2010-01-01") }]->(stackoverflow),
return *
Однако я не могу добавить дополнительные отношения к своей работе (например, транзакции). Я предполагаю, что мой второй подход - мой единственный выбор? Это правильно? (см. ниже)
create
(matt:Person { name: 'Matt' } ),
(stackoverflow:Company { name: 'Stackoverflow' }),
(employment:Employment, { from: date("2000-01-01"), until: date("2010-01-01")}),
(t1:Payment, { amount: 100 }),
(t2:Payment, { amount: 50 }),
(employment)-[:received]->(t1)
(employment)-[:received]->(t2)
return *
Я понимаю, что мог бы связать эти транзакции непосредственно с человеком, но мне нужны они, непосредственно связанные с трудоустройством, например: Если человек теряет работу (соединение), все транзакции нужны исчезнуть.
3) Я также мог бы сделать оба соединения:
create
(matt:Person { name: 'Matt' } ),
(stackoverflow:Company { name: 'Stackoverflow' }),
(employment:Employment, { from: date("2000-01-01"), until: date("2010-01-01")}),
(matt)-[:employed_by { from: date("2000-01-01"), until: date("2010-01-01") }]->(stackoverflow),
(matt)-[:has_employment]->(employment)<-[:has_employment]-(stackoverflow)
return *
Хотя я мог бы столкнуться с противоречивыми данными (даты здесь), этот подход дал бы мне выигрыш в производительности запроса, если, скажем, Я только хотел посмотреть, кто кем был нанят, без дополнительной информации / транзакций? (используя: busy_by).
Общий вопрос: хочу ли (или должен) настраивать двунаправленные соединения?
create
(matt:Person { name: 'Matt' } ),
(stackoverflow:Company { name: 'Stackoverflow' }),
(matt)-[:employed_by { from: date("2000-01-01"), until: date("2010-01-01") }]->(stackoverflow),
(matt)<-[:employs { from: date("2000-01-01"), until: date("2010-01-01") }]-(stackoverflow),
return *
Опять я получу дублирующую информацию - есть ли польза от этого вообще?
Спасибо за любые подсказки!