我正在开发支持阿拉伯语和英语的Android应用程序,但我仍然对数据库设计感到困惑:
我遵循的方法是
例如,为了实现(帮助),我创建了以下表格:
Language (int id, text Code)
Help (int id)
Help_translation(int id, int Help_id, int Language_id, text Question, text Answer)
我已经阅读了这么多时间的解决方案,但我仍然不知道为什么我们为(帮助)设置一个单独的表,什么都不做!
我的方法有问题吗?
答案 0 :(得分:0)
从表面上看,语言表将在系统中出现一次。我建议使用基于ISO国家代码(ISO 3166)和ISO语言代码(ISO 639-2)的语言和区域的'll_tt'表示法。因此,英国英语可能为en_gb
,美国英语为en_us
,沙特阿拉伯阿拉伯语为ar_sa
,埃及阿拉伯语为ar_eg
。这可能比您目前需要的更强大,但为您提供了未来的方向。
因此,语言表可能包含列:
id
整数(自动增量)主键。code
char(5) - Unique。您设计中的帮助表仅用于“文档”目的。它记录了应用程序可以使用的有效帮助号码。该表的更完整版本可能包含有关消息的信息:在应用程序中使用它的位置;引入了哪个版本;它变得过时的版本(或者可能不是 - 我们有国际化的消息文件,必须在大约10年的时间内用于发布);与版本相关的日期 - 或日期而不是版本;和“翻译员注意事项”(如果需要任何特殊指导原则,如何翻译信息的准则)。
帮助表的简约版本只包含帮助ID号:
id
整数(自动增量)。主键。 Help_Translation表存储应用程序将显示的字符串。 id
列在此处具有最小值;我会省略它(但如果你愿意,你可以保留它)。 Help_ID
列是Help表的外键引用; Language_ID
列是Language表的外键引用。对于您选择的应用程序,每个帮助项目似乎都有问题和答案。
因此,Help_Translation表包含以下列:
id
整数(自动增量,可选,不确定何时使用)。Help_ID
整数 - 外键引用帮助(ID)。Language_ID
整数 - 外键引用语言(ID)。Question
text - 给定Help_ID的适当语言的问题。Answer
text - 给定Help_ID的相应语言的问题答案。Help_ID
和Language_ID
。另一种设计只包含一个带有“消息ID”和“语言ID”的翻译表以及翻译后的字符串(消息ID和语言ID上的主键)。将有一个消息表,标识有效的消息ID以及先前类型大纲的支持数据。这可能包括当没有特定语言/领域的消息的翻译版本时要使用的默认消息(未翻译)(或者您可以组成更复杂的方案来处理丢失的消息,以便在请求阿拉伯语但翻译时比方说,利比亚(LY)不完整,它会回到ar_sa
,然后再回到en_gb
)。然后,您的帮助表可能包含一个帮助ID,以及两个消息ID值,一个用于问题,另一个用于答案。这种方案的优点是所有翻译的消息都在一个表中。
毫无疑问,其他方案可以设计出来。