Oracle: нормализация данных во время миграции - PullRequest
1 голос
/ 27 августа 2009

У меня есть таблица с большим количеством повторяющихся данных, которые я хотел бы преобразовать в 3 таблицы.

Текущая структура выглядит так:

meeting_desc
meeting_date
topic_desc
...

И данные в current_table выглядят так:

meeting1,2/3/2009,abc
meeting1,2/3/2009,efg
meeting1,2/3/2009,xyz
meeting2,4/5/2009,aaa
meeting2,4/5/2009,bbb

Я хотел бы создать таблицу собраний и таблицу тем, в которых PK должны быть из последовательности:

MEETING: 
  id
  meeting_desc
  meeting_date

TOPIC:
  id
  meeting_id
  topic_desc

Чего я не могу понять, так это как вставить данные в новые таблицы. Я пробовал:

insert into MEETING select distinct 
  seq.nextval, meeting_desc, meeting_date from current_table

но, конечно, это не работает. Есть ли простой способ нормализации данных?

1 Ответ

3 голосов
/ 27 августа 2009

DISTINCT, помещенный в подзапрос, должен работать:

SQL> INSERT INTO meeting
  2     SELECT seq.nextval, meeting_desc, meeting_date
  3       FROM (SELECT DISTINCT meeting_desc, meeting_date
  4               FROM current_table);

2 rows inserted

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

SQL>   INSERT INTO topic
  2       SELECT m.id, topic_seq.NEXTVAL, ct.topic_desc
  3         FROM current_table ct
  4         JOIN meeting m ON (ct.meeting_desc = m.meeting_desc 
  5                            AND ct.meeting_date = m.meeting_date);

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