协慌网

登录 贡献 社区

家谱软件中的循环

我是一些家庭树软件的开发者(用 C ​​++ 和 Qt 编写)。在我的一位客户向我邮寄错误报告之前,我没有遇到任何问题。问题是顾客有两个孩子和自己的女儿,因此,他因错误而无法使用我的软件。

这些错误是我处理家族图的各种断言和不变量的结果(例如,在走一个循环之后,程序声明 X 不能同时是 Y 的父亲和祖父)。

如何在不删除所有数据断言的情况下解决这些错误?

答案

看来你(和 / 或你的公司)对家谱应该是什么有一个根本的误解。

让我澄清一下,我也为一家公司(其产品之一)的产品组合中的家族树工作,我们一直在努力解决类似的问题。

在我们的案例中,问题,我也假设你的情况,来自GEDCOM格式,该格式对于一个家庭应该是什么非常自以为是。然而,这种格式包含了一些关于家谱真实情况的严重误解。

GEDCOM 有许多问题,例如与同性关系,乱伦等不相容...... 在现实生活中发生的事情比你想象的更频繁(尤其是回到 1700-1800 时)。

我们已经将我们的家谱模型化为现实世界中发生的事件:事件(例如,出生,婚礼,订婚,工会,死亡,收养等)。我们对这些没有任何限制,除了逻辑上不可能的(例如,一个不能是一个人自己的父母,关系需要两个人等等)

缺乏验证为我们提供了一个更 “现实世界”,更简单,更灵活的解决方案。

至于这个具体的情况,我建议删除断言,因为它们并不普遍。

为了显示问题(将出现),我建议根据需要多次绘制相同的节点,通过在选择其中一个副本时点亮所有副本来暗示重复。

放松你的断言。

不是通过更改规则,这些规则很可能对 99.9%的客户在输入数据时发现错误非常有帮助。

相反,将其从错误 “无法添加关系” 更改为带有 “仍然添加” 的警告。

这是家庭树的问题:它们不是树木。它们是有向无环图或 DAG。如果我正确理解人类生殖生物学的原理,就不会有任何循环。

据我所知,即使是基督徒也接受堂兄弟之间的婚姻(以及子女),这会将家谱变成家庭 DAG。

故事的寓意是:选择正确的数据结构。