具有不同类型列的数据库表的 SQL 结构


SQL Structure of DB table with different types of columns

我对数据库结构的优化有问题。我会尝试准确地解释它。

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

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

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

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

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

编辑:例如:

我们有三个表:

用户: [用户表]* 编号*名字

字段

:[配置文件字段表 - 其中"类型"列是字段的类型,例如 int 或 varchar)* 编号*类型*名字

价值:* 编号* User_id - ( FK user.id )* Field_id - ( FK field.id )*价值

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

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

优点:

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

缺点:

  • 该行占用更多空间

所以如果你不需要超级优化,我会走这条路。

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