Comprender la definición y el rol de la clave primaria y la clave foránea en SQL

Las claves primaria y foránea en SQL son conceptos fundamentales en el diseño de bases de datos. La clave primaria identifica de manera única cada registro, mientras que la clave foránea construye relaciones entre diferentes tablas. En este artículo, explicaremos en detalle la definición, el rol y los métodos de configuración de estas claves con ejemplos concretos, ayudándote a mejorar tu comprensión del diseño de bases de datos.

Índice

Definición y rol de la clave primaria

La clave primaria (Primary Key) es una clave que se utiliza para identificar de manera única cada registro dentro de una tabla de base de datos. La clave primaria debe ser única en la tabla y no puede contener valores NULL. Se recomienda establecer una clave primaria en cada tabla para garantizar la integridad de los datos.

Características de la clave primaria

  • Unicidad: La clave primaria identifica de manera única cada registro, por lo que no puede tener valores duplicados.
  • Sin NULL: La clave primaria no puede contener valores NULL.
  • Una por tabla: Cada tabla debe tener una única clave primaria.

Rol de la clave primaria

La clave primaria cumple las siguientes funciones:

  • Identificación única de registros: Permite identificar de manera única cada registro, evitando duplicados.
  • Base para las relaciones: Es la base para establecer relaciones con otras tablas.

Definición y rol de la clave foránea

La clave foránea (Foreign Key) se utiliza para referenciar la clave primaria de otra tabla. La clave foránea es importante para definir las relaciones entre tablas y mantener la integridad de los datos.

Características de la clave foránea

  • Referencial: La clave foránea referencia la clave primaria de otra tabla.
  • Integridad: Garantiza que los datos referenciados existan en la tabla a la que apunta.
  • Permite NULL: En algunos casos, la clave foránea puede permitir valores NULL.

Rol de la clave foránea

La clave foránea cumple los siguientes roles:

  • Construcción de relaciones: Establece relaciones claras entre tablas y garantiza la coherencia de los datos.
  • Mantenimiento de la integridad de los datos: Impide la inserción o actualización de datos si no existe el dato referenciado.

El uso de claves foráneas es esencial para mantener la precisión y la coherencia de los datos en la base de datos.

Diferencias entre clave primaria y clave foránea

Las claves primaria y foránea son fundamentales en el diseño de bases de datos, pero tienen roles y características distintas.

Características y rol de la clave primaria

  • Unicidad: La clave primaria identifica de manera única cada registro.
  • Sin NULL: No permite valores NULL.
  • Una por tabla: Solo puede haber una clave primaria por tabla.

Características y rol de la clave foránea

  • Referencial: La clave foránea referencia la clave primaria de otra tabla.
  • Integridad: Asegura que los datos referenciados existan en la tabla objetivo.
  • Permite NULL: En algunos casos, puede contener valores NULL.

Diferencias entre clave primaria y clave foránea

  • Propósito: La clave primaria se utiliza para identificar registros de manera única, mientras que la clave foránea se usa para establecer relaciones entre tablas.
  • Restricción de unicidad: La clave primaria siempre debe ser única y no puede contener valores NULL, mientras que la clave foránea no necesita ser única si referencia una clave primaria válida.
  • Alcance: Solo puede haber una clave primaria por tabla, mientras que puede haber múltiples claves foráneas en una tabla.

Comprender estas diferencias permite el uso adecuado de claves primarias y foráneas en el diseño de bases de datos.

Cómo configurar una clave primaria

El comando SQL para configurar una clave primaria es simple y se especifica al crear la tabla. También se puede añadir a una tabla existente. A continuación se muestra cómo hacerlo.

Configurar una clave primaria al crear la tabla

A continuación, se muestra un ejemplo de cómo configurar una clave primaria en la tabla Users, donde user_id es la clave primaria.

CREATE TABLE Users (  
    user_id INT NOT NULL,  
    username VARCHAR(50),  
    email VARCHAR(50),  
    PRIMARY KEY (user_id)  
);

Explicación del código

  • CREATE TABLE Users: Crea una tabla llamada Users.
  • user_id INT NOT NULL: La columna user_id es de tipo entero y no permite valores NULL.
  • PRIMARY KEY (user_id): Establece la columna user_id como clave primaria.

Añadir una clave primaria a una tabla existente

A continuación, se muestra un ejemplo de cómo añadir una clave primaria a una tabla existente llamada Orders, donde order_id será la clave primaria.

ALTER TABLE Orders  
ADD PRIMARY KEY (order_id);

Explicación del código

  • ALTER TABLE Orders: Modifica la tabla Orders.
  • ADD PRIMARY KEY (order_id): Añade la columna order_id como clave primaria.

Configurar correctamente una clave primaria garantiza la unicidad e integridad de los datos en la base de datos.

Cómo configurar una clave foránea

El comando SQL para configurar una clave foránea puede ejecutarse al crear una tabla o añadirse a una tabla existente. Configurar correctamente una clave foránea establece relaciones entre tablas y garantiza la integridad de los datos.

Configurar una clave foránea al crear la tabla

A continuación, se muestra un ejemplo de cómo configurar una clave foránea en la tabla Orders, donde customer_id está relacionado con customer_id en la tabla Customers.

CREATE TABLE Customers (  
    customer_id INT NOT NULL,  
    customer_name VARCHAR(100),  
    PRIMARY KEY (customer_id)  
);  

CREATE TABLE Orders (  
    order_id INT NOT NULL,  
    order_date DATE,  
    customer_id INT,  
    PRIMARY KEY (order_id),  
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)  
);

Explicación del código

  • CREATE TABLE Customers: Crea una tabla llamada Customers.
  • PRIMARY KEY (customer_id): Establece la columna customer_id como clave primaria.
  • CREATE TABLE Orders: Crea una tabla llamada Orders.
  • FOREIGN KEY (customer_id) REFERENCES Customers(customer_id): Relaciona la columna customer_id de la tabla Orders con la columna customer_id de la tabla Customers.

Añadir una clave foránea a una tabla existente

A continuación, se muestra un ejemplo de cómo añadir una clave foránea a una tabla existente llamada Orders, donde customer_id será la clave foránea que referencia a Customers.

ALTER TABLE Orders  
ADD CONSTRAINT fk_customer  
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id);

Explicación del código

  • ALTER TABLE Orders: Modifica la tabla Orders.
  • ADD CONSTRAINT fk_customer: Añade una restricción llamada fk_customer.
  • FOREIGN KEY (customer_id) REFERENCES Customers(customer_id): Establece la columna customer_id como clave foránea que referencia la columna customer_id en la tabla Customers.

Configurar correctamente una clave foránea establece relaciones entre tablas y mantiene la integridad de los datos en la base de datos.

Ejemplo de diseño de tablas usando claves primaria y foránea

A continuación, se muestra un ejemplo práctico de diseño de tablas utilizando claves primaria y foránea. Este diseño gestiona información de clientes y pedidos en una base de datos.

Diseño de la tabla de clientes

Primero, diseñamos la tabla Customers para gestionar la información de los clientes, utilizando customer_id como clave primaria.

CREATE TABLE Customers (  
    customer_id INT NOT NULL AUTO_INCREMENT,  
    customer_name VARCHAR(100) NOT NULL,  
    contact_email VARCHAR(100),  
    PRIMARY KEY (customer_id)  
);

Explicación del código

  • customer_id INT NOT NULL AUTO_INCREMENT: La columna customer_id es de tipo entero, se incrementa automáticamente y no permite valores NULL.
  • PRIMARY KEY (customer_id): Establece la columna customer_id como clave primaria.

Diseño de la tabla de pedidos

A continuación, diseñamos la tabla Orders para gestionar la información de los pedidos, utilizando order_id como clave primaria y customer_id como clave foránea que referencia a Customers.

CREATE TABLE Orders (  
    order_id INT NOT NULL AUTO_INCREMENT,  
    order_date DATE NOT NULL,  
    customer_id INT,  
    PRIMARY KEY (order_id),  
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)  
);

Explicación del código

  • order_id INT NOT NULL AUTO_INCREMENT: La columna order_id es de tipo entero, se incrementa automáticamente y no permite valores NULL.
  • order_date DATE NOT NULL: La columna order_date es de tipo fecha y no permite valores NULL.
  • FOREIGN KEY (customer_id) REFERENCES Customers(customer_id): Relaciona la columna customer_id de la tabla Orders con la columna customer_id de la tabla Customers.

Relaciones entre tablas

Este diseño relaciona las tablas Customers y Orders a través de customer_id. Esto permite realizar un seguimiento sencillo de todos los pedidos realizados por un cliente en particular.

Preguntas frecuentes sobre claves primaria y foránea

Muchas personas tienen dudas sobre las claves primaria y foránea. A continuación, presentamos algunas preguntas frecuentes y sus respuestas.

Pregunta 1: ¿Una clave primaria puede estar compuesta por varias columnas?

Respuesta: Sí, una clave primaria puede estar compuesta por varias columnas, lo que se conoce como clave compuesta (Composite Key). Por ejemplo, en la tabla Orders, se podría utilizar una combinación de order_id y product_id como clave primaria.

CREATE TABLE OrderDetails (  
    order_id INT NOT NULL,  
    product_id INT NOT NULL,  
    quantity INT,  
    PRIMARY KEY (order_id, product_id)  
);

Pregunta 2: ¿Una clave foránea puede referenciar cualquier columna de otra tabla?

Respuesta: Una clave foránea debe referenciar una clave primaria o única de otra tabla para mantener la integridad de los datos.

Pregunta 3: ¿Se puede modificar una clave primaria?

Respuesta: Es posible modificar una clave primaria, pero debe hacerse con precaución, evaluando primero el impacto sobre los datos existentes y las relaciones entre tablas.

Pregunta 4: ¿Es obligatorio establecer una clave foránea?

Respuesta: No es obligatorio establecer una clave foránea, pero hacerlo permite definir relaciones entre tablas y mantener la integridad de los datos.

Pregunta 5: ¿Una clave foránea puede contener valores NULL?

Respuesta: Una clave foránea puede contener valores NULL, lo que indica que no existe una relación para ese registro.

Utiliza estas preguntas y respuestas para profundizar tu comprensión sobre las claves primaria y foránea.

Ejercicios prácticos

A continuación, se proponen ejercicios prácticos para ayudarte a comprender de manera más profunda el uso de claves primaria y foránea en el diseño de bases de datos.

Ejercicio 1: Creación de tablas

Crea una tabla Products que cumpla con los siguientes requisitos:

  • Establece product_id como clave primaria.
  • product_name no debe permitir valores NULL.
  • price puede permitir valores NULL.
-- Inserta tu respuesta aquí  
CREATE TABLE Products (  
    product_id INT NOT NULL,  
    product_name VARCHAR(100) NOT NULL,  
    price DECIMAL(10, 2),  
    PRIMARY KEY (product_id)  
);

Ejercicio 2: Configuración de claves foráneas

Crea una tabla OrderItems y establece las siguientes relaciones con las tablas Orders y Products:

  • Establece order_item_id como clave primaria.
  • Establece order_id como clave foránea que referencia a order_id en la tabla Orders.
  • Establece product_id como clave foránea que referencia a product_id en la tabla Products.
-- Inserta tu respuesta aquí  
CREATE TABLE OrderItems (  
    order_item_id INT NOT NULL AUTO_INCREMENT,  
    order_id INT NOT NULL,  
    product_id INT NOT NULL,  
    quantity INT,  
    PRIMARY KEY (order_item_id),  
    FOREIGN KEY (order_id) REFERENCES Orders(order_id),  
    FOREIGN KEY (product_id) REFERENCES Products(product_id)  
);

Ejercicio 3: Inserción de datos y verificación de relaciones

Inserta datos en las tablas Customers, Orders y OrderItems, y verifica que las relaciones entre ellas funcionen correctamente.

-- Inserción de datos de ejemplo  
INSERT INTO Customers (customer_name, contact_email) VALUES ('John Doe', 'john@example.com');  
INSERT INTO Orders (order_date, customer_id) VALUES ('2024-06-05', 1);  
INSERT INTO Products (product_name, price) VALUES ('Laptop', 1000.00);  
INSERT INTO OrderItems (order_id, product_id, quantity) VALUES (1, 1, 2);  

-- Consulta para verificar relaciones  
SELECT * FROM Orders  
JOIN OrderItems ON Orders.order_id = OrderItems.order_id  
JOIN Products ON OrderItems.product_id = Products.product_id  
JOIN Customers ON Orders.customer_id = Customers.customer_id;

Estos ejercicios te ayudarán a poner en práctica la configuración y el uso de claves primaria y foránea en bases de datos reales.

Conclusión

Las claves primaria y foránea en SQL son elementos fundamentales en el diseño de bases de datos. La clave primaria identifica de manera única cada registro, mientras que la clave foránea establece relaciones entre tablas. Al configurar correctamente estas claves, es posible garantizar la integridad de los datos y una gestión eficiente de la información. Esperamos que este artículo te haya ayudado a comprender mejor la definición, el rol y los métodos de configuración de estas claves, y que puedas aplicar este conocimiento en tus propios diseños de bases de datos.

Índice