(我的)SQL数据库 - 存储不同类型的相同值

时间:2012-01-16 09:12:12

标签: mysql sql database jpa types

我需要存储不同类型的相同值。值可以表示DATE,INT,BOOLEAN,DOUBLE和任何其他类型。我想知道是否有可能不使用多个表 - 每个表用于不同的类型(我认为它会使存储的值的使用大大复杂化(主要是搜索,过滤))。当存储多个列表并且主要是NULL值时,它会是一个很大的存储和性能下降吗?

我正在考虑使用这样的示例列的表,其中只填充一个值列:

id valueVarchar  valueDate  valueBoolean  valueInt  valueDouble

如果这种方法明显错误,请赐教。

我正在使用MySQL(InnoDB)创建JSF应用程序(数据库不是大问题,必要时可以更改)和JPA。

修改

至于现在,我有一个带有一个文本值字段的表。我在服务器端将值转换为数据库或从数据库转换。因为该项目刚刚开始,现在改变模型将比未来更少痛苦,我正在考虑存在更好的方法。

3 个答案:

答案 0 :(得分:2)

如果您使用的是EclipseLink,则可以使用@TypeConverter将任何数据类型转换为String。您还可以使用两个第一列作为值,另一列作为值的类型,您可以使用@Transformation映射进行映射。

使用通用JPA,您可以使用属性访问权限通过get / set方法转换类型。

答案 1 :(得分:1)

从评论中可以看出,对于每个实体,每个属性都会单独存储

有一个名称:它被称为Entity-Attribute-Value model,或简称为EAV。

虽然有些情况下EAV是唯一适用的解决方案,但它的使用通常被认为是一种可行的替代品可用的反模式。

可以找到不恰当实施EAV数据库的案例研究here

可以使用EAV的最明显的目的之一是在关系数据库中持久保存来自OO设计的对象数据。如果您希望如何使用它,我建议您考虑Object-Relational Mapping(简称ORM)。

您可以使用eav标记在SO上找到与EAV相关的问题。

答案 2 :(得分:0)

您可以将任何内容存储为二进制值,并转换为客户端类型。但是在查询条件下很难有效地使用该值。