Files
bq_react/doc/项目文档/基础应用/数据库(Database).md

46 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据库
## 目录
- [功能定义](#功能定义)
- [使用示例](#使用示例)
- [时序](#时序)
- [打开并升级](#打开并升级)
## 功能定义
数据库打开名为 `local_db` 的 IndexedDB,并按 `schemaVersions` 从旧版本逐级升级。
| 入口 | 文件 | 定义 |
|---|---|---|
| `Database.open()` | `src/app/db/database.ts` | 打开数据库。同一时刻复用同一次打开 |
| `Database.reset()` | 同上 | 关闭进行中的打开,并删除 `local_db` |
| `schemaVersions` | `src/app/db/schema/index.ts` | 按版本排列的升级函数。`DB_VERSION` 等于它的长度 |
| `upgradeV1` | `src/app/db/schema/v1.ts` | 第一版。创建 `projects` 对象仓库,`keyPath` 为 `id` |
## 使用示例
本地项目仓储在读写前打开数据库。文件:`src/features/project/infra/persistence/local_project_repository.ts`。
```ts
const db = await this.database.open();
```
对象仓库不存在时,仓储关闭连接并调用 `Database.reset()`,再打开一次。
## 时序
### 打开并升级
```mermaid
sequenceDiagram
participant Database
participant schemaVersions
Database->>Database: open()
Database->>Database: connect()
Database->>schemaVersions: upgrade(oldVersion)
```
`open` 若已有进行中的连接,直接返回该连接。`onupgradeneeded` 时,`upgrade` 从 `oldVersion` 走到 `newVersion`,依次执行 `schemaVersions` 里对应的函数。版本变化导致连接关闭时,下一次 `open` 重新连接。