У меня есть очень простая структура генеалогического древа, но мне нужно выяснить, как заставить его поддерживать несколько партнеров и братьев и сестер без такой избыточности.
Основой всего дерева является человек, создающий дерево.
Рассмотрим эту очень простую структуру:
{
"name": "Me",
"dob": "1988",
"parents": [
{
"name": "Gina Carano",
"dob": "1967"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
],
"children": [
{
"name": "Tim",
"dob": "1992"
}
]
}
Это прекрасно работает, но что, если я обнаружу, что у меня есть сводная сестра по имени Джуди (Чингисхан любил женщин) и полнородный брат по имени Брайан, и расширим это до этого?
{
"name": "Me",
"dob": "1988",
"parents": [
{
"name": "Gina Carano",
"dob": "1967"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
],
"children": [
{
"name": "Tim",
"dob": "1992"
}
],
"siblings": [
{
"name": "Judy",
"dob": "1987",
"parents": [
{
"name": "Courtney Carano",
"dob": "1965"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
]
},
{
"name": "Brian",
"dob": "1988",
"parents": [
{
"name": "Gina Carano",
"dob": "1967"
},
{
"name": "Genghis Khan",
"dob": "1961"
}
]
}
]
}
Это действительно отображает двух моих новообретенных братьев и сестер, но теперь у меня есть небольшая избыточность в моих данных, поскольку Чингисхан находится в 3 разных местах. Я потенциально мог бы создать одноуровневый список, такой как этот:
[
{ "id": "1", "name": "Me", "dob": "1988", "parents": [2,3], "siblings": [4,5] },
{ "id": "2", "name": "Genghis Khan", "dob": "1961", "children": [1,4,5] },
{ "id": "3", "name": "Gina Carano", "dob": "1967", "children": [1] },
{ "id": "4", "name": "Tim", "dob": "1992", "parents" : [2,3] },
{ "id": "5", "name": "Judy", "dob": "1987", "parents": [2,6] },
{ "id": "6", "name": "Courtney Carano", "dob": "1965", "children": [5] }
]
Будет ли это работать так же, но без такой избыточности? И есть ли какие-либо предсказуемые обстоятельства, при которых будут какие-либо ограничения с точки зрения определения нескольких партнеров с детьми?
Примечание. Я полагаю, что если я оставлю исходную структуру, мне придется добавить ключи идентификатора, чтобы правильно определить, что Чингисхан один и тот же во всех трех экземплярах.
Моей конечной целью является отображение родословного дерева (вероятно, в d3.js), которое визуально будет выглядеть следующим образом: с чертой посередине между партнерами, ведущими к своим детям.
Итак, с набором данных выше я пытаюсь отобразить: