Definamos primero el concepto de llave candidata. Digamos que el atributo 76#76 de la relación 17#17 es llave candidata si cumple:
Por supuesto, la combinación de todos los atributos es una llave candidata y pueden existir combinaciones de atributos que den llaves candidatas, e incluso con diferentes longitudes. Es decir, podemos tener una llave 82#82 compuesta de tres atributos y otra llave 83#83 de dos atributos. De esta manera, siempre es posible encontrar al menos una llave candidata.
De esto deducimos que como toda relación tiene al menos una llave candidata, entonces toda relación tiene una llave primaria. Como deducirla queda fuera de toda metodología no podemos dar una regla general. Habrá ocasiones en que incluso es necesario construir una llave primaria, como un número secuencial o el más conocido RFC. En el caso de Hacienda, es obvio que una llave primaria podría ser la combinación del nombre, domicilio y edad, pero esta sería una llave muy torpe. ¿Han pensado cuántos posibles RFC existen? ¿Cuál es la probabilidad de colisión en esta llave? Es un bonito ejercicio y queda al lector pensar porqué la SHCP se vió en la necesidad de añadir tres carácteres al RFC --los conocidos como homoclave-- y las posibles maneras de generar dicha homoclave.
Otro ejemplo, para el hipotético Registro Estatal de Automóviles de Cuévano5.2, el número de serie del vehículo en combinación con la marca y el modelo; la marca, el color y nombre del dueño5.3; y la matrícula, son llaves candidatas. Pero de entre estas tres llaves candidatas, nos basta con la matrícula porque cumple perfectamente con las dos condiciones y además no es compuesta, con el consecuente ahorro de espacio y tiempo de cómputo. Las otras dos pasan a ser llaves alternas.
La importancia de las llaves primarias se comprenderá mejor con la exposición de las llaves foráneas, pero además las llaves primarias constituyen el mecanismo de direccionamiento a nivel de tuplas en el modelo relacional. Es decir, es el único modo de acceder a una tupla específica. Por ejemplo, la consulta:
SELECT * FROM padron_vehicular WHERE placa = 'ABC123'
regresa una sola tupla mientras que las consultas
SELECT * FROM padron_vehicular WHERE nombre = 'José' AND apepat = 'Hernández' AND apemat = 'García'
y
SELECT * FROM padron_vehicular WHERE color_vehiculo = 'Rojo'
probablemente regresen una centena o más o de tuplas, aún en el caso de un estado pequeño como Cuévano.
En resúmen, de todas las llaves candidatas, la más adecuada para llave primaria es la llave candidata de menor grado.