Clave o llave primaria
Llave primaria, clave primaria o primary key es aquel campo (o conjunto de ellos) que identifica de manera única los registros dentro de una tabla. Con sólo conocer el valor de la clave primaria para un determinado registro será suficiente para identificarlo de manera única. Se le denota regularmente con una PK al lado del nombre en un diagrama de entidad-relación
Esta definición contiene varios elementos que son importantes de destacar:
La llave primaria está asociada a una tabla
Esta es una característica asociada a las tablas, es decir, cada tabla tendrá su llave primaria para que cada tabla tenga una manera inequívoca de hacer referencia a todos y cada uno de los registros que contienen. Una vez que se establece la llave primaria, el motor de base de datos verificará permanentemente que no haya dos registros con la misma llave primaria, podrían repetirse todos los demás campos, pero la llave primaria será siempre única y no hay manera posible de que dos registros tengan la misma llave principal.
Es un campo o varios campos
Si bien lo más común (por ser lo más práctico) es que la llave primaria esté compuesto de un solo campo, tampoco es raro que la llave primaria se forma de varios campos. Existen algunas recomendaciones que se verán más adelante para determinar qué campo o campos formarán la primary key de la tabla.
Ubica de manera única a los registros.
En una tabla donde puedan existir dos registros exactamente iguales (todos los campos tienen los mismos valores) de qué manera se podría eliminar solo uno de ellos o cambiarlo… sería imposible. Por eso en la Regla 1 de las Reglas de Codd se establece que todo valor es «direccionable» nombrando la tabla y la llave primaria de la tabla. Es por eso que resulta una buena práctica del diseño de base de datos (y es una de las Formas normales) el que todas las tablas tengan llave primaria.
Existirán casos -excepcionales por lo raro que son- en la que habrá tablas sin llave primaria, pero no es lo normal ni lo recomandable.
¿Cómo definir o encontar la llave primaria de una tabla?
Encontar cuál será la llave primaria de una tabla es una tarea muy sencilla, si se detectarron previamente las llaves candidatas, ya que lo que se tiene que hacer es escoger, de todas las llaves candidatas, la mejor. Recordemos que las llaves candidatas son todas aquellos campos (individuales o conjunto de ellos) que le dan unicidad al registro (que es una de las características de la llave primaria).
La definición de una llave primaria puede cambiar entonces a «la mejor de las llaves candidatas«. Y para determinar cuál es se debe considerar, entre todas las candidatas:
La más corta. Si existen varias llaves candidatas (una de 3 campos, una de 2 campos y otra de un solo campo) se escogerá aquella que esté formada por el menor número de campos. Esto también debe considerar el tamaño que ocupa cada campo (si hay dos llaves candidatas -uno de tipo texto y otra numérica– se deberá escoger la que ocupa menos bytes en su almacenamiento).
En caso de ser del mismo tamaño, se deberá seleccionar primero a los tipos de dato numéricos sobre los demás.
Ejemplos
Utilizando los mismos ejemplos de cuando se revisaron las llaves candidatas, tenemor los siguientes 3 ejemplos
Tabla de alumnos
Recordemos que la tabla que se utilizó tiene los siguientes campos
- Nombre
- Primer apellido
- Segundo apellido
- Domicilio completo (desde ciudad hasta casa)
- Fecha de nacimiento
- Nivel que cursa actualmente
- Número de boleta
- Sexo
- Nombre completo del padre o tutor
- Tipo de sangre
- Nombre completo del profesor titular
Se detectaron las llaves candidatas siguientes
- Número de boleta
- Nombre + Primer apellido + Segundo apellido
En ese caso lo ideal es escoger el Número de boleta por que es la única llave candidata de un solo campo, la otra está conformada por 3 campos texto.
Tabla de empleados
Los campos, de acuerdo al ejemplo de la entrada sobre llaves candidatas son
- RFC
- CURP
- Nombre
- Apellido paterno
- Apellido materno
- Fecha de ingreso
- Fecha de nacimiento
- Puesto ocupado
- Sueldo mensual
- Área de adscripción
- Número de empleado
Y las llaves candidatas detectadas son
- RFC
- CURP
- Nombre + Apellido paterno + Apellido materno
- Número de empleado
En este caso existe una llave candidata de tres campos que se descartarían ya que las otras llaves candidatas son de menos campos (de uno solo, de hecho).
De las tres llaves candidatas que son de un solo campo -RFC, CURP y Número de empleado- las primeras dos son de tipo texto (de 13 y 18 caracteres para RFC y CURP respectivamente) y el número de empleado es un valor numérico entero, por lo que este último deberá ser seleccionado como llave primaria de la tabla de empleados.
¿Qué hacer una vez detectadas las llaves candidatas?
Una vez que se detectó la llave primaria ¿cómo le hacemos saber eso a la base de datos para que se asegure que no habrá valores repetidos? Se deberá configurar la tabla para definir el campo o campos que serán la llave primaria. Esto se puede hacer al momento de la creación de la tabla o posteriormente. He aquí un ejemplo de creación de dos tablas, cada una con su llave primaria definida
CREATE TABLE marcas ( cve_marca INT NOT NULL, marca VARCHAR (100) CONSTRAINT pk_marcas PRIMARY KEY (cve_marca) ); CREATE TABLE presentaciones ( cve_presentacion INT NOT NULL, presentacion VARCHAR(100) NOT NULL, CONSTRAINT pk_presentaciones PRIMARY KEY (cve_presentacion) );