我有一个需要“简单”家谱的应用程序。我希望能够执行查询,给我一个来自家庭成员的 id 的整个家庭的数据。我说简单,因为它不需要考虑采用或任何其他模糊性。申请要求如下:
- 如果他们来自同一基因系,任何两个人都将无法繁殖
- 需要允许增加新的家族(没有前世家族的新人)
- 需要能够通过查询分别拉取兄弟姐妹、父母
我无法为数据库提出正确的结构。到目前为止,我已经提出了两种解决方案,但它们不是很可靠,并且可能很快就会失控。
解决方案 1 涉及在 people 表上放置一个 family_ids 字段并存储唯一家庭 ID 的列表。每次两个人繁殖时,都会相互检查列表以确保没有 id 匹配,如果所有检查结果都将合并两个列表并将其设置为孩子的 family_ids 字段。
例子:
Father (family_ids: (null)) breeds with Mother (family_ids: (213, 519)) ->
Child (family_ids: (213, 519)) breeds with Random Person (family_ids: (813, 712, 122, 767)) ->
Grandchild (family_ids: (213, 519, 813, 712, 122, 767))
等等等等......我看到的问题是随着时间的推移列表变得不合理地大。
方案二使用 cakephp 的关联声明:
public $belongsTo = array(
'Father' => array(
'className' => 'User',
'foreignKey' => 'father_id'
),
'Mother' => array(
'className' => 'User',
'foreignKey' => 'mother_id'
)
);
现在将 recursive 设置为 2 将获取母亲和父亲的结果,以及他们的母亲和父亲,依此类推。这条路线的问题是数据位于嵌套数组中,我不确定如何有效地处理代码。
如果有人能够引导我以最有效的方式处理我想要实现的目标,那将非常有帮助。非常感谢任何和所有帮助,我很乐意回答任何人的任何问题。非常感谢。