我需要将CSV数据存储在Oracle数据库中,以便以后通过动态查询脚本进行检索。需要存储数据,以便可以使用SQL查询CSV数据的任何列,而性能是关键(某些CSV文件为100k +行)。
事先不知道CSV文件的内容(列数,标题,数据类型),并且系统需要能够处理多个文件结构(已添加到配置文件中,因此系统知道如何读取它们) ,由不了解SQL的人创建)。
为了避免使用EAV模型,我当前的解决方案是每次将新CSV结构添加到配置文件时,让我的代码创建新表。我很好奇,是否有更好的方法来实现自己的目标。我不是特别喜欢让我的代码在运行时在生产环境中创建新表。
该系统以常规方式编写,以防万一。
最佳答案
我倾向于采用您当前的解决方案,该解决方案是每种类型的单独表格。无论如何,我最喜欢将数据存储在具有明确定义类型的明确定义表中。
EAV(实体-属性-值)解决方案也是可行的。拥有10万行数据时,除非您有很多表,否则EAV解决方案应能表现良好。缺点是列的类型。无需进行大量额外工作,您几乎就只能将字符串用于所有值。
Oracle确实提供了另一种可能性,这是XML解决方案。这可以为您提供动态列名的灵活性,以及不必为每个字段定义单独的表的“简单性”。您可以在文档here中阅读有关它的更多信息。