¿Qué es PK y FK en SQL?

PK y FK en SQL: Claves para Bases de Datos

Valoración: 4.09 (7816 votos)

En el vasto universo de las bases de datos relacionales, existen conceptos fundamentales que actúan como los pilares sobre los que se construye toda la estructura y se asegura la integridad de la información. Entre estos conceptos, destacan de manera prominente las Claves Primarias (Primary Key o PK) y las Claves Foráneas (Foreign Key o FK). Comprender su función, sus diferencias y cómo interactúan es esencial para cualquier persona que trabaje con datos, desde desarrolladores hasta administradores de bases de datos.

Imagina una biblioteca perfectamente organizada. Cada libro tiene un identificador único (quizás un ISBN o un número de inventario) que permite encontrarlo sin ambigüedad. Esta es la idea detrás de una Clave Primaria. Ahora, piensa en la sección de autores. Cada autor tiene un identificador, y en la ficha de cada libro, se hace referencia a este identificador del autor para saber quién lo escribió. Esta referencia cruzada es similar a una Clave Foránea. Estos elementos no solo identifican registros, sino que también tejen la red de relaciones que da sentido a la información almacenada.

¿Qué es PK y FK en Access?
En la tabla Clientes, es la clave principal. En la tabla Pedidos, se denomina clave externa. Una clave externa, en pocas palabras, es la clave principal de otra tabla . Para más información, consulte Fundamentos del diseño de bases de datos.
Índice de Contenido

¿Qué es una Clave Primaria (Primary Key o PK)?

La Clave Primaria es, sin duda, uno de los conceptos más importantes en el diseño de bases de datos relacionales. Su propósito principal es garantizar la unicidad de cada registro dentro de una tabla específica. Es un campo o un conjunto de campos cuyos valores identifican de manera única cada fila de la tabla.

Las características esenciales de una Clave Primaria son:

  • Unicidad: Cada valor en la columna (o combinación de columnas) definida como Clave Primaria debe ser único en toda la tabla. No puede haber dos filas con el mismo valor de PK.
  • No Nulidad (NOT NULL): Una Clave Primaria no puede contener valores nulos (NULL). Cada registro debe tener un valor definido para su PK.
  • Una por Tabla: Aunque una PK puede estar compuesta por múltiples columnas (clave compuesta), una tabla solo puede tener una única Clave Primaria definida.

La Clave Primaria actúa como el identificador principal de cada entidad representada por la tabla. Es el punto de acceso garantizado para recuperar, actualizar o eliminar un registro específico sin afectar a otros.

Por ejemplo, en una tabla de `Clientes`, el ID del cliente (`cliente_id`) podría ser la Clave Primaria. Cada cliente tendrá un `cliente_id` único y no nulo, permitiendo distinguir a un cliente de otro.

¿Qué es una Clave Foránea (Foreign Key o FK)?

Mientras que la Clave Primaria se enfoca en la unicidad dentro de una tabla, la Clave Foránea se centra en establecer relaciones entre tablas. Una Clave Foránea es un campo o conjunto de campos en una tabla (la tabla "hija" o referenciadora) que hace referencia a la Clave Primaria (o a una clave candidata/alterna) en otra tabla (la tabla "padre" o referenciada).

El objetivo fundamental de una Clave Foránea es mantener la integridad referencial. Esto significa que asegura que la relación entre los datos en dos tablas sea válida y se mantenga coherente. Una FK garantiza que cualquier valor presente en la columna FK de la tabla hija debe existir como un valor de PK en la tabla padre a la que hace referencia.

Características de una Clave Foránea:

  • Establece Relaciones: Vincula registros entre dos tablas, indicando que un registro en la tabla hija está relacionado con un registro específico en la tabla padre.
  • Referencia a PK (o AK): Siempre apunta a una Clave Primaria (o una clave candidata/alterna) en otra tabla.
  • Puede Contener Nulos: A diferencia de la PK, una FK puede contener valores nulos, a menos que se especifique lo contrario (por ejemplo, si la relación es obligatoria). Un valor nulo en una FK generalmente indica que el registro en la tabla hija no está asociado con ningún registro en la tabla padre en ese momento.
  • Múltiples por Tabla: Una tabla puede tener varias Claves Foráneas, haciendo referencia a diferentes tablas padre.

Siguiendo el ejemplo anterior, si tenemos una tabla `Pedidos`, esta tabla probablemente necesitará saber qué cliente realizó cada pedido. Un campo `cliente_id` en la tabla `Pedidos` (la tabla hija) que haga referencia al `cliente_id` en la tabla `Clientes` (la tabla padre) sería la Clave Foránea. Esta FK asegura que solo se puedan crear pedidos para clientes que realmente existen en la tabla `Clientes`.

Diferencias Clave entre Primary Key y Foreign Key

Aunque ambas son tipos de claves y esenciales para el diseño de bases de datos, sus roles y características son distintos. Aquí se presenta una comparación directa:

CaracterísticaClave Primaria (PK)Clave Foránea (FK)
Propósito PrincipalGarantizar la unicidad de cada registro dentro de una tabla. Identificar unívocamente filas.Establecer y mantener relaciones entre tablas. Asegurar la integridad referencial.
Unicidad de ValoresLos valores deben ser únicos dentro de la tabla.Los valores pueden repetirse dentro de la tabla (ya que varios registros pueden relacionarse con el mismo registro padre).
Valores Nulos (NULL)No permite valores nulos. Es NOT NULL por definición.Permite valores nulos, a menos que se especifique lo contrario.
Número por TablaSolo puede haber una Clave Primaria por tabla.Una tabla puede tener múltiples Claves Foráneas.
ReferenciaNo hace referencia a otra tabla (se identifica a sí misma).Hace referencia a una Clave Primaria (o a veces una clave alterna) en otra tabla.
Identificación de RegistrosIdentifica de forma única un registro dentro de su tabla.Identifica un registro en otra tabla al cual se relaciona el registro actual.
Restricciones en Tablas TemporalesSe pueden definir restricciones de PK en tablas temporales.Generalmente, las restricciones de FK no se pueden definir en tablas temporales globales o locales.

PK y FK en el Modelo de Datos Relacional

En el contexto del diseño de bases de datos, representado a menudo mediante diagramas de modelo de datos, las PK y FK tienen representaciones visuales y conceptuales claras. Un modelo de datos relacional muestra las tablas, sus atributos (columnas), los tipos de datos, si los atributos son obligatorios (NOT NULL), y lo más importante, las relaciones entre las tablas.

En estos diagramas:

  • La Clave Primaria (PK) se suele indicar junto al nombre del atributo que la constituye, a menudo con la etiqueta "(PK)".
  • La Clave Foránea (FK) también se indica junto al atributo, a menudo con la etiqueta "(FK)". Lo crucial es cómo se representan las relaciones que estas FKs hacen posibles.

Las relaciones entre tablas se dibujan como líneas que conectan la tabla hija (donde está la FK) con la tabla padre (donde está la PK referenciada). El tipo de línea y los símbolos en los extremos indican la cardinalidad de la relación (uno-a-uno, uno-a-muchos, muchos-a-muchos) y si la relación es obligatoria u opcional.

Relaciones Identificadoras vs. No Identificadoras

El tipo de relación representada en el modelo también influye en cómo se manejan las claves:

  • Relación No Identificadora: Se representa típicamente con una línea discontinua. En este caso, la Clave Primaria de la tabla padre se convierte en una Clave Foránea en la tabla hija, pero la tabla hija tiene su propia Clave Primaria independiente. La FK en la tabla hija no forma parte de su propia Clave Primaria. El ejemplo del `cliente_id` en `Pedidos` es una relación no identificadora; `Pedidos` tiene su propio `pedido_id` como PK, y `cliente_id` es una FK.
  • Relación Identificadora: Se representa con una línea continua. En este tipo de relación, la Clave Primaria de la tabla padre se convierte en parte de la Clave Primaria de la tabla hija. Esto ocurre a menudo en tablas de detalle o tablas que dependen completamente de la existencia de la fila padre, o en tablas de intersección (para resolver relaciones muchos-a-muchos). En estos casos, la FK es también parte de la PK de la tabla hija, a veces denominada Clave Foránea Primaria (PFK).

Comprender estas representaciones visuales ayuda enormemente a interpretar la estructura de la base de datos y el papel de las PK y FK en ella.

¿Qué significa PK en base de datos?
Símbolo: PK (de sus siglas en ingles Primary Key), cumple con las siguientes características: No debe aceptar valores nulos.

Importancia de PK y FK en el Diseño de Bases de Datos

La correcta definición y uso de Claves Primarias y Claves Foráneas son cruciales por varias razones:

  • Integridad de los Datos: Son la base para mantener la coherencia y exactitud de la información. Previenen la inserción de registros duplicados (gracias a la PK) y aseguran que las referencias entre tablas sean válidas (gracias a la FK). Esto evita "registros huérfanos" (registros hijos sin un padre correspondiente).
  • Organización y Estructura: Definen la estructura relacional, mostrando cómo las diferentes piezas de información (tablas) están conectadas entre sí.
  • Rendimiento: Las PK, al ser índices por defecto en la mayoría de los SGBD, mejoran el rendimiento de las consultas, especialmente al buscar registros específicos. Las FKs, aunque no siempre son índices por defecto, a menudo se indexan para mejorar el rendimiento de las operaciones de JOIN (unión de tablas).
  • Facilidad de Mantenimiento: Un esquema de base de datos bien diseñado con PKs y FKs claras es más fácil de entender, mantener y modificar a lo largo del tiempo.
  • Base para Operaciones SQL: Operaciones comunes como `JOIN` (para combinar datos de tablas relacionadas) dependen directamente de la existencia de Claves Foráneas que vinculen las tablas.

Ejemplos Prácticos en SQL

Definir PKs y FKs es parte del proceso de creación de tablas en SQL. Aquí vemos cómo se haría:

CREATE TABLE Clientes ( cliente_id INT PRIMARY KEY, -- Define cliente_id como Clave Primaria nombre VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE );

En este ejemplo, `cliente_id` es la PK. Es un entero (`INT`) y se especifica que es la `PRIMARY KEY`. La cláusula `NOT NULL` es implícita para una PK.

Ahora, creamos la tabla `Pedidos` con una FK que referencia a `Clientes`:

CREATE TABLE Pedidos ( pedido_id INT PRIMARY KEY, -- PK para la tabla Pedidos cliente_id INT, -- Campo para almacenar la referencia al cliente fecha_pedido DATE, total DECIMAL(10, 2), FOREIGN KEY (cliente_id) REFERENCES Clientes(cliente_id) -- Define cliente_id como FK referenciando a Clientes );

Aquí, `pedido_id` es la PK de `Pedidos`. El campo `cliente_id` no es la PK de esta tabla, pero se define como `FOREIGN KEY` que `REFERENCES` la tabla `Clientes` y específicamente la columna `cliente_id` en esa tabla. Esto establece la relación uno-a-muchos (un cliente puede tener muchos pedidos).

Se pueden añadir opciones a las FKs para controlar qué sucede cuando se intenta eliminar o actualizar un registro en la tabla padre que tiene registros hijos relacionados. Las opciones comunes son:

  • `ON DELETE CASCADE`: Si se elimina un cliente, se eliminan automáticamente todos sus pedidos.
  • `ON DELETE SET NULL`: Si se elimina un cliente, el `cliente_id` en sus pedidos se establece a NULL.
  • `ON DELETE RESTRICT` (por defecto en muchos SGBD): No permite eliminar un cliente si tiene pedidos asociados.
  • `ON UPDATE CASCADE`: Si el `cliente_id` cambia en la tabla Clientes, se actualiza automáticamente en la tabla Pedidos.

CREATE TABLE Pedidos ( pedido_id INT PRIMARY KEY, cliente_id INT, fecha_pedido DATE, total DECIMAL(10, 2), FOREIGN KEY (cliente_id) REFERENCES Clientes(cliente_id) ON DELETE CASCADE ON UPDATE CASCADE );

Preguntas Frecuentes sobre PK y FK

¿Puede una tabla no tener Clave Primaria?
Técnicamente, algunas bases de datos lo permiten, pero es una práctica de diseño muy pobre y no recomendada. Una tabla debe tener una PK para identificar unívocamente sus registros y garantizar la integridad de los datos.

¿Puede una Clave Foránea hacer referencia a otra columna que no sea una Clave Primaria?
Sí, una Clave Foránea puede hacer referencia a una columna que esté definida como una clave candidata o clave alterna (Alternate Key - AK) en la tabla padre, siempre y cuando esa columna tenga una restricción UNIQUE y NOT NULL.

¿Cuál es la diferencia entre una Clave Primaria y una Clave Única (Unique Key)?
Ambas garantizan la unicidad de los valores en la columna. La principal diferencia es que una tabla solo puede tener una Clave Primaria, mientras que puede tener múltiples Claves Únicas. Además, una Clave Primaria no permite valores nulos, mientras que una Clave Única sí puede permitir un único valor nulo (dependiendo del SGBD).

¿Es lo mismo una Clave Foránea que un índice?
No exactamente. Una Clave Foránea es una restricción de integridad referencial que define una relación. Un índice es una estructura de datos que mejora la velocidad de búsqueda y recuperación de datos. A menudo, se crea automáticamente un índice sobre las columnas de una Clave Foránea (o es una práctica recomendada) para optimizar el rendimiento de las consultas que involucran JOINs, pero conceptualmente son diferentes.

¿Cómo se manejan las relaciones muchos-a-muchos con PK y FK?
Las relaciones muchos-a-muchos (por ejemplo, muchos estudiantes pueden estar en muchos cursos) se resuelven creando una tabla intermedia (o tabla de unión/intersección). Esta tabla intermedia contiene Claves Foráneas que referencian las Claves Primarias de las dos tablas originales. La Clave Primaria de la tabla intermedia a menudo es una clave compuesta formada por las dos Claves Foráneas (o una combinación de ellas y un ID propio), lo que crea una relación identificadora donde las FKs son parte de la PK de la tabla de unión.

Comprender y aplicar correctamente los conceptos de Clave Primaria y Clave Foránea es un paso fundamental para diseñar bases de datos relacionales robustas, eficientes y con integridad de datos garantizada.

Si quieres conocer otros artículos parecidos a PK y FK en SQL: Claves para Bases de Datos puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir