2016-06-22 54 views
1

我正在做一个程序,该程序应该在丢弃后恢复数据库,但只有部分用户需要的表不会关心其他用户。我有两个阵列表。创建和填充表的顺序

  1. ,我需要生成所有表 - 表巫用户想要的,和其他女巫都与此有关表(所有图)

  2. 此表之间的所有关系 问题是创造的秩序,填写表以保持数据的一致性。

现在,我的算法是:

  1. 生成 '免费' 表不具有任何关系(如果有的话)

  2. 生成带的PrimaryKey此表只(如果有的话)

  3. 尝试使用ForeignKey生成表。

如何检查是否可以使用ForeignKeys在表中生成数据?我需要知道使用ForeignKeys生成表的顺序。如何有效地做到这一点?我正在用Java编写。

回答

1

有针对两个简单的解决方案:

  • 没有在任何你想要的顺序外键创建表,然后用alter table语句来以后添加外键。

  • 以任意顺序遍历表列表并创建所有现在可以创建的表,因为它们的引用表已经存在(您必须将它们标记为已创建的列表,并且您有第二个列表来检查所需关系)。重复该循环,直到您创建所有表(或者直到您没有在运行中创建任何表格,而不是在列表中缺少必需的表格)。你也可以用它来模拟它:如果你运行这个循环(不创建你的表,只是在你的列表中标记它),你可以检查你的用户是否选择了所有需要的表(或者根据他的选择)。

如果要插入数据量太大:

  • 添加数据你改变与第一种方法
  • 表,当你创建表
  • 添加数据添加数据之前按照与第二种方法相同的顺序使用
  • 使用set @@foreign_key_checks = 0; <insert all your data in any order>; set @@foreign_key_checks = 1;。这将允许您以任何顺序插入数据,即使参考数据尚不存在。不幸的是,当您重新启用它时(例如,如果您错过了一些数据),将不会进行最终检查,因此请谨慎使用。
+0

正是。像[这家伙](http://stackoverflow.com/q/36727300)谁据称忘记,然后foobar'd他的数据。 – Drew