java - 避免 EAV 模型但仍保持灵活性的最佳方法

标签 java sql oracle csv groovy

我需要将 CSV 数据存储在 Oracle 数据库中,以便以后通过动态查询脚本进行检索。需要存储数据,以便可以使用 SQL 查询 CSV 数据的任何列,并且性能是关键(某些 CSV 文件有 10 万行以上)。

CSV 文件的内容(列数、标题、数据类型)提前未知,系统需要能够处理多个文件结构(这些结构被添加到配置文件中,以便系统知道如何处理)供不懂 SQL 的人阅读)。

为了避免 EAV 模型,我当前的解决方案是让我的代码在每次将新的 CSV 结构添加到配置文件时创建新表。我很想知道是否有更好的方法来实现我想要做的事情。我不太喜欢让我的代码在运行时在生产环境中创建新表。

该系统是用 Groovy 编写的,以防万一。

最佳答案

我倾向于采用您当前的解决方案,即每种类型都有一个单独的表。不知何故,我最喜欢将数据存储在具有明确定义的类型的明确定义的表中。

EAV(实体-属性-值)解决方案也是可行的。对于 100k 行数据,EAV 解决方案应该表现得很好,除非您有很多表。一个缺点是列的类型。如果没有大量额外的工作,您几乎只能使用所有值的字符串。

Oracle 确实提供了另一种可能性,即 XML 解决方案。这可以为您提供动态列名称的灵活性以及不必为每个列定义单独的表的“简单性”。您可以在文档 here 中阅读更多相关信息。 .

关于java - 避免 EAV 模型但仍保持灵活性的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598550/

相关文章:

MYSQL查询十亿条记录超时问题

java - Tomcat 7管理器无法登录

sql - 通过存储过程从 SQL 导出二进制文件数据(图像)

java - 错误 : package com. google.gdata.client.appsforyourdomain.audit 不存在

sql - 使用 SELECT UNION 并从一张表中返回两列的输出

sql - 我误解了联接吗?

SQL NOT IN 语句不使用索引检索数据

php - PHP 和 Oracle 可以相互传递复杂类型吗?

java - 为什么我的 SQLite 数据库操作 "updateinformation2"没有更改我的 "name"值?

java - 为什么本地主机 :8081/share can not be open?