3

我有一个非常基本的家谱结构,但我需要弄清楚如何让它支持多个合作伙伴和兄弟姐妹,而不需要太多冗余。

整个树的基础是创建树的人。

考虑这个非常简单的结构:

{
    "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"
                }
            ]
        }
    ]
}

这确实映射了我的 2 个新发现的兄弟姐妹,但现在我的数据有点冗余,因为成吉思汗在 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] }
]

如果没有太多冗余,这会以同样的方式工作吗?是否有任何可预见的情况下,在映射多个有孩子的伴侣方面会有任何限制?

注意:我想如果我保持初始结构,我必须添加 id 键以正确识别成吉思汗在所有 3 个实例中都是相同的。

我的最终目标是映射一个在视觉上将以这种方式呈现的谱系树(可能在 d3.js 中),在合作伙伴与他们的孩子之间的中间有一条线。

因此,使用上面的数据集,我正在尝试渲染:

在此处输入图像描述

4

1 回答 1

2

几乎所有家谱系统都有人的 ID,所以我不担心添加/需要它。

执行此操作的传统方式是拥有 Family 节点类型和 Person 节点类型。这允许多段婚姻,并为您提供一个连接结婚日期、结婚地点等信息的地方。

person[ { "id": "p1", "name": "Me", "dob": "1988", "parents": "f3" }, { "id": "p2", "name": "Genghis Khan", "dob": "1961", "parents": "f1", "spouse_families": ["f2", "f3"] }, { "id": "p3", "name": "Gina Carano", "dob": "1967", "spouse_families" : ["f3"] }, { "id": "p4", "name": "Brian", "dob": "1992", "parents" : "f3" }, { "id": "p5", "name": "Judy", "dob": "1987", "parents": "f2" }, { "id": "p6", "name": "Courtney Carano", "dob": "1965", "spouse_families": ["f2"] }, {"id": "p7", "name": "Mother of Ghengis"}, {"id": "p8", "name": "Father of Ghengis"}, ]

family[ {"id":"f1","marriage date":"", "parents": ["p7", "p8"],"children":["p2"]}, {"id":"f2","marriage date":"", "parents": ["p6", "p2"],"children":["p5"]}, {"id":"f3","marriage date":"", "parents": ["p3","p2"],"children":["p1", "p4"]}, ]

这为您提供了一个无需冗余和大量特殊外壳即可将所有父母和孩子连接在一起的地方。(注意:我将数据结构中的“Tim”更正为“Brian”以匹配图形。)

于 2016-01-04T19:01:03.030 回答