我需要为多语言字典设计数据库。
我看了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
),然后是该单词的所有同义词。我错过了什么吗?在这种情况下,有更好的组织数据库的方法吗?请分享您对此问题的看法。
目前,我不知道如何处理要求的第2点。
感谢您的时间和知识。
答案 0 :(得分:3)
让我们采用不同的方法。您的示例显示“cat”的6个单词(包括“cat”)。我们称之为concept
数字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)
);
这涵盖了同义词和翻译。