以土豆之名,行学习之实

family_tree数据库结构


家族谱系数据库结构功能说明

📊 数据库概述

数据库名称: family_tree
字符集: utf8mb4
用途: 存储家族成员信息及其亲属关系,支持中文字符和emoji表情


🧑‍💼 人员表 (persons) - 核心成员信息存储

基本信息模块

字段类型必填说明
idINT AUTO_INCREMENT唯一人员标识符,系统自动生成
nameVARCHAR(100)人员姓名,支持中英文
genderENUM('M','F')性别:M-男性,F-女性

🎂 出生日期模块

字段类型必填说明
birth_dateDATE实际出生日期
date_typeENUM('solar','lunar')日期系统:公历/农历
date_accuracyENUM('exact','year_month','year_only')日期精确度,默认精确到日

📞 联系信息模块

字段类型必填说明
phoneVARCHAR(20)联系电话
emailVARCHAR(100)电子邮箱
birth_placeVARCHAR(200)出生地点
avatar_pathVARCHAR(500)头像文件路径

⚰️ 生命状态模块

字段类型必填说明
is_livingBOOLEAN是否在世,默认TRUE
death_dateDATE逝世日期(仅当不在世时)
death_date_typeENUM('solar','lunar')逝世日期类型
biographyTEXT生平事迹和经历

⏰ 系统信息模块

字段类型说明
created_atTIMESTAMP记录创建时间
updated_atTIMESTAMP最后更新时间

🔗 关系表 (relationships) - 亲属关系网络

关系定义模块

字段类型必填说明
idINT AUTO_INCREMENT关系记录ID
from_person_idINT关系发起方
to_person_idINT关系接收方
relationship_typeENUM关系类型
sub_typeVARCHAR(20)关系子类型

💍 婚姻信息模块(仅对配偶关系)

字段类型必填说明
marriage_dateDATE结婚纪念日
marriage_date_typeENUM结婚日期类型

⏰ 系统信息模块

字段类型说明
created_atTIMESTAMP关系建立时间
updated_atTIMESTAMP关系更新时间

🔄 关系类型说明

核心关系类型

关系类型说明典型子类型
parent父母关系father, mother
child子女关系son, daughter
spouse配偶关系husband, wife
sibling兄弟姐妹brother, sister

关系示例

父亲 → 儿子: relationship_type='child', sub_type='son'
丈夫 → 妻子: relationship_type='spouse', sub_type='husband'
母亲 → 女儿: relationship_type='child', sub_type='daughter'

🎯 主要功能特性

1. 灵活的日期系统

  • ✅ 支持公历和农历双系统

  • ✅ 可设置日期精确度(精确到日/年月/仅年份)

  • ✅ 独立的出生和逝世日期管理

2. 完整的生命周期管理

  • ✅ 在世状态自动管理

  • ✅ 生平传记记录

  • ✅ 出生地和联系方式存储

3. 强大的关系网络

  • ✅ 支持多种亲属关系

  • ✅ 防止重复关系记录

  • ✅ 级联删除确保数据一致性

4. 性能优化

  • ✅ 合理的索引设计

  • ✅ 外键约束保证数据完整

  • ✅ 前缀索引优化存储


💡 使用场景

家族信息管理

  • 记录家族成员基本信息

  • 维护亲属关系网络

  • 存储个人生平事迹

数据查询分析

  • 按姓名快速查找人员

  • 按出生日期排序

  • 按关系类型筛选家庭成员

扩展应用

  • 生成家族树状图

  • 统计家族人口信息

  • 追溯家族历史脉络


-- 创建数据库
CREATE DATABASE IF NOT EXISTS family_tree CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE family_tree;

-- 人员表
CREATE TABLE persons (
    -- 主键和基本身份信息
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '人员ID,自增主键',
    name VARCHAR(100) NOT NULL COMMENT '姓名,必填字段',
    gender ENUM('M', 'F') NOT NULL COMMENT '性别:M-男性, F-女性',

    -- 出生日期信息
    birth_date DATE NOT NULL COMMENT '出生日期,存储用户实际输入的日期',
    date_type ENUM('solar', 'lunar') NOT NULL COMMENT '日期类型:solar-公历, lunar-农历',
    date_accuracy ENUM('exact', 'year_month', 'year_only') DEFAULT 'exact' COMMENT '日期精确度:exact-精确到日, year_month-精确到年月, year_only-仅年份',

    -- 扩展信息
    phone VARCHAR(20) COMMENT '电话号码',
    email VARCHAR(100) COMMENT '电子邮箱',
    birth_place VARCHAR(200) COMMENT '出生地点',
    avatar_path VARCHAR(500) COMMENT '头像图片存储路径',
    is_living BOOLEAN DEFAULT TRUE COMMENT '是否在世:TRUE-在世, FALSE-已故',
    death_date DATE COMMENT '逝世日期,仅当is_living为FALSE时有效',
    death_date_type ENUM('solar', 'lunar') COMMENT '逝世日期类型:solar-公历, lunar-农历',
    biography TEXT COMMENT '生平简介,可存储详细的个人经历和事迹',

    -- 时间戳
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间,由系统自动设置',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录最后更新时间,由系统自动更新',

    -- 索引
    INDEX idx_name (name) COMMENT '姓名索引,支持按姓名快速查询',
    INDEX idx_birth_date (birth_date) COMMENT '出生日期索引,支持按出生日期排序和范围查询',
    INDEX idx_date_type (date_type) COMMENT '日期类型索引,支持按日期类型筛选',
    INDEX idx_birth_place (birth_place(50)) COMMENT '出生地索引,前缀索引优化存储',
    INDEX idx_is_living (is_living) COMMENT '在世状态索引,支持按生存状态筛选'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人员基本信息表,存储家族成员的核心数据';

-- 关系表
CREATE TABLE relationships (
    -- 主键和关系定义
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '关系ID,自增主键',
    from_person_id INT NOT NULL COMMENT '关系发起方人员ID,引用persons表的id',
    to_person_id INT NOT NULL COMMENT '关系接收方人员ID,引用persons表的id',
    relationship_type ENUM('parent', 'child', 'spouse', 'sibling') NOT NULL COMMENT '关系类型:parent-父母, child-子女, spouse-配偶, sibling-兄弟姐妹',
    sub_type VARCHAR(20) COMMENT '关系子类型,用于细化关系,如father/mother, husband/wife等',

    -- 结婚日期信息(仅对spouse关系类型有效)
    marriage_date DATE COMMENT '结婚日期,仅对配偶关系有效',
    marriage_date_type ENUM('solar', 'lunar') COMMENT '结婚日期类型:solar-公历, lunar-农历',

    -- 时间戳
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '关系记录创建时间,由系统自动设置',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '关系记录最后更新时间,由系统自动更新',

    -- 外键约束 (移除注释)
    FOREIGN KEY (from_person_id) REFERENCES persons(id) ON DELETE CASCADE,
    FOREIGN KEY (to_person_id) REFERENCES persons(id) ON DELETE CASCADE,

    -- 唯一约束和索引
    UNIQUE KEY unique_direct_relationship (from_person_id, to_person_id, relationship_type) COMMENT '唯一约束:确保相同两人之间的同类型关系只能存在一条记录',

    -- 查询性能优化索引
    INDEX idx_from_person (from_person_id, relationship_type) COMMENT '复合索引:支持按关系发起方和关系类型快速查询',
    INDEX idx_to_person (to_person_id, relationship_type) COMMENT '复合索引:支持按关系接收方和关系类型快速查询',
    INDEX idx_relationship_type (relationship_type) COMMENT '关系类型索引,支持按关系类型筛选',
    INDEX idx_marriage_date (marriage_date) COMMENT '结婚日期索引,支持按结婚日期排序和查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人员关系表,存储家族成员间的亲属关系,支持多种关系类型';