Skip to content

数据库 Schema 设计 ​

LifeOSDatabase_v2 — 离线优先架构下的数据模型、存储引擎、加密机制与迁移策略

属性值
数据库名称LifeOSDatabase_v2
数据库版本1
数据表数量80+
加密算法AES-256-GCM
存储引擎DexieStore (H5) / SqliteStore (App) / EncryptedStore

1. 架构概览 ​

数据库采用平台自适应的多引擎架构,通过统一接口 IStore<T> 向上层暴露一致的 CRUD API。App 端使用原生 SQLite,H5 端使用 IndexedDB(Dexie.js),所有数据在写入前自动经 EncryptedStore 进行 AES-256-GCM 加密,读取后自动解密。上层 Repository 和页面层完全无感知底层引擎差异和加解密逻辑。

三大引擎 ​

引擎平台定位
DexieStoreH5基于 IndexedDB,Dexie.js 封装。支持真实索引查询,存储无上限(GB 级)。Schema 变更通过哈希对比自动检测与重建
SqliteStoreApp基于原生 SQLite,利用设备磁盘持久化。通过 uni-app 条件编译自动选择
EncryptedStore通用透明加密层,包装底层 IStore。写入时除 id 外全字段 AES-256-GCM 加密

2. 通用基础字段 (BaseEntity) ​

所有业务表继承的公共字段,由 BaseRepository 在 create() 时自动注入,下表不再重复列出。

字段类型描述备注
idstringUUID v4 全局唯一主键create() 自动生成,跨设备零冲突
createdAtnumber毫秒级 Unix 时间戳create() 取 Date.now()
updatedAtnumber最后更新时间戳update() 时自动刷新
deletedboolean软删除标记,默认 false查询默认过滤 false 记录
versionnumber乐观锁版本号,初始 1每次更新 +1,同步冲突检测依据
syncStatusSyncStatus同步状态:LOCAL_ONLY / WAIT_SYNC / SYNCED / CONFLICT默认 LOCAL_ONLY

3. Repository 模式 ​

每个业务模块继承 BaseRepository<T> 获得通用 CRUD,核心接口:

findById | findAll | findWithPagination | create | update
delete | softDelete | bulkCreate | bulkUpdate | count | findUnsynced

4. 加密存储机制 ​

写入时除 id 外全字段 AES-256-GCM 加密为 EncRecord 格式:

typescript
{ id: "abc123", _enc: "...", _iv: "...", _algo: "gcm", _mac?: "..." }

id 保持明文以支持主键查找;其余字段序列化为 JSON 后加密。密钥由 iOS Keychain / Android Keystore 托管。


5. 数据表清单 ​

以下按业务领域列出全部 80+ 张表。每张表均包含字段级详细定义,BaseEntity 通用字段不再重复。


5.1 系统与基础设施 ​

users ​

用户账号信息。

字段类型描述备注
nicknamestring用户昵称—
avatarstring头像 URL—
settingsUserSettings用户偏好设置JSON 对象

userProfile ​

用户个人资料(公开可见部分)。

字段类型描述备注
namestring显示名称—
avatarstring头像 URL—
biostring个人简介—

settings ​

键值对通用配置存储。

字段类型描述备注
keystring配置键名唯一索引
valueunknown配置值支持任意类型

dashboardLayout ​

仪表盘首页布局配置。

字段类型描述备注
widgets{ id: string, x: number, y: number, w: number, h: number }[]小组件网格布局栅格坐标 + 尺寸

syncQueue ​

同步操作队列,记录所有待同步的数据变更。

字段类型描述备注
tableNamestring变更表名索引
recordIdstring变更记录 ID—
operationstring操作类型:create / update / delete—
dataunknown变更数据—
syncStatusstring同步状态索引
retryCountnumber重试次数—

syncConfig ​

同步后端配置。

字段类型描述备注
typestring同步类型(如 gist、webdav)—
repostring仓库地址—
tokenstring认证令牌—
gistIdstringGist IDGist 类型时使用
enabledboolean是否启用同步—

aiConfig ​

AI 服务配置。

字段类型描述备注
providerstringAI 服务商—
apiKeystringAPI 密钥—
modelstring默认模型—

features ​

功能模块注册表,对应 模块功能清单。

字段类型描述备注
keystring模块唯一标识如 task_management
iconstring图标类名—
bgstring背景色—
routestring页面路由如 /pages/task/index
catKeystring所属分类标识索引
labelstring模块名称—
descstring功能描述—

lifeModes ​

生活模式预设(场景化配置组合)。

字段类型描述备注
LifeMode 类型—场景名称、时间范围、关联模块列表类型定义见 src/types/life-mode.ts

lifeEvents ​

生活事件定义(事件触发条件与模块联动)。

字段类型描述备注
LifeEvent 类型—事件触发规则、关联动作类型定义见 src/types/life-event.ts

5.2 效率工具 ​

tasks ​

任务管理,核心表之一。

字段类型描述备注
titlestring任务标题必填
descriptionstring任务描述—
statusTaskStatus状态:TODO / IN_PROGRESS / DONE / CANCELLED—
priorityTaskPriority优先级:LOW / MEDIUM / HIGH / URGENT—
categoryIdstring | null关联任务分类 ID索引
tagsstring[]自由标签列表—
dueDatenumber | null到期时间戳索引
location{name, longitude?, latitude?}地点信息—
repeatRule{frequency, interval?, endDate?} | null重复规则frequency: daily/weekly/monthly/yearly
archivedboolean归档标记—
completedAtnumber | null完成时间戳—
projectIdstring | null所属项目 ID—
sortOrdernumber排序权重数值越小越靠前
group{name, color?} | null分组信息—

索引:status、dueDate、priority、categoryId、createdAt

taskCategories ​

任务分类。

字段类型描述备注
namestring分类名称—
colorstring分类颜色—
iconstring分类图标—
sortOrdernumber排序权重—
parentIdstring | null父分类 ID支持嵌套

calendarEvents ​

日历事件。

字段类型描述备注
titlestring事件标题—
descriptionstring事件描述—
startTimenumber开始时间戳索引
endTimenumber结束时间戳索引
locationunknown地点信息—
allDayboolean是否全天事件—
colorstring事件颜色—
repeatunknown重复规则—
taskIdstring | null关联任务 ID—
calendarIdstring所属日历分类 ID索引

索引:startTime、endTime、calendarId

calendarCategories ​

日历分类。

字段类型描述备注
namestring分类名称—
colorstring分类颜色—
isVisibleboolean是否显示—
sortOrdernumber排序权重—

pomodoroSessions ​

番茄钟专注记录。

字段类型描述备注
PomodoroSession 类型—任务关联、开始/结束时间、专注时长、类型类型定义见 src/modules/pomodoro/types.ts

pomodoroSettings ​

番茄钟设置。

字段类型描述备注
focusMinsnumber专注时长(分钟)默认 25
shortBreakMinsnumber短休息时长(分钟)默认 5
longBreakMinsnumber长休息时长(分钟)默认 15
longBreakIntervalnumber长休息间隔(次)默认 4

flows ​

流程图/工作流定义。

字段类型描述备注
namestring流程名称—
descriptionstring流程描述可选
steps{title: string, content: string, order: number}[]步骤定义—
lastRunnumber最后执行时间可选

flowRuns ​

流程图执行记录。

字段类型描述备注
flowIdstring关联流程 ID—
flowNamestring流程名称(冗余)避免关联查询
stepStatus{stepIndex: number, done: boolean}[]步骤完成状态—
completedboolean整体是否完成—
datestring执行日期—
notestring备注可选

goalRecords ​

目标追踪。

字段类型描述备注
titlestring目标标题—
descstring目标描述—
targetnumber目标值—
currentnumber当前进度—
deadlinenumber截止时间戳—
categorystring分类—
statusstring状态—

studyPlans ​

学习计划。

字段类型描述备注
namestring计划名称—
descstring计划描述—
totalnumber总任务量—
progressnumber当前进度—
deadlinenumber截止时间戳—

ideas ​

创意灵感。

字段类型描述备注
titlestring标题—
descstring详细描述—
tagsstring[]标签列表—

5.3 知识管理 ​

notes ​

笔记/知识条目,核心表之一。

字段类型描述备注
notebookIdstring所属笔记本 ID索引
titlestring笔记标题—
contentstring笔记内容Markdown 格式
tagsstring[]标签列表索引

索引:notebookId、tags、createdAt

notebooks ​

笔记本/分类。

字段类型描述备注
namestring笔记本名称—
colorstring颜色标记—
sortOrdernumber排序权重—

knowledgeTags ​

知识标签。

字段类型描述备注
namestring标签名称—
colorstring标签颜色—

5.4 财务资产 ​

transactions ​

交易记录,核心表之一。金额以分为单位存储。

字段类型描述备注
typeTransactionType交易类型:income / expense / transfer—
amountnumber金额(分为单位)避免浮点精度问题
categorystring分类标签索引
categoryIconstring分类图标—
remarkstring备注—
datenumber交易日期时间戳—
accountIdstring关联账户 ID—
tagsstring[]自由标签—
location{name, longitude?, latitude?}交易地点—

索引:date、type、category

financeAccounts ​

财务账户。

字段类型描述备注
namestring账户名称—
typestring账户类型:cash / bank / credit / investment / other—
balancenumber余额(分为单位)—
currencystring货币代码如 CNY、USD
colorstring颜色标记—
iconstring图标—
isArchivedboolean是否归档—

budgets ​

预算。

字段类型描述备注
namestring预算名称—
categorystring预算分类—
amountnumber预算金额(分)—
periodstring预算周期如 monthly、yearly
startDatenumber开始日期—
spentnumber已支出金额(分)—
isActiveboolean是否启用—

loanPlans ​

贷款计划。

字段类型描述备注
typestring贷款类型—
namestring贷款名称—
bankstring贷款银行—
totalAmountnumber贷款总额(分)—
totalPeriodsnumber总还款期数—
ratenumber年利率如 0.04 表示 4%
rateTypestring利率类型—
borrowDatestring借款日期—
repayMethodstring还款方式等额本息 / 等额本金
firstRepayDatestring首次还款日—
totalInterestnumber总利息(分)—
notestring备注—
installmentsunknown[]分期计划详情每期本金+利息

splitBills ​

账本拆分(AA 分账)。

字段类型描述备注
namestring账单名称—
totalnumber总金额—
people{name: string, amount: number}[]参与人与金额—
datestring日期—
settledboolean是否已结算—

moneyLendRecords ​

借钱(借出)。

字段类型描述备注
amountnumber借出金额—
personstring借款对象—
datestring借款日期—
reasonstring借款原因—
returnedboolean是否已归还—

moneyBorrowRecords ​

借钱(借入)。

字段类型描述备注
amountnumber借入金额—
personstring借款来源—
datestring借款日期—
reasonstring借款原因—
returnedboolean是否已归还—

5.5 健康运动 ​

healthRecords ​

健康综合记录。

字段类型描述备注
HealthRecord 类型—按 type+date 复合索引存储各类健康数据类型定义见 src/modules/health/types.ts

索引:[type+date] 复合、date

exerciseRecords ​

运动记录。

字段类型描述备注
ExerciseRecord 类型—运动类型、时长、消耗卡路里类型定义见 src/modules/health/types.ts

sleepRecords ​

睡眠记录。

字段类型描述备注
SleepRecord 类型—入睡/起床时间、质量评分、中断次数类型定义见 src/modules/health/types.ts

healthMetrics ​

健康指标。

字段类型描述备注
HealthMetric 类型—血压、心率、血糖等多指标记录类型定义见 src/modules/health/types.ts

dietRecords ​

饮食记录。

字段类型描述备注
typestring餐次类型早/午/晚/加餐
foodstring食物描述—
photostring食物照片—
notesstring备注—
datenumber日期时间戳索引

索引:date

waterRecords ​

饮水记录。

字段类型描述备注
amountnumber饮水量(毫升)—
datestring日期索引

索引:date

bodyRecords ​

身体数据。

字段类型描述备注
datestring测量日期—
weightnumber体重(kg)—
heightnumber身高(cm)—
bminumberBMI 值—
notestring备注—

medicinePlans ​

用药计划。

字段类型描述备注
namestring药品名称—
dosagestring剂量—
frequencystring频次如 daily、bid、tid
timesstring[]用药时间如 ["08:00", "20:00"]
startDatestring开始日期—
endDatestring结束日期—
notestring备注—

periodRecords ​

经期记录。

字段类型描述备注
datestring日期—
typestring类型—
intensitynumber强度—
notestring备注—

periodSettings ​

经期设置。

字段类型描述备注
keystring设置键—
cyclenumber周期天数默认 28
durationnumber持续天数默认 5
lastPeriodstring上次经期日期—

5.6 生活记录 ​

habits ​

习惯定义。

字段类型描述备注
Habit 类型—name, icon, color, frequency, target, categoryId类型定义见 src/modules/habit/types.ts

索引:categoryId

habitRecords ​

习惯打卡记录。

字段类型描述备注
HabitRecord 类型—habitId, date, completed, value, note类型定义见 src/modules/habit/types.ts

索引:[habitId+date] 复合、date

moodRecords ​

心情记录。

字段类型描述备注
datestring日期索引
moodnumber心情指数(1-5)—
notestring备注—
tagsstring[]标签—

索引:date

diaryEntries ​

日记。

字段类型描述备注
datestring日期索引
titlestring日记标题—
contentstring日记正文—
moodstring心情—
weatherstring天气—
tagsstring[]标签—

索引:date

dreamRecords ​

梦境记录。

字段类型描述备注
datestring日期—
titlestring梦境标题—
contentstring梦境内容—
typestring梦境类型—
emotionstring情绪—
claritynumber清晰度—
tagsstring[]标签—

achievementRecords ​

成就。

字段类型描述备注
keystring成就标识—
namestring成就名称—
iconstring成就图标—
descstring成就描述—
unlockedboolean是否已解锁—
unlockedAtnumber解锁时间可选

memos ​

备忘录。

字段类型描述备注
titlestring标题—
contentstring内容—
colorstring颜色标记—
pinnedboolean是否置顶—

shoppingRecords ​

购物清单。

字段类型描述备注
namestring商品名称—
amountnumber金额—
boughtboolean是否已购买—
categorystring分类—

wishlistItems ​

心愿清单。

字段类型描述备注
namestring心愿名称—
pricenumber价格—
reasonstring心愿理由—
prioritystring优先级—
urlstring链接—

trajectoryRecords ​

活动轨迹。

字段类型描述备注
locationstring地点名称—
activitystring活动类型可选
longitudenumber经度可选
latitudenumber纬度可选
notestring备注—
datenumber日期时间戳索引

索引:date


5.7 家庭生活 ​

pets ​

宠物信息。

字段类型描述备注
namestring宠物名字—
speciesstring物种如 猫、狗
breedstring品种—
birthDatestring出生日期—
avatarstring头像—
notestring备注—

petActivities ​

宠物活动记录。

字段类型描述备注
petIdstring关联宠物 ID—
typestring活动类型如 洗澡、驱虫、疫苗
datestring日期—
notestring备注—

petWeights ​

宠物体重追踪。

字段类型描述备注
petIdstring关联宠物 ID—
weightnumber体重(kg)—
datestring测量日期—

plants ​

植物信息。

字段类型描述备注
namestring植物名字—
speciesstring物种—
waterIntervalnumber浇水间隔(天)—
lastWateredstring上次浇水日期—
sunlightstring光照需求—
notestring备注—
imagestring照片—

plantActivities ​

植物活动记录。

字段类型描述备注
plantIdstring关联植物 ID—
typestring活动类型如 施肥、换盆、修剪
datestring日期—
notestring备注—

plantWaterings ​

浇水记录。

字段类型描述备注
plantIdstring关联植物 ID—
datestring浇水日期—
amountstring浇水量—

recipeItems ​

食谱。

字段类型描述备注
namestring菜名—
categorystring分类—
ingredientsstring[]食材列表—
stepsstring制作步骤—

medicalRecords ​

就诊记录。

字段类型描述备注
hospitalstring医院名称—
departmentstring科室—
doctorstring医生姓名—
descriptionstring病情描述—
medicationstring用药方案—
costnumber费用—
datenumber就诊日期时间戳—

people ​

人脉管理。

字段类型描述备注
PeopleRecord 类型—姓名、关系、联系方式、关联借贷和纪念日类型定义见 src/types/entity-relation.ts

channels ​

渠道管理。

字段类型描述备注
Channel 类型—渠道名称、类型、图标类型定义见 src/modules/channel/types.ts

5.8 实用工具 ​

aiConversations ​

AI 对话会话。

字段类型描述备注
titlestring会话标题—
modelstring使用的模型—

aiMessages ​

AI 对话消息。

字段类型描述备注
conversationIdstring关联对话 ID—
rolestring角色:user / ai—
contentstring消息内容—
statusstring消息状态—
errorMsgstring错误信息可选

passwordEntries ​

密码管理。

字段类型描述备注
titlestring条目标题—
usernamestring用户名—
passwordstring密码—
urlstring关联网址—
notestring备注—
tagsstring[]标签—

docItems ​

证件管理。

字段类型描述备注
namestring证件名称—
typestring证件类型—
numberstring证件号码—
expireDatenumber到期日—
frontImagestring证件照片—
notestring备注—

packageTracking ​

快递追踪。

字段类型描述备注
numberstring快递单号—
companystring快递公司—
statusstring物流状态—
descstring物流描述—

items ​

物品库存。

字段类型描述备注
Item 类型—物品名称、分类、购买日期类型定义见 src/modules/inventory/types.ts

索引:category、purchaseDate

warrantyItems ​

产品保修。

字段类型描述备注
namestring产品名称—
categorystring分类—
purchaseDatenumber购买日期—
warrantyPeriodnumber保修期(月)—
expireDatenumber保修到期日—
notestring备注—

repairRecords ​

维修记录。

字段类型描述备注
warrantyIdstring关联保修 ID—
statusstring维修状态—
descriptionstring故障描述—
reportDatenumber送修日期—
completeDatenumber完成日期可选
notestring备注—

carVehicles ​

车辆管理。

字段类型描述备注
vehicles{id, name, plate, brand, model, year, mileage, insuranceDate, inspectionDate, maintenance}[]车辆列表每辆车含保险/年检/保养信息

movieItems ​

观影记录。

字段类型描述备注
titlestring影片标题—
yearstring年份—
ratingnumber评分—
statusstring观看状态—
notestring备注—

birthdayItems ​

纪念日。

字段类型描述备注
namestring名称—
datestring日期—
typestring类型—
lunarboolean是否农历—
notestring备注—

coupons ​

优惠卡券。

字段类型描述备注
namestring卡券名称—
codestring券码—
discountstring折扣信息—
expireDatenumber到期日—
usedboolean是否已使用—

addresses ​

地址管理。

字段类型描述备注
namestring收件人—
phonestring电话—
provincestring省—
citystring市—
districtstring区—
detailstring详细地址—
tagstring标签如 家、公司

itemLendRecords ​

物品借出。

字段类型描述备注
itemstring物品名称—
personstring借出对象—
datestring借出日期—
returnDatestring归还日期可选
returnedboolean是否已归还—

itemBorrowRecords ​

物品借入。

字段类型描述备注
itemstring物品名称—
personstring借入来源—
datestring借入日期—
returnDatestring归还日期可选
returnedboolean是否已归还—

5.9 辅助与历史 ​

scheduleEvents ​

日程事件。

字段类型描述备注
titlestring事件标题—
descriptionstring事件描述可选
startTimenumber开始时间戳—
endTimenumber结束时间戳—
allDayboolean是否全天—
colorstring颜色—
locationunknown地点可选
repeatunknown重复规则可选

countdownRecords ​

倒计时。

字段类型描述备注
namestring倒计时名称—
datenumber目标日期时间戳—
typestring类型—
repeatboolean是否每年重复—

subscriptionRecords ​

订阅记录。

字段类型描述备注
namestring订阅名称—
amountnumber金额—
cyclestring周期如 monthly、yearly
nextDatenumber下次扣费日期—
categorystring分类—

readerBooks ​

阅读书目。

字段类型描述备注
titlestring书名—
authorstring作者—
chapterIds{title: string, isRead: boolean}[]章节列表含阅读状态
chapterCountnumber总章节数—

customPages ​

自定义页面定义。

字段类型描述备注
namestring页面名称—
iconstring图标—
fieldsunknown[]自定义字段配置—

customPageRecords ​

自定义页面数据。

字段类型描述备注
pageIdstring关联页面 ID—
dataRecord<string, unknown>页面数据键值对

weatherRecords ​

天气记录。

字段类型描述备注
citystring城市名称—
dataunknown天气数据JSON
datestring日期—

weatherFavorites ​

天气收藏。

字段类型描述备注
citystring城市名称—
codestring城市代码—

clipboardItems ​

剪贴板。

字段类型描述备注
textstring剪贴内容—
typestring内容类型—

convertHistory ​

单位转换历史。

字段类型描述备注
fromstring源单位—
tostring目标单位—
amountnumber源数值—
resultnumber转换结果—
datestring日期—

exchangeHistory ​

汇率换算历史。

字段类型描述备注
fromstring源货币—
tostring目标货币—
ratenumber汇率—
datestring日期—

recentSearches ​

最近搜索。

字段类型描述备注
keywordstring搜索关键词—
datestring搜索日期—

5.10 搜索、历史与关系 ​

magicHistory ​

AI Magic 历史。

字段类型描述备注
promptstring用户输入—
resultstringAI 输出—
typestring操作类型—

translateHistory ​

翻译历史。

字段类型描述备注
fromstring源语言—
tostring目标语言—
textstring原文—
resultstring译文—

calcHistory ​

计算器历史。

字段类型描述备注
expressionstring计算表达式—
resultstring计算结果—

entityRelations ​

跨模块实体关系。

字段类型描述备注
EntityRelation 类型—源实体、目标实体、关系类型类型定义见 src/types/entity-relation.ts

6. 索引设计 ​

表索引字段用途
tasksstatus, dueDate, priority, categoryId, createdAt按状态/日期/优先级筛选任务列表
calendarEventsstartTime, endTime, calendarId按时间和日历查询事件
habitscategoryId按分类筛选习惯
habitRecords[habitId+date] 复合, date查询某习惯打卡记录 / 某日全部打卡
notesnotebookId, tags, createdAt按笔记本/标签/时间查笔记
transactionsdate, type, category按时间/类型/分类统计收支
healthRecords[type+date] 复合, date按健康类型和时间范围查询
itemscategory, purchaseDate按分类/购买日期查库存
settingskey (唯一)按键名快速定位配置
featurescatKey按分类列出功能模块
syncQueuetableName, syncStatus按表名/状态查询待同步项
dietRecordsdate按日期查饮食
waterRecordsdate按日期查饮水
moodRecordsdate按日期查心情
diaryEntriesdate按日期查日记
trajectoryRecordsdate按日期查轨迹

7. 数据迁移策略 ​

Dexie Schema 自动迁移 (H5) ​

每次应用启动时,DexieStore 计算当前 TABLE_NAMES + INDEXES 的稳定哈希值,与 localStorage 中保存的上次哈希比对。若不一致,自动删除旧数据库并按新 schema 重建。开发者只需修改 schema.ts,无需手动管理版本号。

Legacy 数据迁移 (v1 → v2) ​

首次启动时检测旧的加密数据格式(uni.storage 中 lifeos_{tableName} 键值对),若存在则提示用户输入 v1 密码解密数据、映射到 BaseEntity 格式、批量写入新引擎。迁移完成后写入标记 lifeos_migrated_v2。迁移过程中单表失败不影响其他表导入,旧数据保留不删除。