SQL 迁移:使用外键将 table 拆分为两个 table

SQL Migrate: Split table into two tables with foreign key

如何 SQL 将以下 table 迁移到两个带有外键的拆分 table 中。

当前 table:

  编号 |姓名 |值1 |值2 | VAL3
----------------------------------
1102 |约翰 | 100 | 200 | 300
1103 |凯特 | 110 | 210 | 310

目标 tables:

  编号 |姓名 | VAL_ID ID |值1 |值2 | VAL3
--------------------------------------------
1102 |约翰 | 1 1 | 100 | 200 | 300
1103 |凯特 | 2 2 | 110 | 210 | 310

嗯。 . .

create table t1 as 
    select id, name, row_number() over (order by id) as val_id
    from t;

create table t2 as
    select t1.val_id, val1, val2, val3
    from t join
         t1
         on t.name = t1.name;

我认为没有理由在可以使用 ID 时生成 VAL_ID,这也是此用例的常见做法。

create table base_table as select id,name from src;
alter table  base_table add primary key (id);

create table values_table as select id,val1,val2,val3 from src;
alter table  values_table add primary key (id);
alter table  values_table add foreign key (id) references base_table(id);

只是为了满足OP:

create table base_table as select id,name,row_number()over(order by id) as val_id from src;
alter table  base_table add primary key (id);
alter table  base_table add unique (val_id);

create table values_table as select row_number()over(order by id) as id,val1,val2,val3 from src;
alter table  values_table add primary key (id);
alter table  values_table add foreign key (id) references base_table(val_id);