词典应用SQL数据库设计求助:实现词条定义间关联查询
词典应用SQL数据库设计方案
核心表结构设计
1. 词条表 (entries)
存储所有单词、句子类型的词条,是核心基础表:
CREATE TABLE entries ( entry_id INT PRIMARY KEY AUTO_INCREMENT, content VARCHAR(255) NOT NULL UNIQUE, -- 词条内容(如"Foo"、"Bar"、"苹果手机") type ENUM('word', 'sentence') NOT NULL -- 区分词条类型 );
entry_id:唯一标识每个词条,作为关联的主键content:词条的具体内容,加UNIQUE避免重复词条type:标记词条是单词还是句子,方便后续分类处理
2. 定义表 (definitions)
存储每个词条的所有定义,与词条表形成一对多关联:
CREATE TABLE definitions ( definition_id INT PRIMARY KEY AUTO_INCREMENT, entry_id INT NOT NULL, content TEXT NOT NULL, -- 定义内容(如"Foo是XX,包含Bar...") FOREIGN KEY (entry_id) REFERENCES entries(entry_id) ON DELETE CASCADE );
definition_id:定义的唯一IDentry_id:关联所属的词条ID,删除词条时自动删除对应的定义
3. 词条引用表 (entry_references)
记录定义内容中引用的其他词条,解决“查询Foo定义时获取Bar的ID”的需求:
CREATE TABLE entry_references ( reference_id INT PRIMARY KEY AUTO_INCREMENT, definition_id INT NOT NULL, referenced_entry_id INT NOT NULL, FOREIGN KEY (definition_id) REFERENCES definitions(definition_id) ON DELETE CASCADE, FOREIGN KEY (referenced_entry_id) REFERENCES entries(entry_id) ON DELETE CASCADE );
definition_id:关联引用所在的定义IDreferenced_entry_id:关联被引用的词条ID(如Bar的entry_id)
业务逻辑实现
1. 添加词条与定义
- 先将词条内容存入
entries表,获取对应的entry_id - 添加该词条的定义到
definitions表,获取definition_id - 解析定义内容,提取其中已存在的词条(比如从Foo的定义里识别出Bar),将
definition_id和Bar的entry_id插入entry_references表
2. 查询词条定义及引用关系
要查询Foo的定义并获取其中引用的Bar的ID,用关联查询:
SELECT d.content AS definition_content, er.referenced_entry_id, e.content AS referenced_entry_content FROM entries main_e JOIN definitions d ON main_e.entry_id = d.entry_id LEFT JOIN entry_references er ON d.definition_id = er.definition_id LEFT JOIN entries e ON er.referenced_entry_id = e.entry_id WHERE main_e.content = 'Foo';
执行后可同时拿到Foo的定义内容,以及定义里引用的所有词条的ID和内容,前端直接用referenced_entry_id做跳转链接即可。
3. 多字词条处理
多字词条(如"苹果手机")的处理逻辑和单字词条完全一致:
- 添加时将完整的多字词条内容存入
entries表 - 解析定义内容时,匹配完整的多字词条内容而非拆分单个字,将对应的
entry_id存入entry_references表
内容的提问来源于stack exchange,提问作者SandStone
相关产品推荐
相关产品推荐

