2

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

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

总的来说,我有两个想法。首先是创建一个“value”表,其中包含列:“id”、“value_int”、“value_double”、“value_varchar”等 - 以及相应的列类型。根据值的类型,记录将与相应列中的值一起保存(其余为 NULL)。

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

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

我想知道你对这个话题的看法,也许别的东西会更好。提前致谢。

编辑: 例如:

我们有三个表:

用户:[用户表] * id * 名称

FIELD:[配置文件字段表 - 其中列“类型”是字段的类型,例如 int 或 varchar) * id * 类型 * 名称

值:* id * User_id - (FK user.id) * Field_id - (FK field.id) * value

所以我们在 USER 表中的每一行都有一个用户,并且配置文件存储在 VALUE 表中。位每个配置文件字段可能具有不同的类型(FIELD 表中的列“类型”),并且基于此,我希望将此值添加到适当类型的适当列中。

4

1 回答 1

1

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

专业人士:

  • 易于阅读和过滤(没有连接,只是行上的普通 SELECT)

缺点:

  • 该行占用更多空间

因此,如果您不需要超优化,我会这样做。

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

于 2013-11-13T15:51:58.470 回答