简介
我需要为多语言词典设计数据库。
我查看了similar problem in SO ,但事实证明这是一个更简单的情况,并不真正适用。
要求
- 每种语言的同义词
- 每种语言中词尾不同但词根相同的单词
- 多种语言
示例
我的想法是这样的:
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/