sqlite3:创建包含多行或一个包含更多列

时间:2017-05-16 06:49:51

标签: sql database sqlite

在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; 

我在这里不显示的是我的查询要复杂得多,包括字符串替换和日期时间转换。

除此之外,此解决方案的优点和缺点是什么。哪一个应该更加性能,什么是最佳实践?

0 个答案:

没有答案