RDBMS 将 table 关系 OneToMany 更改为 ManyToMany。 SQL 脚本

RDBMS change table relation OneToMany to ManyToMany. SQL script

我用postgresql。在 db 我有重要的元素:

|---------|    |------------|
| account |    | calendar   |
|---------|    |------------|
| id      |1--*| account_id |
|---------|    | id         |
               |------------|

这部分必须是ManyToMany关系:

|---------|    |------------------|     |----------|
| account |    | account_calendar |     | calendar |
|---------|    |------------------|     |----------|
| id      |1--*| account_id       |  |-1| id       |
|---------|    | calendar_id      |*-|  |----------|
               |------------------|

我提供了更新脚本:

CREATE TABLE account_calendar_relation (
  account_id     BIGINT REFERENCES account_table,
  calendar_id    BIGINT REFERENCES calendar
);

ALTER TABLE calendar
DROP CONSTRAINT calendar_account_id_fkey,
DROP COLUMN account_id;

此脚本正确更改了 db-schema 结构,但丢失了重要信息(现有数据的日历和帐户之间的映射)。

如何通过保存 calendars 和 accounts 之间的现有映射来改进我的迁移脚本?

数据示例

对于输入数据:

account | id
          1
          2

calendar | id | account_id
           1  | 1
           2  | 1

预期结果:

account | id
          1
          2

calendar | id
           1 
           2 
account_calendar | account_id | calendar_id
                   1          | 1
                   1          | 2

但在实际结果中 account_calendar table 是空的(因为没有动态填充)。

如何通过保存日历和帐户之间的现有映射来改进您的迁移脚本?

您需要在 table 创建查询之后和更改 table 查询之前插入查询。

CREATE TABLE account_calendar_relation 之后和 ALTER TABLE calendar 之前将以下 SQL 插入迁移脚本:

INSERT INTO account_calendar_relation(account_id,calendar_id)
SELECT account_id,id FROM calendar;