我在优化数据库结构方面遇到了问题。我会尽力解释一下。
我创建了一个项目,我们可以在其中添加不同的值,但是这些值必须在数据库中具有不同类型的列(例如,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'),并且基于此我希望将此值添加到相应类型的相应列中。
答案 0 :(得分:1)
我们使用了第一个选项,它运行正常 - 每个类型都有一个列,另一个列可以指定类型。
PRO的:
CON的:
因此,如果您不需要进行超优化,我会这样做。
另一种选择可能是以某种方式将值序列化为NVARCHAR(MAX)字段(例如“TEXT:SampleText”或“INT:8”)。但是,这将使数据库不可搜索,例如,对于日期或数字范围。