Как импортировать эти почтовые индексы в нормализованную таблицу?

У меня есть CSV с некоторыми данными, которые выглядят так:

A0A0A0,48.5674500000,-54.8432250000,Gander,NL
A0A1A0,47.0073470000,-52.9589210000,Aquaforte,NL
A0A1B0,47.3622800000,-53.2939930000,Avondale,NL

Но моя база данных нормализована так, что города и провинции находятся в отдельных таблицах, каждая со своим столбцом идентификаторов.

Итак, как проще всего импортировать этот файл в 3 отдельные таблицы и правильно связать внешние ключи?


Чтобы быть более понятным, таблицы

cities (id, name, province_id)
provinces (id, code, name, country_id)
postal_codes (id, code, city_id)
countries (id, code, name)

2 ответа

Решение

Использование COPY импортировать CSV во временную таблицу. Чем использовать некоторые INSERT INTO ... SELECT ... FROM ... сбросить данные в правильных таблицах.

... моя база данных нормализована

Похоже, что нет. Есть много проблем, но одна из них, которая озадачит вас этим вопросом, состоит в том, что, похоже, нет правильных PK, никаких уникальных ключей вообще; так что в итоге вы получите дублированные данные. Id "ключи" не мешают дублировать namesВам нужен уникальный индекс на name, Непонятно, как вы поддерживаете два города с одинаковым названием в одной провинции.

  1. Вы знаете, что вам нужно загрузить три таблицы из одной импортированной таблицы. Из-за FK, которые являются хорошей вещью, вам нужно сначала загрузить провинции, затем города, а затем почтовые индексы. Но, судя по вашему импортному файлу, именно города (или города, или населенные пункты или пригороды) ... сначала необходимо четко определить разрешение. Между Гандером и Аквафорте 360 километров и десятки населенных пунктов. Что именно представляет собой запись в файле?

  2. Это может помочь понять структуру превосходной канадской системы почтовых индексов.

  3. Затем вам нужно проверить, какой уровень детализации вы храните в БД. Видимо Города или поселки, но не пригороды, не населенные пункты. А как насчет округов или приходов? Например _0A ___ означает, что это сельская местность; поскольку вы храните города, а не округа, не муниципалитеты, вы можете их игнорировать.

Как только вы определитесь с гранулярностью или разрешением исходных данных, а также с уровнем разрешения, который вы хотите в целевых таблицах, вы можете загрузить файл импорта, скорее всего, это несколько волн на таблицу. SQL легко.

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