在数据库中,如何存储可以包含多种语言的文本?

时间:2014-01-27 09:01:15

标签: mysql database design-patterns database-design

我正在设计一个数据库表。让我们说它是颜色表(红色,绿色,蓝色),用户可以从中进行选择。但是当用户来自其他国家时,我想显示字段的翻译(例如,中文,红,绿,蓝)。我不确定存储这类信息的最佳和最有效的方法是什么。我想出了以下想法

+----------------------+
| Color                |
+----------------------+
| id   (PK)            |
| Language  (PK)       |
| name                 |
+----------------------+

通过将id和language作为主键,我可以存储并找到颜色的名称。

或者我可以这样做:

+----------------------+
| Color                |
+----------------------+
| id   (PK)            |
| English              |
| Chinese              |
+----------------------+

通过这种方式,我将颜色的名称存储在一个单独的列中,这样每种颜色只对应一行,这似乎更直观。

或者我在想,我不应该在数据库中存储不同语言的颜色名称,而是将它们作为String变量存储在PHP中?

我还担心表的可维护性,因为将来可能会有更多的颜色和语言添加到表中。

我想听听你的建议。谢谢!

3 个答案:

答案 0 :(得分:1)

如果以后将语言添加到表格中,请按照第一种方法进行。

+----------------------+
| Color                |
+----------------------+
| id   (PK)            |
| Language  (PK)       |
| name                 |
+----------------------+

在页面加载时,您可以检测用户的首选语言,并可以相应地进行SQL查询。

答案 1 :(得分:1)

如果您的实际模型比这更复杂,您可能需要创建一个单独的表来存储与语言相关的信息。坚持使用这个例子,如果对于每种颜色,你有(R,G,B)值,即(255,255,2555),这些值不会随着语言而变化,你可能只想让Color表成为所有与语言无关的字段,然后是一个新的表Color_Lang,它有一个外键可以着色并保存所有依赖于语言的字段。

答案 2 :(得分:0)

不是一个直接的答案,但考虑到对于颜色,你可以只显示实际的颜色而不是用于描述它的人工词。

甚至还有可用于此特定目的的开箱即用颜色选择器。