2010-10-09 12 views
39

Siempre me resulta confuso agregar claves foráneas a la tabla primaria en Management Studio.SQL Server Management Studio: ¿se agrega confusión de clave externa?

Digamos que tengo un

Table1 
{ 
    ID int, -- Primary Key 
    Table2ID int, -- Refers to Table2's ID 
} 

Table2 
{ 
    ID int, -- Primary Key 
    SomeData nvarchar(50) 
} 

Estoy añadiendo una clave externa a la Tabla 1 por Right Click -> Relationships -> Table and column specification. Estoy configurando las ventanas emergentes "Primarias" en Table2, ID y "Foreign Key Table" en Table1, Table2ID.

Mis preguntas:

  1. ¿No debería ser listados para la Tabla2 "tabla de clave externa" y la Tabla 1 para clave principal? ¿Es mi entendimiento incorrecto?

  2. Cuando guardo, recibo una alerta "Las siguientes tablas se guardarán en su base de datos". y muestra ambas tablas. Realmente no entiendo esto. Solo cambié Table1. ¿Por qué se muestra la segunda tabla?

Respuesta

22

¿Por qué no solo utiliza las declaraciones de T-SQL equivalentes? Parece mucho más fácil y menos confuso para mí:

ALTER TABLE dbo.Table1 
    ADD CONSTRAINT FK_Table1_Table2 
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID) 

Cuando leí esto, creo que esto es inmediatamente claro qué dos tablas están involucrados, y cómo están conectados (Table1.Table2ID - (referencias) ->Table2.ID)

Si desea permanecer en el mundo diseñador de SSMS: también se puede crear un diagrama de base de datos de las tablas involucradas, y luego simplemente arrastra & deje caer su columna Table2ID de Table1 a Table2 y soltarlo en la columna de la ID allí - esto le indicaría gráficamente a SSMS lo que desea hacer, y solo necesita revisar su opciones y haga clic en Aceptar en el cuadro de diálogo que aparece.

+0

Sé que puedo usar T-SQL, pero quería saber el razonamiento detrás de este diseño. Además, arrastrar y soltar muestra la misma ventana ... – tvr

9

1.No debería Tabla2 estar listado para "Tabla de clave externa" y Tabla1 para Clave principal? ¿Es mi entendimiento incorrecto?

Creo que su comprensión es incorrecta. Table2 es la tabla a la que está haciendo referencia la clave principal. Por lo tanto, aparece en la Clave principal. Table1 es la tabla que tendrá la clave externa (la referencia a la clave primaria de otra tabla); por lo tanto, se enumera en "Tabla de clave externa".

En cuanto a por qué se guardan ambas tablas, aunque la clave foránea se enumera después como perteneciente a la Tabla 1: creo que es porque la clave foránea restringe ambas tablas. Ambos tienen que "saber" sobre la restricción, por lo que ambos deben ser salvados.

+0

updoot para responder _las dos preguntas. –

1
ALTER TABLE dbo.Table1 
    ADD CONSTRAINT FK_Table1_Table2 
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID) 
+1

Si publica código, XML o muestras de datos, ** por favor ** resalte esas líneas en el editor de texto y haga clic en el botón "muestras de código" ('{}') en la barra de herramientas del editor para formatear y sintaxis ¡destaquelo! –

96
  • clic en el símbolo de ampliación situado junto a la mesa.
  • Haga clic con el botón derecho en la carpeta "Llaves" y seleccione "Nueva clave externa".
  • (Alternativamente, puede hacer clic en el botón Relaciones en la tira de herramientas cuando tenga la tabla abierta)
  • Haga clic en el botón "..." en la fila "Especificaciones de tablas y columnas" para abrir el editor.
  • El menú desplegable de la izquierda será la tabla desde la que agrega, y el campo de texto estático mostrará la tabla que está agregando.
  • Utilice las listas desplegables para especificar sus restricciones, y asegúrese de que ambas partes tengan el mismo número de columnas.
+1

La pregunta fue cómo hacerlo en SSMS. Por lo tanto, esta respuesta obtiene mi voto. – Bradley

+2

+1 de mí también. Excelente respuesta precisa. –

+0

Supongo que si "New Foriegn Key" no aparece, ¿entonces no tienes permiso o algo así? – levininja

Cuestiones relacionadas