feat: 汉字介绍待续

This commit is contained in:
R524809
2026-02-09 13:30:43 +08:00
parent b13ab6f9fb
commit 3569961115
10 changed files with 36260 additions and 16 deletions
+59 -14
View File
@@ -57,7 +57,6 @@ CREATE TABLE chars (
traditional VARCHAR(50) COMMENT '繁体字写法,可能有多个,用逗号分隔',
stroke_data JSONB COMMENT '笔画数据,JSON格式,存储笔画顺序和路径信息',
grade INT COMMENT '年级: 0-9NULL表示未设置',
audios TEXT[] COMMENT '音频文件路径数组',
description TEXT COMMENT '描述信息',
status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active(启用), inactive(禁用)',
@@ -86,16 +85,53 @@ CREATE INDEX idx_char_fulltext ON chars USING GIN (to_tsvector('simple', char));
- `traditional`: 繁体字写法,可能有多个,用逗号分隔,如"乾幹"
- `stroke_data`: JSONB 类型,存储笔画数据,包含笔画顺序和路径信息(原 svg_data 字段)
- `grade`: 年级,0-9年级,NULL 表示未设置
- `audios`: 音频文件路径数组,存储音频文件路径
- `status`: 启用/禁用状态,支持软删除
**说明:** 音频文件已迁移至 `char_readings` 表,按音义项分别存储。
**结构代码说明:**
- 结构代码定义见 `structure_codes.json` 文件
- 常见结构代码:D0(独体结构)、D1(镶嵌结构)、B1-B4(上下结构)、H1-H3(左右结构)、R1-R6(半包围结构)等
### 3.2 汉字图片表 (char_images)
### 3.2 汉字音义项表 (char_readings)
存储汉字关联的图片信息
存储每个汉字在不同读音/含义下的信息,支持多音字、多义字。单音字一条记录,多音字/同音多义字多条记录
```sql
CREATE TABLE char_readings (
id BIGSERIAL PRIMARY KEY,
char_id BIGINT NOT NULL,
pinyin VARCHAR(20) NOT NULL COMMENT '读音,如 zhōng、zhòng',
meaning VARCHAR(200) COMMENT '义项说明,同音多义时用于区分,如"中间;中心"、"击中;符合"',
introduce TEXT NOT NULL COMMENT '该音义项下的提示语',
audio_file_ref VARCHAR(500) COMMENT '音频相对路径,与配置中的 base URL 拼接,如 audio/chars/中/zhōng.mp3',
image_file_ref VARCHAR(500) COMMENT '图片相对路径,可选,幼小低年级字才有释义图',
sort_order INT DEFAULT 0 COMMENT '排序,常用音义可放前面',
FOREIGN KEY (char_id) REFERENCES chars(id) ON DELETE CASCADE,
INDEX idx_char_id (char_id),
INDEX idx_pinyin (pinyin),
INDEX idx_char_pinyin (char_id, pinyin)
);
```
**字段说明:**
- `char_id`: 关联的汉字ID
- `pinyin`: 该音义项的读音
- `meaning`: 义项说明,同音多义时用于区分
- `introduce`: 该音义项下的提示语(如"中,中间的中")
- `audio_file_ref`: 音频相对路径,采用 relative 方案,与配置中的 base URL 拼接成完整地址
- `image_file_ref`: 图片相对路径,可选,仅部分字(如幼小低年级需掌握的字)有此字段
- `sort_order`: 排序,常用音义优先展示
**路径约定:**
- 音频、图片均使用 relative 方案,数据库仅存相对路径
- base URL 在应用配置中维护,迁移 CDN/域名时无需更新数据库
- 示例:`audio_file_ref = "audio/chars/中/zhōng.mp3"`,完整地址 = `{base_url}/{audio_file_ref}`
### 3.3 汉字图片表 (char_images)
存储汉字字形相关图片(原图、标准图等,与读音无关)。
```sql
CREATE TABLE char_images (
@@ -125,7 +161,7 @@ CREATE TABLE char_images (
- `is_primary`: 标记主图,用于列表展示
- `sort_order`: 排序字段,支持多图排序
### 3.3 汉字关联表 (char_relations)
### 3.4 汉字关联表 (char_relations)
存储汉字之间的关联关系(如形近字、同音字等)。
@@ -152,7 +188,7 @@ CREATE TABLE char_relations (
- `same_radical`: 同部首,如"中"和"串"
- `similar_structure`: 同结构,如都是左右结构
### 3.4 句子表 (sentences)
### 3.5 句子表 (sentences)
存储字词关联的例句。
@@ -170,7 +206,7 @@ CREATE TABLE sentences (
);
```
### 3.5 汉字-句子关联表 (char_sentences)
### 3.6 汉字-句子关联表 (char_sentences)
存储汉字和句子的关联关系。
@@ -189,7 +225,7 @@ CREATE TABLE char_sentences (
);
```
### 3.6 用户表 (users)
### 3.7 用户表 (users)
存储管理员用户信息。
@@ -215,7 +251,7 @@ CREATE TABLE users (
);
```
### 3.7 操作日志表 (operation_logs)
### 3.8 操作日志表 (operation_logs)
记录用户操作日志,用于审计。
@@ -335,11 +371,15 @@ CREATE TABLE word_sentences (
```
chars (汉字主表)
├── char_images (图片表) - 一对多
├── char_readings (音义项表) - 一对多,支持多音字、多义字
├── char_images (字形图片表) - 一对多
├── char_relations (汉字关联) - 自关联(多对多)
├── char_sentences (汉字-句子关联) - 多对多
└── operation_logs (操作日志) - 关联资源
char_readings (音义项表)
└── 存储 introduce、audio_file_ref、image_file_ref 等按读音/义项区分的数据
sentences (句子表)
└── char_sentences (汉字-句子关联) - 多对多
```
@@ -364,7 +404,7 @@ users (用户表)
└── operation_logs (操作日志) - 一对多
sentences (句子表)
├── character_sentences (汉字-句子关联) - 多对多
├── char_sentences (汉字-句子关联) - 多对多
└── word_sentences (词语-句子关联) - 多对多
```
@@ -386,7 +426,7 @@ sentences (句子表)
### 6.3 关联查询优化
- 外键索引:所有外键字段建立索引
- 关联表索引:character_relations、character_sentences、word_characters、word_sentences 的关联字段索引
- 关联表索引:char_readings、char_relations、char_sentences、word_characters、word_sentences 的关联字段索引
## 7. 数据迁移策略
@@ -397,15 +437,19 @@ sentences (句子表)
### 7.2 数据导入
- 支持批量导入汉字数据(参考 char_common_base.json 格式)
- 支持批量导入音义项数据(参考 char_introduce.json,需按多音/多义拆分为多条 char_readings
- 支持批量导入词语数据
- 支持 CSV/Excel 格式导入
### 7.3 数据迁移注意事项
- 从旧的 words 表迁移到 chinese_characters 表时,需要:
- 从旧的 words 表迁移到 chars 表时,需要:
-`content` 字段映射到 `char` 字段
-`svg_data` 字段重命名为 `stroke_data`
- 补充 `strokes``pinyin``radicals``frequency``structure``traditional` 字段
- 过滤出 `type = 'chinese_char'` 的数据
- 从 char_introduce.json 迁移到 char_readings 时,需要:
- 单音字:每条 JSON 对应一条 char_readings 记录
- 多音字/多义字:需人工或脚本标注拆分,每个音义项一条 char_readings 记录
## 8. 数据备份策略
@@ -428,11 +472,12 @@ sentences (句子表)
### 9.2 数据量预估
- 汉字数据:预计 8,000+ 条(通用规范汉字表)
- 音义项数据:预计 10,000~12,000 条(多音字对应多条记录)
- 词语数据:预计 10,000+ 条
- 图片数据:预计 50,000+ 条
- 关联关系:预计 100,000+ 条
### 9.3 分表策略(如需要)
- 当 chinese_characters 表数据量超过 100 万时,考虑按频率分表
- 当 chars 表数据量超过 100 万时,考虑按频率分表
- 当 chinese_words 表数据量超过 100 万时,考虑按年级分表
- 使用 PostgreSQL 分区功能