Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在sql中使用行或列是否更有效?_Mysql_Sql_Database_Performance_Normalization - Fatal编程技术网

Mysql 在sql中使用行或列是否更有效?

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等)* 选

如果我必须保存许多相关的字符串,这些字符串可能被划分为不同的语言:最好的方法是什么

我想我有以下几种选择。选项1和3是我最清楚的解决方案。它们有更多的列,但会导致更少的行

选项2和4是最灵活的选项(我可以在不更改数据库的情况下动态添加新字符串)。它们只有三列,但会产生许多行

选项5将产生许多表格

选项1:

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相比,这没有那么规范化,但使用起来非常容易。我们已经建立了这样的数据库翻译。在开发代码时,我们创建字符串资源,并用英文填写