Mysql 在sql中使用行或列是否更有效?
如果我必须保存许多相关的字符串,这些字符串可能被划分为不同的语言:最好的方法是什么 我想我有以下几种选择。选项1和3是我最清楚的解决方案。它们有更多的列,但会导致更少的行 选项2和4是最灵活的选项(我可以在不更改数据库的情况下动态添加新字符串)。它们只有三列,但会产生许多行 选项5将产生许多表格 选项1:Mysql 在sql中使用行或列是否更有效?,mysql,sql,database,performance,normalization,Mysql,Sql,Database,Performance,Normalization,如果我必须保存许多相关的字符串,这些字符串可能被划分为不同的语言:最好的方法是什么 我想我有以下几种选择。选项1和3是我最清楚的解决方案。它们有更多的列,但会导致更少的行 选项2和4是最灵活的选项(我可以在不更改数据库的情况下动态添加新字符串)。它们只有三列,但会产生许多行 选项5将产生许多表格 选项1: id | string_1 | string_2 | string_3 | string_4 | ... | string_n | lang 选项2*(其中名称为字符串1或字符串2等)* 选
id | string_1 | string_2 | string_3 | string_4 | ... | string_n | lang
选项2*(其中名称为字符串1或字符串2等)*
选项3
id | string_1 | string_2 | string_3 | string_4 | ... | string_n
id | lang | stringid
选项4
id | lang | stringid
id | name
选项5
id | string_1 | lang
id | string_2 | lang
id | ... |lang
如果感兴趣,我将使用它存储多个视图(一行视图、两行、长描述等)的预缓存html值。不建议使用选项1和3,因为在字段名中使用语言(即数据)。如果要添加其他语言,必须更改数据库设计 不建议使用选项5,因为您最终会在表名中使用字符串标识符(即数据)。如果要添加另一个字符串,必须更改数据库设计 选择2或4可以。选项4更加规范化,因为您没有重复的字符串名称,但如果您直接在表视图中输入值,则选项2可能更易于使用
一个表中有许多行不是问题,这就是构建数据库系统的目的。不建议使用选项1和3,因为字段名中的语言(即数据)是结束的。如果要添加其他语言,必须更改数据库设计 不建议使用选项5,因为您最终会在表名中使用字符串标识符(即数据)。如果要添加另一个字符串,必须更改数据库设计 选择2或4可以。选项4更加规范化,因为您没有重复的字符串名称,但如果您直接在表视图中输入值,则选项2可能更易于使用
一个表中有很多行不是问题,这就是构建数据库系统的目的。虽然我没有专门处理多语言接口,如果这就是它的全部目的,是为了翻译,我会选择选项1,但交换了,类似的 id英语法语德语西班牙语等
因此,您基本上会有一个主列(如英语)作为始终填充的“主要”单词,然后在可用时填充其他语言列。通过这种方式,您可以根据需要不断添加任意多的“单词”,如果它们在所有不同的语言中都被填充,那么就这样吧。。。如果没有,您仍然可以使用一个“primary”值。虽然我没有专门处理多语言接口,如果这就是它的全部目的,是翻译,我会选择选项1,但交换了,类似于 id英语法语德语西班牙语等
因此,您基本上会有一个主列(如英语)作为始终填充的“主要”单词,然后在可用时填充其他语言列。通过这种方式,您可以根据需要不断添加任意多的“单词”,如果它们在所有不同的语言中都被填充,那么就这样吧。。。如果没有,您仍然可以使用“primary”值。这取决于许多其他因素。首先,可以有多少条线?有多少种语言?为了简化事情,假设其中任何一个数字大于5,那么选项1和3是不可行的 在我进一步讨论之前,您肯定应该考虑在数据库之外实现多语言功能。在PHP中,您可以使用并将翻译数据放在平面文件中。出于多种原因,这是一个更好的想法,主要原因是外部翻译人员的性能和易用性 如果必须在数据库中执行此操作,则应使用类似于以下内容的表结构:
id | string | language
一个例子是:
welcome_message | Hello, World! | english
我想你已经在选项2中描述过了。为了澄清这一点,根据不同语言和不同字符串的数量,您应该使用具有固定字段数的单个表。这取决于许多其他因素。首先,可以有多少条线?有多少种语言?为了简化事情,假设其中任何一个数字大于5,那么选项1和3是不可行的 在我进一步讨论之前,您肯定应该考虑在数据库之外实现多语言功能。在PHP中,您可以使用并将翻译数据放在平面文件中。出于多种原因,这是一个更好的想法,主要原因是外部翻译人员的性能和易用性 如果必须在数据库中执行此操作,则应使用类似于以下内容的表结构:
id | string | language
一个例子是:
welcome_message | Hello, World! | english
我想你已经在选项2中描述过了。为了澄清,根据不同语言和不同字符串的数量,您应该使用一个具有固定数量字段的单个表。 如果您只支持几种语言,您也可以考虑一种模式,其中每种语言都是自己的列:
ID EN ES FR Etc...
与选项4相比,这没有那么规范化,但使用起来非常容易。我们已经建立了这样的数据库翻译。当我们开发代码时,我们创建字符串资源来填充英文文本。后来,一个翻译器填充了他们的语言的字符串。 如果你只支持几种语言,你也可以考虑一种模式,其中每种语言都是自己的列:
ID EN ES FR Etc...
与选项4相比,这没有那么规范化,但使用起来非常容易。我们已经建立了这样的数据库翻译。在开发代码时,我们创建字符串资源,并用英文填写