繁体   English   中英

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

[英](my)SQL database - storing different types of same value

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

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

id valueVarchar  valueDate  valueBoolean  valueInt  valueDouble

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

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

编辑:

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

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

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

从注释中可以看出,对于每个实体 ,每个属性都将单独存储其

有一个名称:它被称为实体 - 属性 - 值模型 ,或简称为EAV。

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

可以在此处找到不适当实施EAV数据库的案例研究。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM