Загрузка плоского файла в реляционную базу данных с сохранением связей между записями - PullRequest
0 голосов
/ 15 декабря 2011

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

Ниже приведен упрощенный пример:

001|Morgan|Dexter
002|235 Mangrove Drive|Miami|FL
002|5570 Unknown Street|Dade City|FL
001|Simpson|Homer
002|742 Evergreen Terrace|Springfield|??
002|712 Red Bark Lane|Henderson|NV

В таблице 001 содержатся люди, таблица 0002содержит адреса.Адреса "Mangrove Drive" и "Unknown Street" принадлежат Декстеру Моргану, а адреса "Evergreen Terrace" и "Red Bark Lane" принадлежат Гомеру Симпсону.

Я имел в виду создание искусственных ключейдля каждой записи.Я бы прочитал файл построчно, добавив ключ для каждой записи, а также добавив ключ родителя.Например:

001|PEOPLE1|Morgan|Dexter
002|PEOPLE1|ADDRESSES1|235 Mangrove Drive|Miami|FL
002|PEOPLE1|ADDRESSES2|5570 Unknown Street|Dade City|FL
001|PEOPLE2|Simpson|Homer
002|PEOPLE2|ADDRESSES3|742 Evergreen Terrace|Springfield|??
002|PEOPLE2|ADDRESSES4|712 Red Bark Lane|Henderson|NV

(Фактические ключи не будут выглядеть так; они, вероятно, будут числовыми. Я просто выгляжу так, чтобы их было легче визуализировать.)

Этот метод работает.Тем не менее, реальные файлы, с которыми я работаю, огромны.Большинство файлов имеют более 5 миллионов строк.Переход от строки к строке занимает очень много времени.

Существует ли более быстрый способ загрузки этих данных в реляционную базу данных при одновременном отслеживании связей между различными записями?

СУБД IМне нужно сделать это на Oracle 11g, но меня также интересуют методы, независимые от базы данных.

...