¿Qué son las claves externas en las bases de datos SQL?
Las claves externas permiten a los administradores de bases de datos identificar fácilmente las diferentes conexiones que existen dentro de un sistema de administración de bases de datos SQL.
SQL realiza operaciones matemáticas sobre datos dentro de un sistema de administración de bases de datos. Estas bases de datos contienen diferentes tablas y cada una almacena datos sobre una entidad específica. Si tiene una base de datos de alquiler de coches, una entidad (o tabla) en esa base de datos serán los clientes (que almacenará todos los datos personales de cada cliente).
Estas tablas de base de datos contienen filas y columnas, donde cada fila alberga un registro y cada columna contiene datos específicos de atributos.
En un sistema de gestión de bases de datos, cada registro (o fila) debe ser único.
Claves primarias
Aunque la estipulación es que cada registro de una tabla debe ser distinto, no siempre es así. Continuando con el ejemplo de la base de datos de alquiler de coches, si la base de datos contiene dos clientes, cada uno de los cuales tiene el nombre "John Brown", se puede esperar que un John Brown devuelva un Mercedes-Benz que no alquiló.
La creación de una clave principal mitigará este riesgo. En un sistema de administración de base de datos SQL, una clave principal es un identificador único que distingue un registro de otro.
Por lo tanto, todos los registros de un sistema de administración de bases de datos SQL deben tener una clave principal.
Usar claves primarias en una base de datos
Para incluir claves primarias en un sistema de administración de bases de datos usando SQL, simplemente puede agregarlo como un atributo normal al crear una nueva tabla. Entonces, la tabla de clientes contendrá cuatro atributos (o columnas):
- CarOwnerID (que almacenará la clave principal)
- Primer nombre
- Apellido
- Número de teléfono
Ahora, cada registro de cliente que ingrese a la base de datos tendrá un número de identificación único, así como un nombre, apellido y número de teléfono. El número de teléfono no es lo suficientemente único como para ser una clave principal, porque aunque es exclusivo de una persona a la vez, una persona puede cambiar fácilmente su número, lo que significa que ahora pertenecería a otra persona.
Ejemplo de un registro con una clave principal
/* creates a new record in the customers table */
INSERT INTO Customers VALUES
('0004',
'John',
'Brown',
'111-999-5555');
El código SQL anterior agregará un nuevo registro a la tabla Clientes preexistentes. La siguiente tabla muestra la nueva tabla de clientes con los dos registros de John Brown.
La clave externa
Ahora tiene claves principales que distinguen de forma única a un arrendatario de otro. El único problema es que, en la base de datos, no existe una conexión real entre cada John Brown y el coche que alquila.
Por tanto, sigue existiendo la posibilidad de cometer un error. Aquí es donde entran en juego las claves externas. El uso de una clave principal para resolver el problema de la ambigüedad de propiedad solo se puede lograr si la clave principal funciona como clave externa.
¿Qué es una clave externa?
En un sistema de administración de bases de datos SQL, una clave externa es un identificador único o una combinación de identificadores únicos que conectan dos o más tablas en una base de datos.
De los cuatro sistemas de administración de bases de datos SQL que existen, el sistema de administración de bases de datos relacionales es el más popular. Al decidir qué tabla en una base de datos relacional debe tener una clave externa, primero debe identificar qué tabla es el sujeto y cuál es el objeto en su relación.
Volviendo a la base de datos de alquiler de automóviles, para conectar a cada cliente con el automóvil correcto, deberá comprender que un cliente (el sujeto) alquila un automóvil (el objeto). Por lo tanto, la clave externa debe estar en la tabla de autos.
El código SQL que genera una tabla con una clave externa es ligeramente diferente de la norma.
Creación de una tabla con un ejemplo de clave externa
/* creates a new cars table in the car rental database */
CREATE TABLE Cars
(
LicenseNumber varchar(30) NOT NULL PRIMARY KEY,
CarType varchar(30) NOT NULL,
CustomerID varchar(30) FOREIGN KEY REFERENCES Customers(CustomerID)
);
Como puede ver en el código anterior, una clave externa debe identificarse explícitamente como tal, junto con una referencia a la clave principal que se está conectando a la nueva tabla.
Para agregar un registro a la nueva tabla, deberá asegurarse de que el valor en el campo de clave externa coincida con el valor en el campo de clave principal de la tabla original.
Agregar un registro con un ejemplo de clave externa
/* creates a new record in the cars table */
INSERT INTO Cars VALUES
('100012',
'Mercedes-Benz',
'0004');
El código anterior crea un nuevo registro en la nueva tabla Cars , produciendo el siguiente resultado.
Tabla de coches
En la tabla anterior, puede identificar al John Brown correcto que alquila un Mercedes-Benz por la clave externa en el registro.
Claves extranjeras avanzadas
Hay otras dos formas de utilizar una clave externa en una base de datos.
Si mira hacia atrás en la definición de una clave externa anterior, encontrará que dice que una clave externa puede ser un identificador único o una combinación de identificadores únicos.
Volviendo al ejemplo de la base de datos de alquiler de automóviles, verá que crear un nuevo registro (del mismo automóvil) cada vez que un cliente alquila ese automóvil, anula el propósito de la tabla Automóviles . Si los coches están a la venta y se venden a un solo cliente una vez, la base de datos existente es perfecta; pero dado que los autos son de alquiler, hay una mejor manera de representar estos datos.
Claves compuestas
Una clave compuesta tiene dos o más identificadores únicos. En una base de datos relacional, habrá casos en los que el uso de una única clave externa no representará suficientemente las relaciones que existen dentro de esa base de datos.
En el ejemplo del alquiler de coches, el enfoque más práctico es crear una nueva tabla que almacene los detalles del alquiler. Para que la información de la tabla de alquiler de coches sea útil, tiene que conectarse tanto con el coche como con las mesas de los clientes.
Crear una tabla con claves externas compuestas
/* creates a CarRental table in the car rental database */
CREATE TABLE CarRental
(
DateRented DATE NOT NULL,
LicenseNumber varchar(30) NOT NULL FOREIGN KEY REFERENCES Cars(LicenseNumber),
CustomerID varchar(30) NOT NULL FOREIGN KEY REFERENCES Customers(CustomerID),
PRIMARY KEY (DateRented, LicenseNumber, CustomerID)
);
El código anterior describe un punto importante; aunque una tabla en una base de datos SQL puede tener más de una clave externa, solo puede tener una única clave primaria. Esto se debe a que solo debe haber una forma única de identificar un registro.
Es necesario combinar los tres atributos en la tabla para tener una clave única. Un cliente puede alquilar más de un automóvil el mismo día (por lo que CustomerID y DateRented no es una buena combinación) más de un cliente también puede alquilar el mismo automóvil el mismo día (por lo que LicenseNumber y DateRented no es una buena combinación) .
Sin embargo, la creación de una clave compuesta que dice qué cliente, qué automóvil y qué día es una excelente clave única. Esta clave única representa tanto una clave externa compuesta como una clave primaria compuesta.
Claves primarias extranjeras
Oh, sí, las claves primarias externas salen. Aunque no tiene un nombre oficial, una clave externa también puede ser una clave principal en la misma tabla. Esto sucede cuando crea una nueva tabla que contiene datos especializados sobre una entidad existente (o registro en otra tabla).
Digamos que Fred (que trabaja en la empresa de alquiler de coches) está en la base de datos de la empresa debajo de la tabla de empleados. Después de unos años, se convierte en supervisor y se agrega a la mesa de supervisores.
Fred sigue siendo un empleado y seguirá teniendo el mismo número de identificación. Entonces, la identificación de empleado de Fred ahora está en la tabla de supervisor como una clave externa que también se convertirá en una clave principal en esa tabla (ya que no tiene sentido crear un nuevo número de identificación para Fred ahora que es supervisor).
Ahora puede identificar claves externas en bases de datos SQL
Las claves externas conectan diferentes tablas dentro de una base de datos SQL. En este artículo, puede ver qué es una clave externa, cómo funciona y por qué es importante tenerlas en una base de datos. También comprende las formas básicas, e incluso más complejas, de las claves externas.
Si cree que las claves externas son interesantes, tendrá un día de campo cuando comience a usar el proyecto y las operaciones de selección para consultar sus bases de datos SQL.