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

时间:2013-11-07 10:43:36

标签: php sql propel

我在优化数据库结构方面遇到了问题。我会尽力解释一下。

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

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

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

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

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

修改 例如:

我们有三张桌子:

USER:[用户表] * ID *姓名

FIELD:[配置文件字段表 - 列'type'是字段的类型,例如int或varchar) * ID *类型 *姓名

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

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

1 个答案:

答案 0 :(得分:1)

我们使用了第一个选项,它运行正常 - 每个类型都有一个列,另一个列可以指定类型。

PRO的:

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

CON的:

  • 该行占用更多空间

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

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