族谱的数据设计

需求分析

  • 族谱有一个特点就是写入少,所以可以建立一个缓存表。
  • 维护关系尽量简单
  • 查询上下几代尽量快速,避免递归

数据库结构

people 表

id 
name 姓名

relation 表

id
family_id 族号 一个用户可能存在多个族谱中,比如外嫁后进入其他族谱
people_id 用户编号
level 代系
relate_people_id 关联人,
type 关系:如丈夫,妻子,儿子,孙子,情人
order 第几个孩子,第几任妻子

索引

alter table relation create index family_level(family_id,level);

查询(高性能将上下三代查出来)

select * from relation where family_id=3 and level between current_level-3,current_level+3;

分析

这两个表记录基本不用改(除非录错了),任何时候都是增加记录即可,所以维护也非常简单。

界面展示上,查询出上下几代,然后名字作为主要展示标签,关系用连线展示,关系和人是多对多,完美解决关系混乱的问题。

level 代表是族谱里面的第几代。

如果发现了新的祖先,然么当然自己代数要加一。

比如李渊原来 level 是 1 代,然后认了老子做祖宗,那么他就不 1 代了,老子是 1 代。

族谱草图

file

参考