在sqlite3中创建一些用于本地化Web界面的表时,我要求最好的实践
在我的第一个意图中,我想创建一个包含不同语言的表,另一个用于Messeage Code和Entries。
tblLanguage
+------------+-------------+---------+
| idLangCode | txtLangName | txtCode |
+------------+-------------+---------+
| 1 | English | en |
| 2 | German | de |
| 3 | French | fr |
| 4 | Spanish | es |
| 5 | Chinese | zh |
+------------+-------------+---------+
tblMessageText
+----+-------+--------------------------+------------+
| Id | Code | Message | LanguageID |
+----+-------+--------------------------+------------+
| 1 | 20500 | Set Point changed | 1 |
| 2 | 20500 | Sollwert geändert | 2 |
| 3 | 20500 | Punto de ajuste cambiado | 5 |
+----+-------+--------------------------+------------+
所以在第二个表中,我会有几行具有相同的消息代码但是有不同的语言文本。
另一种可能性是只有一个表,每个消息代码只有一行,但每种语言都有一列。
tblMessageTextMulti
+----+-------+-------------------+-------------------+--------------------------+
| id | Code | txtMessageText_EN | txtMessageText_DE | txtMessageText_ES |
+----+-------+-------------------+-------------------+--------------------------+
| 1 | 20500 | Set Point changed | Sollwert geändert | Punto de ajuste cambiado |
+----+-------+-------------------+-------------------+--------------------------+
我的团队更喜欢第二个解决方案,只有一个表,因为每个消息代码只有一个条目,并且您可以并排查看所有语言文本。
我喜欢的第一个解决方案是,我可以动态地在php中查询langugage:
$query = 'SELECT * FROM qryInfoMessage WHERE idLangCode=' .$Language;
对于带有一个表的第二个解决方案,我无法将查询本身存储在数据库中,因为我必须在动态中更改查询中的列名。所以我必须把它放在php中。
$query = 'SELECT Code, txtMessageText_EN FROM tblMessageTextMulti;
我在这里不显示的是我的查询要复杂得多,包括字符串替换和日期时间转换。
除此之外,此解决方案的优点和缺点是什么。哪一个应该更加性能,什么是最佳实践?