Eidos家族树:家谱数据管理系统

Eidos家族树:家谱数据管理系统

【免费下载链接】eidos Offline alternative to Notion. Eidos is an extensible framework for managing your personal data throughout your lifetime in one place. 【免费下载链接】eidos 项目地址: https://gitcode.com/GitHub_Trending/ei/eidos

引言:数字化时代下的家族记忆传承

你是否还在为家族历史的碎片化信息而烦恼?照片散落在不同设备,族谱信息记录在纸质文档,重要家族事件难以系统化管理。Eidos作为一款开源的离线个人数据管理框架,为家谱数据管理提供了革命性的解决方案。

通过Eidos,你可以:

  • 构建完整的数字化家族树结构
  • 存储和管理家族成员详细信息
  • 建立亲属关系网络和血缘图谱
  • 保存家族历史文档和多媒体资料
  • 实现跨代际的信息传承和保护

Eidos核心技术架构解析

树状数据结构设计

Eidos采用先进的树状数据结构来管理层次化信息,完美适配家谱管理的需求:

mermaid

家谱数据模型设计

字段名称数据类型描述示例
idString唯一标识符"550e8400-e29b-41d4-a716-446655440000"
nameString成员姓名"张三"
typeTreeNodeType节点类型"table"(表格)
parent_idString父节点ID"parent_uuid"
positionNumber显示位置1.5
iconString图标标识"👨"
coverString封面图片"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)
}

高级功能与扩展应用

家族时间线可视化

mermaid

智能血缘关系分析

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结构化数据,易于处理数据分析、自定义应用
PDF可读性强,便于打印家族聚会、纪念册制作
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提供多层次安全保护:

mermaid

权限管理矩阵

用户角色数据查看数据修改关系编辑媒体管理系统设置
家族管理员
普通成员⚠️有限⚠️有限
只读访客
研究人员⚠️脱敏

性能优化与扩展性

大数据量家谱优化策略

// 大型家谱性能优化
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家族树管理系统为数字化时代的家谱管理提供了完整解决方案。通过其强大的树状数据结构和扩展能力,用户可以:

  1. 系统化整理家族历史和成员信息
  2. 可视化展示复杂的亲属关系网络
  3. 安全存储珍贵的家族记忆资料
  4. 智能分析血缘关系和家族特征
  5. 跨代传承重要的家族文化和传统

随着人工智能技术的发展,未来的家谱管理系统可能会集成更先进的功能,如面部识别自动归类照片、自然语言处理提取历史文档信息、区块链技术确保数据不可篡改等。

Eidos的开源特性使得开发者可以根据特定家族需求进行定制开发,为不同文化背景的家族提供个性化的家谱管理体验。无论是小家庭还是大宗族,都能找到适合自己的数字化家谱解决方案。

立即开始构建你的数字家族树,让家族记忆在数字时代得到永恒传承。

【免费下载链接】eidos Offline alternative to Notion. Eidos is an extensible framework for managing your personal data throughout your lifetime in one place. 【免费下载链接】eidos 项目地址: https://gitcode.com/GitHub_Trending/ei/eidos

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值