Рефакторинг одной таблицы Postgres в несколько таблиц

Допустим, у меня есть таблица со следующими столбцами:

id | address | city | state

Теперь предположим, что я хочу взять данные из этой таблицы и переместить их в 3 новые таблицы:

Таблица 1 («адреса»):

id | address | city_id

Таблица 2 («города»):

id | city | state_id

Таблица 3 («состояния»):

id | state

Я видел несколько ответов, связанных с CTE, изменяющими данные, но они не очень ясны, и у меня возникли проблемы с пониманием того, как я мог бы сделать что-то вроде того, что я описал выше.


person lawdybucket    schedule 21.03.2018    source источник
comment
Где именно проблема? Это должно быть решено с помощью некоторых запросов INSERT и SELECT в вашем приложении.   -  person Nico Haase    schedule 21.03.2018
comment
Может быть. Я вообще не понимаю, как это сделать. После поиска в Google еще немного похоже, что я пытаюсь нормализовать данные. На данный момент я пытаюсь найти понятное объяснение того, как на самом деле это сделать. Большая часть того, что я нахожу, — это объяснения самой концепции.   -  person lawdybucket    schedule 21.03.2018
comment
1) создать новые таблицы 2) заполнить их 3) удалить старую таблицу 4) прибыль!   -  person wildplasser    schedule 21.03.2018
comment
Не существует универсального подхода к рефакторингу, но написание кода для вашей конкретной проблемы не должно быть для вас таким уж сложным :)   -  person Nico Haase    schedule 21.03.2018
comment
@wildplasser, кажется, это не так просто. Как мне заполнить третий столбец таблицы 2 идентификаторами из таблицы 3, когда эти идентификаторы не будут существовать до тех пор, пока я не заполню таблицу 3)?   -  person lawdybucket    schedule 21.03.2018
comment
Это просто. Оба столбцаid должны быть последовательными, а другие столбцы являются для них естественным ключом. Единственная сложность заключается в том, что en.wikipedia.org/wiki/Paris_(disambiguation) , что подразумевает составной ключ для вашего table2   -  person wildplasser    schedule 21.03.2018
comment
Честно говоря, я вовсе не пытаюсь быть придурком, но, хотя вам это может показаться простым, для меня это не так. Вероятно, в вашем путешествии было время, когда оно тоже не было для вас простым. Вы случайно не знаете, где я могу увидеть пример запросов, которые дадут результат, который я ищу?   -  person lawdybucket    schedule 21.03.2018
comment
См., например, stackoverflow.com/a/37734162/905902 .   -  person wildplasser    schedule 21.03.2018