Я выполняю работы по техническому обслуживанию на существующем сайте Rails, и у меня возникли некоторые проблемы, связанные с множеством ассоциаций. Похоже, что сайт изначально создавался с использованием has_and_belongs_to_many
для нескольких отношений, которые с тех пор стали более сложными в бизнес-логике, поэтому мне нужно вместо этого использовать has_many :through
для поддержки дополнительных полей в таблице отношений. Однако таблица соединений, которая изначально использовалась для HABTM, не имеет первичного ключа, и мне нужно добавить один для поддержки отдельного моделирования отношений с использованием has_many :through
.
Какой лучший способ добавить первичный ключ в существующую таблицу с большим количеством данных? Есть ли другой способ сделать то, что я пытаюсь сделать?
Кстати, система работает на Oracle.
Спасибо!
Justin
ОБНОВЛЕНИЕ 11/9/09 15:58: я не эксперт по Oracle и теряюсь в дебрях версий Oracle, отличных от NULL, с автоинкрементом и так далее. Сначала я попытался сделать то, что рекомендовали Майк и Кори, добавив новое поле в качестве первичного ключа, но Oracle не позволил мне добавить непустое поле в непустую таблицу (ORA-01758). Затем я экспортировал данные в виде SQL, удалил строки, добавил PK и установил для него ненулевое значение, затем попытался импортировать данные, но я продолжал получать сообщения об ошибке «не могу вставить NULL в id ...» (ОР-01400).
Наконец, я попытался использовать миграцию, как предлагает Кори в своем комментарии, но rake столкнулся с теми же ошибками, что и Oracle, когда я вручную изменял базу данных («не могу добавить непустое поле в непустую таблицу»). Я очистил таблицу, запустил миграцию (которая работала), а затем попытался повторно импортировать данные, но в прошлый раз, когда я пытался импортировать, я получил те же ошибки («не могу вставить NULL в id ...»). Как я могу сохранить свои данные и добавить нужные мне первичные ключи? Я знаю, что была предложена возможность написать грабли, но я не уверен, как действовать в этом направлении. Есть идеи?