¿Cómo se crea una relación con una clave no primaria en SQL Server?

8

Tengo una tabla de usuarios que tiene dos columnas, una clave principal llamada UserID y otra columna llamada UserName.

  • ID de usuario (int) PK
  • Nombre de usuario (varchar (256)

Ambos son únicos, pero decidí por razones utilizar el nombre de usuario como referencia en otras tablas. Entonces, la tabla de pedidos, por ejemplo, tiene una referencia al usuario por Nombre de usuario, no por ID de usuario.

  • Solicitar ID
  • Nombre de usuario

Quiero crear una relación entre todas las tablas que hacen referencia al nombre de usuario y la tabla de usuarios para obtener la función de actualización / eliminación en cascada de SQL Server.

Pero SQL Server no me permite crear una relación en una columna de clave no primaria. ¿Hay alguna forma de obtener la función de actualización / eliminación en cascada sin cambiar la tabla de usuarios para que UserName sea la clave principal y no el UserID?

Shrage Smilowitz
fuente

Respuestas:

13

Cree un índice único o una restricción única, UserNameluego puede hacer referencia a él en una multa de restricción FK.

Tu declaración de que

SQL Server no me permite crear una relación en una columna de clave no primaria

Es incorrecto. SQL Server solo se preocupa de que las columnas que participan en la relación FK tengan un índice único definido.

Martin Smith
fuente
1
tienes razón, mi declaración se basó en el mensaje de error que recibí del servidor sql cuando intenté crear la relación.
Shrage Smilowitz