Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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
Php 具有不同列类型的DB表的SQL结构_Php_Sql_Propel - Fatal编程技术网

Php 具有不同列类型的DB表的SQL结构

Php 具有不同列类型的DB表的SQL结构,php,sql,propel,Php,Sql,Propel,我对数据库结构的优化有一个问题。我会尽力解释清楚的 我创建了一个项目,我们可以在其中添加不同的值​​, 但这个值在数据库中必须有不同类型的列(例如int、double、varchar)。存储不同类型的值的最佳方式是什么​​在数据库中。在这个项目中,我使用的是Propel 1.6。关键是可以使用“int”、“varchar”和其他列类型添加值,搜索表是有效的 总之,我有两个想法。第一个是创建一个“value”表,该表将包含列:“id”、“value\u int”、“value\u double”、

我对数据库结构的优化有一个问题。我会尽力解释清楚的

我创建了一个项目,我们可以在其中添加不同的值​​, 但这个值在数据库中必须有不同类型的列(例如int、double、varchar)。存储不同类型的值的最佳方式是什么​​在数据库中。在这个项目中,我使用的是Propel 1.6。关键是可以使用“int”、“varchar”和其他列类型添加值,搜索表是有效的

总之,我有两个想法。第一个是创建一个“value”表,该表将包含列:“id”、“value\u int”、“value\u double”、“value\u varchar”等,以及相应的列类型。取决于值的类型​​, 记录将与相应列中的值一起保存(其余为空)

第二种解决方案是创建单独的表,如“value\u int”、“value\u varchar”等。将有列:“id”、“value”,它们对应于“value”的相关类型(例如int、varchar等)

我必须承认,我不相信上述任何解决方案,最初我考虑的是一个表“value”,其中的列将是“text”类型,但这种解决方案可能会更糟

我想知道你对这个话题的看法,也许其他事情会更好。提前谢谢

编辑: 例如:

我们有三张桌子:

用户:[用户表] *身份证 *名字

字段:[配置文件字段表-其中列“type”是字段类型,例如int或varchar) *身份证 *类型 *名字

价值: *身份证 *用户标识-(FK User.id) *字段标识-(FK Field.id) *价值观


因此,我们在用户表中的每一行中都有一个用户,配置文件存储在值表中,基于此,我希望将此值添加到相应类型的相应列中。

我们使用了第一个选项,它工作正常-即每个类型有一个列,另一个列将指定该类型

专业人士:

  • 易于阅读和筛选(无连接,只需在行上进行简单选择)
被告:

  • 这一行占用了更多的空间
所以如果你不需要优化,我会走这条路


另一个选项是以某种方式将值序列化到NVARCHAR(MAX)字段(例如“TEXT:SampleText”或“INT:8”)。但这会使它无法很好地在数据库中搜索,例如日期或数字范围。

以规范化的方式进行搜索不是一个选项?@geomagas“规范化”是什么意思?数据库规范化?是的。每个值都在一个单独的字段中,包含其类型和全部。我想这里的问题是解释为什么要这样做。解决方案可能是设置创建键值存储,使用字符串作为值,并在希望存储整数或浮点数的类型之间转换。或者,如果您的目的是创建“可自定义数据库”对于您的用户来说,创建适当表的表生成器可能更好。但我认为我们需要更多关于您实际操作的背景知识。我会选择
独立表
解决方案。它是标准化的,因此更好。