Altova DatabaseSpy 2023 Enterprise Edition

Al igual que ocurre con otros objetos de BD, hay varias formas de crear restricciones de claves foráneas:

 

Desde la ventana Explorador

Desde el Editor de diseños

Generando SQL a partir de un objeto de clave foránea que ya existe

 

Requisitos

Al crear claves foráneas debe tener en cuenta que:

 

Las columnas que forman parte de la relación de clave foránea deben ser del mismo tipo de datos y la misma longitud.

La columna a la que se hace referencia (Department.ID en este ejemplo) debe ser parte de una clave principal o foránea.

 

Tenga también en cuenta este comportamiento específico de la BD:

 

En SQL Server puede agregar a una columna una referencia a una clave foránea; esto lo puede hacer no solamente si esta es parte de una clave única o foránea, sino también si en ella hay definido un índice único. También tiene esta opción en las versiones más recientes de MySQL (siempre que el motor de almacenamiento sea InnoDB).

SQLite no permite añadir claves foráneas a tablas que ya existen. Solo puede crear restricciones de claves foráneas al crear tablas.

 

Preparar la BD

A continuación explicamos varias maneras de crear una relación de clave foránea entre dos tablas. Para ello usaremos las tablas del ejemplo anterior, Employee y Department, y una BD SQL Server. Estas instrucciones son similares en el caso de otras bases de datos. Si quiere seguir las instrucciones siguientes literalmente puede ejecutar este script para preparar su BD SQL Server:

 

CREATE TABLE
   Department (
       [ID] int IDENTITY (1, 1) NOT NULL,
       [Name] varchar (100) NOT NULL,
      CONSTRAINT [PK__Department] PRIMARY KEY ([ID]) ) ;
 
CREATE TABLE
   Employee (
       [ID] int IDENTITY (1, 1) NOT NULL,
       [Name] varchar (50) NOT NULL,
       [Email] varchar (100) NOT NULL,
       [DepartmentID] int NOT NULL,
      CONSTRAINT [PK__Employee] PRIMARY KEY ([ID]) ) ;

Scripts de creación de tablas (SQL Server)

En el script SQL anterior observe que la columna Department.ID es una clave principal. Asimismo, las columnas Employee.DepartmentID y Department.ID son de tipo entero, lo que cumple con los requisitos para crear una relación de clave foránea entre estas dos columnas.

 

Crear claves foráneas en la ventana Explorador

1.Haga clic con el botón derecho en la tabla Employee y seleccione Crear clave | Crear clave foránea en el menú contextual. En la carpeta "Keys" aparece la clave foránea <nombre generado>. También se genera un script en la Ventana Script de cambios de la estructura de la BD. En este punto todavía puede revertir los cambios haciendo clic en el botón Actualizar dbs_ic_refresh.

dbs_fk_create_01

2.Otra opción es seleccionar el nombre <nombre generado> y pulsar F2 para cambiarle el nombre.

3.Haga doble clic en "Elegir una tabla" y navegue hasta la tabla foránea. En este ejemplo esa tabla es Department. Observe que la columna ID se selecciona automáticamente porque es la columna en la que está la clave.

dbs_fk_create_02

4.Haga clic en el botón Ejecutar el script de cambios SQL generado dbs_ic_execute_script en la ventana Script de cambios de la estructura de la base de datos.

 

Crear claves foráneas en el Editor de diseños (método 1)

1.Agregue las dos tablas (Employee y Department) al Editor de diseños.

2.Elija una opción:

 

oArrastre la columna DepartmentID desde la sección Columnas de la tabla Employee (o desde la ventana Explorador) hasta la sección Clave. Seleccione Crear clave foránea en el menú contextual cuando la aplicación se lo pida.

oArrastre la clave principal desde la sección Clave de la tabla DepartmentID (o desde la ventana Explorador) hasta la sección Clave de la tabla Employee.

 

Por defecto se crea una clave foránea que tenga el nombre <nombre generado> en la primera columna que tenga el mismo tipo de datos que la columna a la que se hace referencia desde la clave o el índice que se hayan arrastrado. Puede que esta sea la columna en la que necesita la clave foránea o puede que no. Si no lo es, haga doble clic en la columna (en la sección Clave) y seleccione la columna correcta en la lista.

dbs_fk_create_03

 

3.Haga clic en el botón Ejecutar el script de cambios SQL generado dbs_ic_execute_script en la ventana Script de cambios de la estructura de la base de datos.

 

Crear claves foráneas en el Editor de diseños (método 2)

1.Elija una opción:

 

oHaga clic en el icono Crear restricción de clave nueva ic_add-column en la sección Claves de un diseño de tabla y después seleccione Crear clave foránea en el menú contextual.

oHaga clic con el botón derecho en cualquier lugar del diseño de tabla y elija Insertar nuevo/a | Clave | Clave foránea del menú contextual.

 

Se crea automáticamente una clave foránea con el nombre <nombre generado>, sin ninguna referencia a una tabla. Para elegir a qué tabla se hace referencia haga clic en [seleccione la tabla a la que se hace referencia] y seleccione en la lista la tabla que necesite.

dbs_fk_create_04

2.Si es necesario, cambie las columnas "de" y "a" para la clave foránea:

 

oPara cambiar la columna en la que está la clave foránea haga doble clic en la columna (en la sección Clave, bajo Columnas) y seleccione la entrada correspondiente en la lista.

dbs_fk_create_03

oPara cambiar la columna a la que apunta la clave foránea haga doble clic en la columna (en la sección Clave, bajo Referencia) y seleccione la entrada correspondiente en la lista.

 

3.Haga clic en el botón Ejecutar el script de cambios SQL generado dbs_ic_execute_script en la ventana Script de cambios de la estructura de la base de datos.

 

Asignar nombres a las claves foráneas

La nueva clave foránea recibe por defecto el nombre <generado>, lo que significa que su nombre será generado automáticamente por la base de datos. Esto garantiza el uso de nombres únicos y evita errores. Si lo prefiere, puede invalidar el nombre generado. Para ello haga doble clic en <generado>, escriba el nombre de la clave y pulse Entrar.

 

Si reemplaza el nombre generado con un nombre personalizado, el nombre nuevo debe ser único o, de lo contrario, se producirán errores cuando se ejecute el script de cambios de la base de datos.

 

Nota:en SQLite la BD ignora los nombres de clave foránea personalizados. El nombre de clave que aparece en el Explorador de DatabaseSpy es el nombre interno generado por la BD.

 

Generar SQL para crear claves foráneas

Para crear una clave foránea también puede generar una instrucción SQL usando como modelo una clave que ya exista.

 

1.En el Explorador expanda la carpeta Claves de la tabla que contiene la clave foránea que va a usar.

2.Haga clic con el botón derecho en la clave foránea y seleccione Mostrar en Editor SQL | Agregar en el menú contextual. Tenga en cuenta que este comando está deshabilitado si la BD no permite alterar la estructura de tablas que ya existen.

3.En el Editor SQL edite el nombre de la tabla, el de la columna y el de la clave foránea.

4.Haga clic en el botón Ejecutar dbs_ic_execute_query para ejecutar la instrucción SQL y crear la nueva clave foránea.

 

Referencias de esquema cruzadas

Las claves foráneas también pueden hacer referencia a una columna de una tabla de un esquema distinto. Al definir esta referencia con el Editor de diseños las tablas del mismo esquema aparecen en negro y las de un esquema distinto en azul, por ejemplo:

dbs_fk_create_05

© 2017-2023 Altova GmbH