将没有模式的文件加载到数据库

时间:2012-09-28 17:26:59

标签: database-design file-upload batch-file

我正在重新设计一个数据库,对于我想要替换的其中一种方法,我真的很不舒服。

从* .csv文件加载了大量数据,这些文件在不同时间没有定义的格式。该数量与不同的客户有关

因此,方法是为每个新客户创建一个表,并使其不断加载。问题是不断为每个客户创建新表,它们不匹配,难以管理和查询。

我已经考虑过创建一个包含所有数据和一些列的表来控制它们是哪个客户/表,但我仍然认为这可能会创建一个更难管理的太大表或者因大小而放慢。

在加载非常规格式的文件时,是否还有其他方法可能会丢失?非常规,我的意思是每个文件可以有不同的列(数量和格式)。

1 个答案:

答案 0 :(得分:2)

这是一个应用程序,我将使用数据库来管理* .csv文件,但我不会将* .csv文件放在数据库中。我和照片数据库做过类似的事情。

基本上,我会有一个表来管理* .csv文件。

CSV Files
---------
File ID
Customer ID
Template location on disk
CSV file location on disk

文件ID是一个自动递增的整数。 Customer ID是一个指向Customer表的整数。

磁盘上的模板位置是指向磁盘上模板位置的String。该模板是一个平面文件,按列顺序列出相应CSV文件中的列。模板文件的格式由您决定,但您的CSV引擎必须处理它。此模板是为没有列标题的CSV文件手动创建的,可以通过编程方式为包含列标题的CSV文件创建。

磁盘上的CSV文件位置是指向磁盘上CSV文件位置的字符串。

您可以在此表中包含其他重要列,例如CSV文件接收时间戳。我已经离开这些字段以使解释更简单。

对于要查询的每个CSV文件,您将从数据库中读取CSV文件行。然后你的CSV引擎会:

  • 阅读模板
  • 处理CSV文件
  • 返回所需的结果,如果此模板不包含所需的列,则返回null。

数据库将维护磁盘上模板和* .csv文件的索引。 CSV引擎将处理模板和* .csv文件,并返回所需信息。