我将开始研究中型应用程序,我正在计划它的数据库设计.
我不确定的一件事是这个.
我将有许多表需要国际化,例如:“membership_options,gender_options,language_options等”
这些表中的每一个都将共享常见的i18n字段,例如:
“Title,alternative_Title,short_description,description”
在您看来哪种方式最好?
有一个i18n表,每个表需要它们具有相同的字段吗?
或做类似的事情:
Membership table Gender table---------------- --------------ID | created_at ID | created_at1 - 22.03.2001 1 - 14.08.20022 - 22.03.2001 2 - 14.08.2002General translation table-------------------------record_ID | table_name | string_name | alternative_Title| .... |ID_language 1 - membership regular null 1 (english) 1 - membership normale null 2 (italian) 1 - gender man null 1(english) 1 -gender uomo null 2(italian)
这会避免我重复这样的事情:
membership_translation table-----------------------------membership_ID | name | alternative_Title | ID_lang1 regular null 11 normale null 2gender_translation table-----------------------------gender_ID | name | alternative_Title | ID_lang1 man null 11 uomo null 2
等等,所以我可能会减少数据库表的数量,但我不确定性能.我不是一个数据库设计师,所以请告诉我.最佳答案我见过这种方式最常见的方法是使用两个表,membership和membership _ml,其中一个存储基值,ml表存储本地化的字符串.这与您的第二个选项类似.我认为这样的大多数系统都是这样制作的,因为它们的设计并没有考虑到国际化,因此额外的_ml表格会在之后“加入”.
我认为更好的选择类似于你的第一个选择,但有点不同.您将拥有一个用于存储所有翻译的中央表,但不是将表名和字段名放在那里,而是使用标记和中央“内容”表来存储所有翻译.这样,如果需要,您可以在基表中的标记和Content表中的翻译之间强制执行某种RI.
我实际上asked a question关于这个事情,所以你可以看看更多的信息(而不是在这里重新设计模式示例). 总结
以上是内存溢出为你收集整理的具有国际化的MySQL数据库设计全部内容,希望文章能够帮你解决具有国际化的MySQL数据库设计所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)