实际上,我对于在以下情况下如何更好地管理表创建感到困惑,
假设我有一个名为descriptions
的表和诸如items
,types
,choices
之类的表
item
中的每个items
或type
中的types
中的choice
或choices
中的description
/ p>
假设表items
types
和choices
具有以下表结构(每个表都有特定的列)
+----+------+-------+
| ID | NAME | PRICE |
+----+------+-------+
| 1 | CAR | 5 |
+----+------+-------+
| 2 | BUS | 10 |
+----+------+-------+
和表descriptions
具有以下内容:
+----+-------+---------+---------+
| ID | DESC | DESC_EN | DESC_RU |
+----+-------+---------+---------+
| 1 | CIAO | HELLO | ПРИВЕТ | // This description have to belong to items
+----+-------+---------+---------+
| 2 | PIZZA | PIZZA | ПИЦЦА | // This description have to belong to types
+----+-------+---------+---------+
因此,在这一点上,我的疑问是,我应该在descriptions
中创建3列还是为items
types
和choices
创建3个外键,还是应该创建3个列?单独的表格以获取每个表格的说明?
答案 0 :(得分:2)
翻译问题的另一种解决方案是创建一个表,其中每个id
,language
和description
都有一行。
这很方便,特别是在添加新语言时。对于一种新语言,除了在某些表中添加行之外,数据库中不需要进行任何更改。
另一个优点是,单个表实际上可以容纳多个不同表的翻译,因此所有翻译都放在一个位置。这样可以简化它们的最新状态,并确保整个应用程序的一致性。
一个缺点是翻译列只有一个排序规则。这使得跨语言自定义排序顺序(有时是比较)变得棘手。这是否是一个问题,还取决于您为应用程序设想的语言。某些语言(例如阿拉伯语和希伯来语)是从右到左书写的,这可能会带来其他并发症。