Изменение ключа-кандидата в SQL Server 2005

#sql-server-2005 #tsql #foreign-keys #database-schema #alter-table

#sql-server-2005 #tsql #внешние ключи #база данных-схема #alter-таблица

Вопрос:

Передо мной стоит довольно интересная задача, и я хочу убедиться, что я правильно ее обдумываю —

У меня есть таблица Part , которая part_id используется как часть ключей-кандидатов нескольких других таблиц ( A , B , C ). Мне нужно удалить Part и использовать Product вместо этого. A , B , C необходимо part_id заменить их столбец (который имеет тип bigint ) на новый столбец product_id (который имеет тип int данных). Мне нужно использовать part_id столбец таблиц, чтобы определить, что product_id мне нужно использовать для каждой строки.

Вот что я думаю, это то, что мне нужно сделать (мысли?):

  1. создайте product_id столбец в каждой из таблиц ( A , B , C )
  2. установите product_id для каждой строки для каждой таблицы соответствующее значение
  3. удалите все ограничения /fk / pk, которые у меня есть для part_id столбца в A , B , C
  4. полностью удалите part_id из этих таблиц
  5. воссоздайте ограничения / fk / pk, которые я отбросил ранее, только вместо этого они должны product_id быть их частью
  6. Part полностью удалите таблицу

Может ли кто-нибудь увидеть какие-либо потенциальные проблемы, которыми я могу пренебречь?

Спасибо!

Дополнительная информация: в таблицах A, B и C содержится МНОГО данных, поэтому, если есть более эффективный способ, я весь внимание.

Ответ №1:

Вы должны иметь возможность создавать новые ограничения для product_id перед удалением ограничений для part_id и перед удалением столбца part_id. И вы должны сделать это таким образом — сначала создайте новые ограничения.

Если что-то пойдет не так с изменениями product_id, ваша база данных все еще может использоваться, если ограничения part_id все еще действуют.