Domanda

Ho bisogno di aggiungere una chiave di auto-inc surrogato a tre tabelle nel mio magazzino di dati:

Nota: Questi non sono i nomi reali di tabella

  

JakMaster (JakMasterId, Data) (PK) Nota: JakMasterId è varchar (60)

     

JakToRoad (JakMasterId, Data) (FK)

     

JakToBig (JakMasterId, Data) (FK)

Quali passi devo prendere per aggiungere una chiave surrogata a questi tre tabelle in modo che le nuove chiavi riferimento l'un l'altro in modo corretto?

Grazie!

È stato utile?

Soluzione

Sto assumendo si vogliono sostituire JakMasterId con un campo di incremento automatico in modo che le altre due tabelle non hanno bisogno di un varchar (60) sul campo e per migliorare di query volte, ma che si sta tenendo JakMasterId come informazione.

-- 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

Altri suggerimenti

Si potrebbe essere in grado di farlo in tre fasi all'interno del DB per creare il surrogato PK

  1. Alter tabella per creare la colonna chiave surrogata. Tranne, deve essere annullabile.

  2. Scrivi un piccolo programma per impostare i valori chiave. Si tratta di un ciclo di fare gli aggiornamenti.

  3. Alter tavolo per rendere la chiave surrogata colonna non null, auto-incremento, indicizzato, unico nel suo genere, ecc.

Ora è necessario creare del FK.

  1. Alter tabella per aggiungere la colonna FK. Anche in questo caso, deve essere annullabile.

  2. Scrivi un piccolo programma per impostare la colonna FK. Questo è un SELECT (per ottenere la riga PK riferiscono tasti non surrogate), e un aggiornamento della tabella di corrispondenza.

  3. Se necessario, modificare la tabella di rendere il FK non nullo. Questo non è sempre necessario, dipende dalla definizione del rapporto del tavolo FK con la tabella di PK.

Ripetere la creazione FK per tutte le altre tabelle.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top