按需要在 JDBC 中创建的顺序对外键关系进行排序

Posted

技术标签:

【中文标题】按需要在 JDBC 中创建的顺序对外键关系进行排序【英文标题】:Sorting foreign key relations in the order they need to be created in JDBC 【发布时间】:2020-12-22 02:15:24 【问题描述】:

我正在为大学编写一个工具,它应该采用 mysql 数据库并将其复制到 PostgreSQL 数据库中,反之亦然。

我现在已经将关于表/列的所有相关信息读入 Java 对象,现在想开始创建我的创建语句,但是我有一个小问题。

如果一个表使用外键关系引用其他表,则需要在该表之前创建这些其他表,否则 DBMS 会抛出错误。所以我必须找到一种方法来对我的表对象进行排序,无论是在我的 Java 代码中还是通过使用巧妙的 SQL 查询。

我已经尝试在原始表中使用它们的创建顺序:

USE project;
SELECT create_time, table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'project';

但是,这只会输出精确到秒的创建时间,如果它们都是使用脚本创建的,这对我没有帮助。

这就是我存储表格的方式:

public Table(String name, Column[] columns, ArrayList<String> primaryKeys, ArrayList<String[]> foreignKeys) 
    this.name = name;
    this.columns = columns;
    this.primaryKeys = primaryKeys;
    this.foreignKeys = foreignKeys;

外键属性是一个长度为3的String-Arrays的ArrayList,包含有外键约束的列和引用它的表+列。

【问题讨论】:

【参考方案1】:

或者,您可以使用主键创建所有表。

然后,您可以使用alter table add constraint 以任意顺序将外键约束添加到表中。

【讨论】:

如果我找不到更优雅的解决方案,这可能就是我要做的。谢谢 这种方法也可能会更快。 我可能会采用这个答案的方法,但是,仅供参考,另一种方法是设置约束DEFERRABLE。请参阅这个类似的问题,How do I disable referential integrity in Postgres 8.2?。请参阅 Postgres 中的 CREATE TABLE 命令。

以上是关于按需要在 JDBC 中创建的顺序对外键关系进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按字母顺序对 TypeScript 界面键进行排序

需要按顺序对数据库表中的邮政地址进行排序

按自然顺序对字典键进行排序[重复]

按工作日顺序对带有工作日键的数组进行排序

Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序

如何在多图中按排序顺序打印键的值