2010-10-14 4 views
4

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

Примечание: Это не реальные имена таблиц

JakMaster (JakMasterId, дата) (PK) Примечание : JakMasterId является VARCHAR (60)

JakToRoad (JakMasterId, дата) (ФК)

JakToBig (JakMasterId, дата) (ФК)

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

Спасибо!

ответ

3

Я предполагаю, что вы хотите заменить 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 
+0

Ваши предположения верны. Я попробую и дам вам знать. –

1

Вы могли бы быть в состоянии сделать это в три этапа в рамках БД для создания суррогатная PK

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

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

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

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

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

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

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

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

+0

@S. Lott: Для (первого) шага 2 почему я не могу позволить базе данных просто генерировать значения? –

+0

@ subt13: Будет ли? Большинство нет. Но если вы это сделаете, то пусть это. –

+0

@S. Lott: То, что я имею в виду, когда я добавляю суррогатный ключ, я могу установить его как столбец авто-inc одновременно. Затем, когда таблица сохраняется, генерируются значения. –

Смежные вопросы