Как импортировать эти почтовые индексы в нормализованную таблицу? - PullRequest
2 голосов
/ 01 февраля 2011

У меня есть 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 ]

3 голосов
/ 01 февраля 2011

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

1 голос
/ 05 февраля 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...