平面文件作为输入 - MySQL最佳实践

时间:2017-11-11 18:43:45

标签: mysql csv relational-database normalization

我每天收到一个平面文件(CSV),其内容被导入我的数据库(而不是通过网络表单,POS等输入数据)。记录中有40个字段,我有600,000个唯一记录。

到目前为止,我还没有看到有必要将其作为一个关系型数据库,尽管肯定会有一些规范化会使它更有效率;重复产品,商店,客户,经销商等。

如果我从头开始并以某种方式逐步输入数据,我就知道如何做到这一切(我所经历过的每一种资源都覆盖了它,但当你有大量的数据已经并且需要使其成为关系数据。随着CVS每天都在进行,我不太确定在数据库设置后如何导入数据。如果我将这40个字段分成5个表,那么我是否必须以相同的方式拆分每日文件并一次导入一个?外键会以这种方式更新吗?

如果有人能把我推向正确的方向,我会自己去做更多的事情。

如果您遇到同一个项目,您将如何创建这样的数据库并执行每日更新?

谢谢!

1 个答案:

答案 0 :(得分:0)

独立于您现在拥有的数据库结构(CSV结构和数据)。例如。组织你的表格以满足你未来的需求,思考和定义它们之间的关系,并应用适当的索引。

作为第二步 - 在我看来是不可避免的,用你自己的编程语言编写一个小程序。它应该能够

  • 主要从(CSV)文件中读取记录/行,
  • 验证/清理提取的数据
  • 根据需要将数据导入/保存在对应的数据库表中。我认为,“根据需要”可能会出现多种因素,这些因素可能会意外地影响您的第一个数据库结构决策。例如,需要一些时态表。此外,您应该受益于触发器和存储过程给您的优势。
  • 正确处理导入过程中引发的错误和异常。例如,由于最终的“重复密钥”问题 - 因为文件中的数据可能容易出错,所以某些记录无法在某一天导入。这并不意味着进口应该破产。阅读记录,尝试保存。如果出现问题,请处理它(将该行复制到另一个文件中,或将其保存在特殊表中,以便以后进行编辑/修改并重新导入),然后让程序按照下一条记录的步骤进行操作。
  • 正确记录所有(主要)操作并维护读取和有问题记录的计数器。
  • 自动复制每个日常文件 - 导入后 - 在备份目录中,直到不再需要它为止。
  • 最终通过电子邮件向您发出有关操作状态的信号。

第三步是找到一个自动化整个周期的解决方案。例如,要找到一个任务/ cron-jobs经理,每天一次,甚至两次启动你的程序,而不必手动完成。

关于根据您的数据库结构将文件拆分为不同的文件:没有必要,例如这将是一个冗余步骤,因为您的程序应该设法读取文件并相应地处理数据导入。

截至程序类型:它应该是一个Web解决方案,以便您可以随时访问和修改它。

祝你好运。