Cómo agregar clave sustituta a las tablas relacionadas?
-
30-09-2019 - |
Pregunta
Tengo que añadir una clave de auto-inc sustituto para tres tablas en mi almacén de datos:
Nota: Estos no son los nombres de tabla real
JakMaster (JakMasterId, Fecha) (PK) Nota: JakMasterId es VARCHAR (60)
JakToRoad (JakMasterId, Fecha) (FK)
JakToBig (JakMasterId, Fecha) (FK)
¿Qué pasos debo seguir para agregar una clave sustituta a estas tres mesas para que las nuevas claves de referencia entre sí correctamente?
Gracias!
Solución
Estoy asumiendo que usted está deseando para reemplazar JakMasterId con un campo de incremento automático por lo que las otras dos tablas no necesitan un varchar de campo (60) y para mejorar la consulta de veces, pero que le impiden JakMasterId como información.
-- 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
Otros consejos
podría ser capaz de hacer esto en tres pasos dentro de la base de datos para crear el sustituto PK
-
modificar la tabla para crear la columna de la clave sustituta. Excepto, que tiene que ser anulable.
-
Escribir un pequeño programa para establecer los valores clave. Es un bucle haciendo actualizaciones.
-
Alter la mesa para hacer la clave sustituta columna no nulo, incremento automático, indexado, único, etc.
Ahora lo que necesita para crear el FK.
-
modificar la tabla para agregar la columna de FK. Una vez más, debe ser anulable.
-
Escribir un pequeño programa para establecer la columna FK. Este es un SELECT (para obtener la fila PK basa en claves no sustitutos), y una actualización de la tabla de referencia.
-
Si es necesario, modificar la tabla para hacer el FK no nulo. Esto no siempre es necesario, que depende de la definición de la relación de la tabla FK con la tabla de PK.
Repetir la creación FK para todas las demás tablas.