关于如何首次填充数据库的方法,我有一个一般性的问题。实际上,我正在处理R内的“原始”数据集(我已构建该数据帧是为了能够正常工作并快速提供见解),但现在我需要在关系数据库中构建和加载所有内容。
对于数据库设计,一切正常(=>概念,逻辑和3NF)。结果是一个非常“复杂”(都是相对的)数据模型,其中包含许多联结表和表中的外键。
我的问题是:现在,对我来说填充数据库最简单的方法是什么?
我的方法是从R中的“原始”数据帧开始为每个表生成一个.csv,然后在数据库中的每个表中加载它们。 是执行此操作的好方法还是您有任何更简单的方法?。另一点是,如何在填充时不与FK约束斗争?
非常感谢您的回答。我意识到这是非常“方法上的”问题,但找不到任何与教程/线程相关的问题
注意:我使用R(dplyr等)和MySQL
答案 0 :(得分:2)
严重的relational database,例如Postgres,将提供用于填充大型数据库的功能。
查找读取外部数据的命令,以将它们加载到具有匹配字段结构的表中。数据直接从操作系统的文件系统文件直接移到表中。这比使用通常的SQL INSERT
加载单个行要快得多。此类命令尚未标准化,因此您必须在特定的数据库引擎中查找专有命令。
在Postgres中,这将是COPY
命令。
寻找延迟执行外键关系规则的命令,直到加载数据为止。
在Postgres中,使用SET CONSTRAINTS … DEFERRED
在每个语句期间不检查约束,而要等到事务结束。
或者,如果您的数据库缺少此功能,则作为批量导入例程的一部分,您可以在删除约束之前先删除约束,然后在之后重新建立约束。但是请注意,这可能会影响所有其他数据库连接中的所有其他事务。如果您知道该数据库没有其他用户,那么也许这是可行的。
要考虑的其他问题,请参阅Postgres文档中的Populating a Database(是否使用Postgres)。
COPY
(用于批量导入,如上所述)maintenance_work_mem
(更改数据库引擎的内存分配)顺便说一句,您可能会发现一个数据库迁移工具,该工具有助于创建表和列,并可能有助于加载数据。考虑使用诸如Flyway或Liquibase之类的工具。