Как добавить суррогатный ключ к соответствующим таблицам?

StackOverflow https://stackoverflow.com/questions/3935698

Вопрос

Мне нужно добавить auto-inc суррогатный ключ до трех таблиц в моем хранилище данных:

Примечание: это не настоящие названия таблиц

Jakmaster (Jakmasterid, дата) (PK) Примечание: Jakmasterid - varchar (60)

Jaktoroad (Jakmasterid, дата) (FK)

Jaktobig (Jakmasterid, дата) (FK)

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

Спасибо!

Это было полезно?

Решение

Я предполагаю, что вы хотите заменить JakmasterID с помощью поля автоматического приращения, чтобы другие две таблицы не нуждаются в поле Varchar (60) и для улучшения времени запроса, но вы держите Jakmasterid в качестве информации.

-- set database single-user

-- drop foreign keys

create table NewMaster (ID int identity(1, 1), JakMasterId, Date))
insert NewMaster(JakMasterId, Date) select JakMasterId, Date from JakMaster
drop table JakMaster
sp_rename 'NewMaster', 'JakMaster'

alter table JakToRoad add MasterId int
alter table JakToBig add MasterId int

update JakToRoad set MasterId = JakMaster.ID
from JakToRoad
inner join JakMaster on JakMaster.JakMasterId = JakToRoad.JakMasterId

update JakToBig set MasterId = JakMaster.ID
from JakToBig 
inner join JakMaster on JakMaster.JakMasterId = JakToBig .JakMasterId

alter table JakToRoad drop column JakMasterId
alter table JakToBig drop column JakMasterId


alter table JakToRoad add constraint FK_JTRtoJM foreign key (MasterId) references JakMaster (ID)
alter table JakToBig add constraint FK_JTBtoJM foreign key (MasterId) references JakMaster (ID)

-- reset database to multi-user

Другие советы

Вы можете сделать это на три шага в рамках БД, чтобы создать суррогатный PK

  1. Измените таблицу, чтобы создать суррогатный столбец ключа. Кроме того, он должен быть аннулирован.

  2. Напишите небольшую программу, чтобы установить значения ключей. Это цикл делает обновления.

  3. Измените таблицу, чтобы сделать суррогатный столбец ключа ненулью, автоматически приращения, индексированные, уникальные и т. Д.

Теперь вам нужно создать FK.

  1. Измените таблицу, чтобы добавить столбец FK. Опять же, это должно быть аннулировано.

  2. Напишите небольшую программу, чтобы установить столбец FK. Это выбрать (чтобы получить ряд PK на основе не суррогатных клавиш) и обновление на ссылке на таблицу.

  3. При необходимости измените таблицу, чтобы сделать FK Non-Null. Это не всегда необходимо, это зависит от определения отношения таблицы FK с таблицей PK.

Повторите создание FK для всех остальных таблиц.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top