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

Скажем, у меня есть таблица со следующими столбцами:

id | address | city | state

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

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

id | address | city_id

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

id | city | state_id

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

id | state

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

Где именно проблема? Это должно быть решено с помощью некоторых запросов INSERT и SELECT в вашем приложении.

Nico Haase 21.03.2018 12:31

Может быть. Я вообще не понимаю, как это сделать. После того, как я погуглил еще немного, похоже, что я пытаюсь нормализовать данные. На данный момент я пытаюсь найти понятное объяснение того, как на самом деле это сделать. Большая часть того, что я нахожу, - это объяснения самой концепции.

lawdybucket 21.03.2018 12:57

1) создать новые таблицы 2) заполнить их 3) отбросить старую таблицу 4) прибыль!

wildplasser 21.03.2018 13:11

Нет универсального подхода к рефакторингу, но написание кода для вашей конкретной проблемы не должно быть для вас таким сложным :)

Nico Haase 21.03.2018 13:27

@wildplasser, похоже, это не так просто. Как мне заполнить третий столбец таблицы 2 идентификаторами из таблицы 3, если эти идентификаторы появятся позже (когда я заполню таблицу 3)?

lawdybucket 21.03.2018 13:28

Это просто: оба столбца id должны быть последовательными, а другой столбец (и) являются естественным ключом для них. Единственная сложность - en.wikipedia.org/wiki/Paris_(disambiguation), что подразумевает составной ключ для вашего table2.

wildplasser 21.03.2018 14:11

Честно говоря, я совсем не пытаюсь быть придурком, но, хотя вам это может показаться простым, для меня это непросто. Вероятно, в вашем путешествии было время, когда для вас это тоже было непросто. Вы случайно не знаете, где я могу увидеть пример запросов, которые дадут результат, который я ищу?

lawdybucket 21.03.2018 14:21

См., Например, stackoverflow.com/a/37734162/905902.

wildplasser 21.03.2018 14:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
105
0

Другие вопросы по теме