Crear relaciones de clave externa

 

Se aplica a: SQL Server 2016

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2016)síBase de datos SQL de AzuresíAlmacenamiento de datos SQL de Azure síAlmacenamiento de datos paralelos

En este tema se describe cómo crear relaciones de clave externa en SQL Server 2016 mediante SQL Server Management Studio o Transact-SQL. Cuando se asocian filas de una tabla con filas de otra tabla, se crea una relación entre las dos tablas.

  • No es necesario que una restricción de clave externa esté vinculada únicamente a una restricción de clave principal de otra tabla; también puede definirse para que haga referencia a las columnas de una restricción UNIQUE de otra tabla.

  • Si se especifica un valor distinto de NULL en la columna de una restricción FOREIGN KEY, el valor debe existir en la columna a que se hace referencia; de lo contrario, se devolverá un error de infracción de clave externa. Para asegurarse de que todos los valores de la restricción de clave externa compuesta se comprueben, especifique NOT NULL en todas las columnas que participan.

  • Las restricciones FOREIGN KEY solo pueden hacer referencia a las tablas de la misma base de datos en el mismo servidor. La integridad referencial entre bases de datos debe implementarse a través de desencadenadores. Para obtener más información, vea CREATE TRIGGER (Transact-SQL).

  • Las restricciones FOREIGN KEY pueden hacer referencia a otras columnas de la misma tabla. Esto recibe el nombre de autorreferencia.

  • Una restricción FOREIGN KEY especificada en el nivel de columna solo puede incluir una columna de referencia. Esta columna debe tener el mismo tipo de datos que la columna en la que se define la restricción.

  • Una restricción FOREIGN KEY especificada en el nivel de tabla debe tener el mismo número de columnas de referencia que la lista de columnas de la restricción. El tipo de datos de cada columna de referencia debe ser también el mismo que el de la columna correspondiente de la lista de columnas.

  • El Motor de base de datos no tiene un límite predefinido para el número de restricciones FOREIGN KEY que una tabla que hace referencia a otras tablas puede contener, o para el número de restricciones FOREIGN KEY pertenecientes a otras tablas que hacen referencia a una tabla específica. No obstante, el número real de restricciones FOREIGN KEY que se puede utilizar está limitado por la configuración del hardware y por el diseño de la base de datos y de la aplicación. Una tabla puede hacer referencia a otras 253 tablas y columnas como claves externas (referencias de salida) como máximo. SQL Server 2016 aumenta el límite para la cantidad de otras tablas y columnas que pueden hacer referencia a las columnas de una sola tabla (referencias de entrada) de 253 a 10 000. (Requiere al menos el nivel de compatibilidad 130). El aumento conlleva las siguientes restricciones:

    • Se admiten más de 253 referencias de clave externa para las operaciones DELETE y UPDATE DML. Las operaciones MERGE no se admiten.

    • Una tabla con una referencia de clave externa a sí misma sigue estando limitada a 253 referencias de clave externa.

    • Actualmente, no hay disponibles más de 253 referencias de clave externa para índices de almacén de columnas, tablas con optimización para memoria o Stretch Database.

  • Las restricciones FOREIGN KEY no se exigen en tablas temporales.

  • Si la clave externa se define en una columna de tipo definido por el usuario CLR, la implementación del tipo debe admitir el orden binario. Para obtener más información, vea Tipos definidos por el usuario de CLR.

  • Una columna de tipo varchar(max) solo puede participar en una restricción FOREIGN KEY si la clave principal a la que hace referencia se define también como tipo varchar(max).

La creación de una tabla nueva con una clave externa requiere el permiso CREATE TABLE en la base de datos y el permiso ALTER en el esquema en el que se crea la tabla.

La creación de una clave externa en una tabla existente requiere el permiso ALTER en la tabla.

Usar SQL Server Management Studio

  1. En el Explorador de objetos, haga clic con el botón derecho en la tabla que va a estar en el lado de la clave externa de la relación y, después, haga clic en Diseño.

    La tabla se abre en el Diseñador de tablas.

  2. En el menú Diseñador de tablas , haga clic en Relaciones.

  3. En el cuadro de diálogo Relaciones de clave externa, haga clic en Agregar.

    La relación aparece en la lista Relación seleccionada con un nombre proporcionado por el sistema con el formato FK_<tablename>_<tablename>, donde tablename es el nombre de la tabla de clave externa.

  4. Haga clic en la relación en la lista Relación seleccionada .

  5. Haga clic en Especificaciones de tablas y columnas en la cuadrícula situada a la derecha y, después, haga clic en los puntos suspensivos () que aparecen a la derecha de la propiedad.

  6. En el cuadro de diálogo Tablas y columnas, en la lista desplegable Clave principal, elija la tabla que estará en el lado de la clave principal de la relación.

  7. En la cuadrícula situada debajo, elija las columnas que contribuyen a la clave principal de la tabla. En la celda de la cuadrícula adyacente situada a la izquierda de cada columna, elija la columna de clave externa correspondiente de la tabla de clave externa.

    ElDiseñador de tablas sugerirá un nombre para la relación. Para cambiar este nombre, edite el contenido del cuadro de texto Nombre de la relación .

  8. Elija Aceptar para crear la relación.

Usar Transact-SQL

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

  2. En la barra de Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar. El ejemplo crea una tabla y definir una restricción de clave externa en la columna TempID que hace referencia a la columna SalesReasonID de la tabla Sales.SalesReason . Las cláusulas ON DELETE CASCADE y ON UPDATE CASCADE se usan para garantizar que los cambios realizados en la tabla Sales.SalesReason se propaguen automáticamente a la tabla Sales.TempSalesReason .

    USE AdventureWorks2012;    
    GO    
    CREATE TABLE Sales.TempSalesReason (TempID int NOT NULL, Name nvarchar(50),     
    CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID),     
    CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)     
        REFERENCES Sales.SalesReason (SalesReasonID)     
        ON DELETE CASCADE    
        ON UPDATE CASCADE    
    );GO    
    
    
    

Usar Transact-SQL

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

  2. En la barra de Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar. El ejemplo crea una clave externa en la columna TempID que hace referencia a la columna SalesReasonID de la tabla Sales.SalesReason.

    USE AdventureWorks2012;    
    GO    
    ALTER TABLE Sales.TempSalesReason     
    ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)     
        REFERENCES Sales.SalesReason (SalesReasonID)     
        ON DELETE CASCADE    
        ON UPDATE CASCADE    
    ;    
    GO    
    
    
    

    Para obtener más información, vea ALTER TABLE (Transact-SQL), CREATE TABLE (Transact-SQL) y table_constraint (Transact-SQL).

Adiciones de comunidad

AGREGAR
Mostrar: