家族谱系数据库结构功能说明
📊 数据库概述
数据库名称: family_tree
字符集: utf8mb4
用途: 存储家族成员信息及其亲属关系,支持中文字符和emoji表情
🧑💼 人员表 (persons) - 核心成员信息存储
基本信息模块
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | INT AUTO_INCREMENT | ✅ | 唯一人员标识符,系统自动生成 |
name | VARCHAR(100) | ✅ | 人员姓名,支持中英文 |
gender | ENUM('M','F') | ✅ | 性别:M-男性,F-女性 |
🎂 出生日期模块
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
birth_date | DATE | ✅ | 实际出生日期 |
date_type | ENUM('solar','lunar') | ✅ | 日期系统:公历/农历 |
date_accuracy | ENUM('exact','year_month','year_only') | ❌ | 日期精确度,默认精确到日 |
📞 联系信息模块
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
phone | VARCHAR(20) | ❌ | 联系电话 |
email | VARCHAR(100) | ❌ | 电子邮箱 |
birth_place | VARCHAR(200) | ❌ | 出生地点 |
avatar_path | VARCHAR(500) | ❌ | 头像文件路径 |
⚰️ 生命状态模块
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
is_living | BOOLEAN | ❌ | 是否在世,默认TRUE |
death_date | DATE | ❌ | 逝世日期(仅当不在世时) |
death_date_type | ENUM('solar','lunar') | ❌ | 逝世日期类型 |
biography | TEXT | ❌ | 生平事迹和经历 |
⏰ 系统信息模块
| 字段 | 类型 | 说明 |
|---|---|---|
created_at | TIMESTAMP | 记录创建时间 |
updated_at | TIMESTAMP | 最后更新时间 |
🔗 关系表 (relationships) - 亲属关系网络
关系定义模块
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | INT AUTO_INCREMENT | ✅ | 关系记录ID |
from_person_id | INT | ✅ | 关系发起方 |
to_person_id | INT | ✅ | 关系接收方 |
relationship_type | ENUM | ✅ | 关系类型 |
sub_type | VARCHAR(20) | ❌ | 关系子类型 |
💍 婚姻信息模块(仅对配偶关系)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
marriage_date | DATE | ❌ | 结婚纪念日 |
marriage_date_type | ENUM | ❌ | 结婚日期类型 |
⏰ 系统信息模块
| 字段 | 类型 | 说明 |
|---|---|---|
created_at | TIMESTAMP | 关系建立时间 |
updated_at | TIMESTAMP | 关系更新时间 |
🔄 关系类型说明
核心关系类型
| 关系类型 | 说明 | 典型子类型 |
|---|---|---|
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='人员关系表,存储家族成员间的亲属关系,支持多种关系类型';