针对这种中英文对照的分词数据,我来建议几种数据库存储方案: 1. 关系型数据库设计: ```sql -- 原文表 CREATE TABLE translations ( id SERIAL PRIMARY KEY, original_text TEXT NOT NULL, translated_text TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 分词表 CREATE TABLE segments ( id SERIAL PRIMARY KEY, translation_id INTEGER REFERENCES translations(id), english TEXT, chinese TEXT, segment_order INTEGER, -- 保持词语顺序 CONSTRAINT fk_translation FOREIGN KEY (translation_id) REFERENCES translations(id) ON DELETE CASCADE ); -- 索引 CREATE INDEX idx_translation_id ON segments(translation_id); CREATE INDEX idx_english ON segments(english); CREATE INDEX idx_chinese ON segments(chinese); ``` 1. MongoDB (文档型数据库) 方案: ```javascript { _id: ObjectId(), original: "如果我们真的将专注力视为脑力工作者最弥足珍贵的资源...", translation: "If we truly regard focus as the most precious resource...", segments: [ { english: "If", chinese: "如果", order: 0 }, { english: "we", chinese: "我们", order: 1 }, // ...其他分词 ], createdAt: ISODate() } ``` 1. 使用Redis作为缓存层: ```python # 使用 Hash 结构存储 translation_key = f"translation:{translation_id}" redis.hset(translation_key, mapping={ "original": original_text, "translation": translated_text }) # 使用 List 存储分词 segments_key = f"segments:{translation_id}" for segment in segments: redis.rpush(segments_key, json.dumps(segment)) ``` 建议: 1. 如果需要关系完整性和复杂查询: - 使用关系型数据库(PostgreSQL/MySQL) - 便于进行分词统计、搜索等操作 - 支持事务和数据一致性 2. 如果需要灵活的数据结构和快速读写: - 使用MongoDB - 数据结构可以灵活变化 - 适合存储大量文本数据 - 方便进行文档级别的操作 3. 混合使用方案: - PostgreSQL存储核心数据 - MongoDB存储分词详情 - Redis做热点数据缓存 实现建议: ```python # PostgreSQL 实现示例 def save_translation(data): with connection.cursor() as cursor: # 插入原文记录 cursor.execute(""" INSERT INTO translations (original_text, translated_text) VALUES (%s, %s) RETURNING id """, (data['original'], data['translation'])) translation_id = cursor.fetchone()[0] # 批量插入分词 segments_data = [( translation_id, segment['english'], segment['chinese'], idx ) for idx, segment in enumerate(data['segments'])] cursor.executemany(""" INSERT INTO segments (translation_id, english, chinese, segment_order) VALUES (%s, %s, %s, %s) """, segments_data) ``` 这样的设计考虑了: 1. 数据完整性和关联关系 2. 查询效率(通过索引优化) 3. 分词顺序的保持 4. 未来可能的扩展需求(如添加用户系统、版本控制等) 你觉得哪种方案更适合你的需求?我可以针对具体方案提供更详细的建议。