Eidos家族树:家谱数据管理系统
引言:数字化时代下的家族记忆传承
你是否还在为家族历史的碎片化信息而烦恼?照片散落在不同设备,族谱信息记录在纸质文档,重要家族事件难以系统化管理。Eidos作为一款开源的离线个人数据管理框架,为家谱数据管理提供了革命性的解决方案。
通过Eidos,你可以:
- 构建完整的数字化家族树结构
- 存储和管理家族成员详细信息
- 建立亲属关系网络和血缘图谱
- 保存家族历史文档和多媒体资料
- 实现跨代际的信息传承和保护
Eidos核心技术架构解析
树状数据结构设计
Eidos采用先进的树状数据结构来管理层次化信息,完美适配家谱管理的需求:
家谱数据模型设计
| 字段名称 | 数据类型 | 描述 | 示例 |
|---|---|---|---|
| id | String | 唯一标识符 | "550e8400-e29b-41d4-a716-446655440000" |
| name | String | 成员姓名 | "张三" |
| type | TreeNodeType | 节点类型 | "table"(表格) |
| parent_id | String | 父节点ID | "parent_uuid" |
| position | Number | 显示位置 | 1.5 |
| icon | String | 图标标识 | "👨" |
| cover | String | 封面图片 | "avatar.jpg" |
家谱管理系统构建实战
环境准备与安装
首先确保系统环境满足要求:
# 克隆项目仓库
git clone https://gitcode.com/GitHub_Trending/ei/eidos
# 安装依赖
cd eidos
pnpm install
# 下载必要的库文件
cd apps/desktop && node scripts/download-libsimple.cjs
# 启动桌面应用
pnpm dev:desktop
家谱数据库设计
创建家族成员信息表结构:
-- 家族成员基本信息表
CREATE TABLE family_members (
_id TEXT PRIMARY KEY,
full_name TEXT NOT NULL,
gender TEXT,
birth_date DATE,
death_date DATE,
birth_place TEXT,
occupation TEXT,
biography TEXT,
photo_url TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 亲属关系表
CREATE TABLE family_relationships (
id INTEGER PRIMARY KEY AUTOINCREMENT,
person_id TEXT NOT NULL,
relative_id TEXT NOT NULL,
relationship_type TEXT NOT NULL, -- 父子、夫妻、兄弟姐妹等
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (person_id) REFERENCES family_members(_id),
FOREIGN KEY (relative_id) REFERENCES family_members(_id)
);
-- 家族事件记录表
CREATE TABLE family_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_type TEXT NOT NULL, -- 出生、结婚、去世、迁徙等
event_date DATE,
location TEXT,
description TEXT,
involved_members TEXT, -- JSON数组存储参与成员ID
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
家谱树状结构实现
利用Eidos的树状结构管理功能构建家族层级:
import { TreeTable } from '@eidos/core'
import type { ITreeNode } from '@eidos/core/types/ITreeNode'
// 创建家族树节点
const createFamilyTreeNode = async (treeTable: TreeTable, member: FamilyMember): Promise<ITreeNode> => {
const treeNode: ITreeNode = {
id: member.id,
name: member.full_name,
type: 'table',
parent_id: member.parentId || null,
icon: getGenderIcon(member.gender),
position: await calculatePosition(treeTable, member.parentId)
}
return await treeTable.add(treeNode)
}
// 计算节点位置
const calculatePosition = async (treeTable: TreeTable, parentId: string | null): Promise<number> => {
const siblings = await treeTable.list({ parent_id: parentId })
return siblings.length > 0 ? Math.max(...siblings.map(s => s.position)) + 1 : 1
}
// 建立亲属关系
const establishRelationship = async (personId: string, relativeId: string, relationshipType: string) => {
// 防止循环引用检查
await treeTable.checkLoop(personId, relativeId)
// 更新树状结构
await treeTable.update(relativeId, { parent_id: personId })
// 记录关系数据
await insertRelationshipRecord(personId, relativeId, relationshipType)
}
高级功能与扩展应用
家族时间线可视化
智能血缘关系分析
Eidos支持复杂的血缘关系计算和可视化:
// 计算血缘关系度
const calculateKinshipDegree = (person1: string, person2: string): number => {
// 实现血缘关系算法
const path = findRelationshipPath(person1, person2)
return path.length - 1 // 直接关系为1度,隔代为2度等
}
// 寻找共同祖先
const findCommonAncestors = (person1: string, person2: string): string[] => {
const ancestors1 = getAncestors(person1)
const ancestors2 = getAncestors(person2)
return ancestors1.filter(ancestor => ancestors2.includes(ancestor))
}
多媒体家谱集成
// 家谱多媒体管理
class FamilyMediaManager {
private async uploadFamilyPhoto(memberId: string, photoFile: File): Promise<string> {
const photoUrl = await this.fileSystem.upload(photoFile)
await this.updateMember(memberId, { photo_url: photoUrl })
return photoUrl
}
private async attachDocumentToEvent(eventId: string, document: File): Promise<void> {
const docUrl = await this.fileSystem.upload(document)
await this.eventTable.addAttachment(eventId, docUrl)
}
// 生成家谱相册
public async generateFamilyAlbum(familyId: string): Promise<PhotoAlbum> {
const members = await this.getFamilyMembers(familyId)
const photos = await Promise.all(
members.map(member => this.getMemberPhotos(member.id))
)
return this.organizeAlbum(photos.flat())
}
}
数据备份与迁移策略
家谱数据导出格式
| 格式类型 | 优点 | 适用场景 |
|---|---|---|
| GEDCOM | 行业标准,广泛兼容 | 家族历史研究、跨平台迁移 |
| JSON | 结构化数据,易于处理 | 数据分析、自定义应用 |
| 可读性强,便于打印 | 家族聚会、纪念册制作 | |
| SQLite | 完整数据库备份 | 系统迁移、数据恢复 |
自动化备份方案
// 家谱数据备份服务
class FamilyDataBackupService {
public async createBackup(): Promise<BackupInfo> {
const timestamp = new Date().toISOString().replace(/[:.]/g, '-')
const backupName = `family_tree_backup_${timestamp}`
// 导出核心数据
const familyData = await this.exportFamilyData()
const mediaAssets = await this.exportMediaAssets()
const configuration = await this.exportAppConfig()
// 创建压缩包
const backupPackage = await this.createBackupPackage({
familyData,
mediaAssets,
configuration
})
return {
name: backupName,
size: backupPackage.size,
createdAt: new Date(),
downloadUrl: await this.uploadBackup(backupPackage)
}
}
// 定期备份任务
public scheduleRegularBackups(interval: 'daily' | 'weekly' | 'monthly'): void {
const cronExpression = this.getCronExpression(interval)
this.scheduler.schedule(cronExpression, this.createBackup.bind(this))
}
}
安全性与隐私保护
家谱数据包含敏感个人信息,Eidos提供多层次安全保护:
权限管理矩阵
| 用户角色 | 数据查看 | 数据修改 | 关系编辑 | 媒体管理 | 系统设置 |
|---|---|---|---|---|---|
| 家族管理员 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 普通成员 | ✅ | ⚠️有限 | ❌ | ⚠️有限 | ❌ |
| 只读访客 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 研究人员 | ⚠️脱敏 | ❌ | ❌ | ❌ | ❌ |
性能优化与扩展性
大数据量家谱优化策略
// 大型家谱性能优化
class LargeFamilyOptimizer {
// 分页加载家族成员
public async getMembersPaginated(page: number, pageSize: number = 50): Promise<FamilyMember[]> {
const offset = (page - 1) * pageSize
return await this.memberTable.query(
`SELECT * FROM family_members ORDER BY created_at DESC LIMIT ? OFFSET ?`,
[pageSize, offset]
)
}
// 懒加载关系数据
public async loadRelationshipsOnDemand(memberId: string): Promise<Relationship[]> {
if (this.relationshipCache.has(memberId)) {
return this.relationshipCache.get(memberId)
}
const relationships = await this.relationshipTable.query(
`SELECT * FROM family_relationships WHERE person_id = ? OR relative_id = ?`,
[memberId, memberId]
)
this.relationshipCache.set(memberId, relationships)
return relationships
}
// 批量操作优化
public async batchUpdateMembers(updates: MemberUpdate[]): Promise<void> {
await this.database.transaction(async (tx) => {
for (const update of updates) {
await this.memberTable.update(update.id, update.data, tx)
}
})
}
}
总结与展望
Eidos家族树管理系统为数字化时代的家谱管理提供了完整解决方案。通过其强大的树状数据结构和扩展能力,用户可以:
- 系统化整理家族历史和成员信息
- 可视化展示复杂的亲属关系网络
- 安全存储珍贵的家族记忆资料
- 智能分析血缘关系和家族特征
- 跨代传承重要的家族文化和传统
随着人工智能技术的发展,未来的家谱管理系统可能会集成更先进的功能,如面部识别自动归类照片、自然语言处理提取历史文档信息、区块链技术确保数据不可篡改等。
Eidos的开源特性使得开发者可以根据特定家族需求进行定制开发,为不同文化背景的家族提供个性化的家谱管理体验。无论是小家庭还是大宗族,都能找到适合自己的数字化家谱解决方案。
立即开始构建你的数字家族树,让家族记忆在数字时代得到永恒传承。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



