mysql - 复杂字典的数据库设计

标签 mysql sql database dictionary database-design

简介

我需要为多语言词典设计数据库。

我查看了similar problem in SO ,但事实证明这是一个更简单的情况,并不真正适用。

要求

  1. 每种语言的同义词
  2. 每种语言中词尾不同但词根相同的单词
  3. 多种语言

示例

我的想法是这样的:

table: languages (id, name)
1, English
2, French

table: words (id, lang_id, word)
1, 1, cat
2, 1, pussy cat
3, 1, kitten
4, 1, puss
5, 2, le chat
6, 2, le felin

table: synonyms (id, word_id, word_id)
1, 1, 2
2, 1, 3
3, 1, 4
4, 5, 6

table: translations (id, word_id, word_id)
1, 1, 5
2, 2, 5
3, 3, 5
4, 4, 5
5, 1, 6
6, 2, 6
7, 3, 6
8, 4, 6

但是我在这里看到了一些问题:

  • 为了访问单词的同义词:kitten。首先需要找到“master”单词(cat),然后找到该单词的所有同义词。
  • 在我看来,另一种选择更糟糕,即存储每个单词的所有同义词关系,这是多余的,并且可能很快“失控”......

问题 1

我错过了什么吗?在这种情况下有更好的方法来组织数据库吗?请分享您对此问题的看法。

问题 2

目前我不知道如何处理第2点要求。

终于

感谢您的时间和知识。

最佳答案

让我们换一种方式来处理它。您的示例显示了“cat”的 6 个单词(包括“cat”)。我们将这个概念称为数字1。

CREATE TABLE Concepts (
    concept MEDIUMINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    description TEXT  -- such as "feline animal"
);

那么的话是:

CREATE TABLE Words (
    word_id MEDIUMINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    concept MEDIUMINT UNSIGNED NOT NULL,
    lang TINYINT UNSIGNED NOT NULL,
    word VARCHAR(111),
    INDEX(concept, lang, word),
    INDEX(lang, word)
);

这涵盖同义词和翻译。

关于mysql - 复杂字典的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121666/

相关文章:

java - 一个 DELETE 和 INSERT 相对于多个 SELECT 和一个 UPDATE 有多昂贵?

sql - 选择具有多个关系的行

mysql - 在mysql中使用 "GROUP BY"选择一些没有聚合函数的列的结果是什么

sql - 存储过程和用户​​定义函数之间的区别

c# - 连接到 PostgreSQL

database - 通过命令行插入 SQL 语句而无需重新打开与远程数据库的连接

mysql - SQL交叉查找两张表

mysql - SQL - 显示满足多个条件中的 2 个或更多条件的记录

有关(过度复杂?)模式的SQL体系结构建议

MySQL 慢查询 Lock_time = 年?