Come aggiungere chiave surrogata per tabelle correlate?
-
30-09-2019 - |
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!
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
-
Alter tabella per creare la colonna chiave surrogata. Tranne, deve essere annullabile.
-
Scrivi un piccolo programma per impostare i valori chiave. Si tratta di un ciclo di fare gli aggiornamenti.
-
Alter tavolo per rendere la chiave surrogata colonna non null, auto-incremento, indicizzato, unico nel suo genere, ecc.
Ora è necessario creare del FK.
-
Alter tabella per aggiungere la colonna FK. Anche in questo caso, deve essere annullabile.
-
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.
-
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.