Я начинаю использовать neo4j.
В моей графовой базе данных есть узлы Person
(смотрите «Джон» ниже) с метками: Name
(строка), Food
(положительное целое число). Каждый Person
связан с другим Person
через отношение isFriendTo
, которое имеет значение.
Я использую граф DB только для нахождения кратчайшего взвешенного пути между двумя людьми.
Кроме того, каждый день я проверяю каждый узел на графике, и если еда становится меньше 100, я предпринимаю некоторые действия.
Теперь, после некоторых улучшений, свойства Food
больше не достаточно для моего проекта. Поэтому я должен разделить это на три других более специфических свойства (положительное целое число): Vegetables
, Meat
и Cereals
. Если сумма обоих трех меньше 100, я должен предпринять те же действия, что и раньше.
Моя старая ситуация была как «Джон», единственные варианты, в которые я могу развить свой дизайн, это «Фред» или «Пол»?
Каким образом я могу спроектировать это? Должен ли я использовать в дополнение к neo4j что-то вроде MongoDB для представления иерархии?
Удаление свойства Еда и добавление трех новых свойств мне кажется плохой практикой. Я должен спасти в другом месте, что эти 3 означает «еда» ... и что если в будущем я добавлю другие виды продуктов? Где хранится информация о том, что значение 100 для проверки должно поступать из суммы Meat
, Vegetables
и Cereals
?
Наличие чего-то подобного решит мои сомнения, потому что я могу суммировать все элементы внутри food
:
{
"name": "Lucas",
"food": {
"meat": 40,
"vegetables": 30,
"cereals": 0
}
}
(мне не нужно проходить соединения от Food
и Vegetables
до Person
. Просто нужно проверить, что сумма мяса, овощей и зерновых меньше или больше 100).