feat: 汉字介绍待续
This commit is contained in:
@@ -57,7 +57,6 @@ CREATE TABLE chars (
|
||||
traditional VARCHAR(50) COMMENT '繁体字写法,可能有多个,用逗号分隔',
|
||||
stroke_data JSONB COMMENT '笔画数据,JSON格式,存储笔画顺序和路径信息',
|
||||
grade INT COMMENT '年级: 0-9,NULL表示未设置',
|
||||
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 分区功能
|
||||
|
||||
Reference in New Issue
Block a user