Claves naturales vs. Claves subrogadas

Las claves que definen la relación entre las tablas de ventas y de clientes (el nombre del cliente) es una clave con significado en el mundo real, con significado “de negocio”: es el nombre del cliente. Otras claves con significado en el mundo real sería el DNI de una persona, o el nombre de un producto. Este tipo de claves se denominan claves naturales o claves de negocio.

Sin embargo, estas claves naturales suelen ser claves formadas por textos, y los textos no son buenos candidatos para determinar la relación entre tablas pues trabajar con ellos (para hacer búsquedas, por ejemplo) suele ser mucho menos eficiente que trabajar con números.

Es por ello por lo que, normalmente, se suele añadir a las tablas otra columna formada -frecuentemente- por simples números naturales asignados de forma secuencial de 0 o 1 en adelante que también sirva para identificar de forma unívoca a una fila (es decir, que también sean claves primarias), pero con las ventajas que tiene trabajar con números. Eso sí, son claves sin significado en el mundo real: “Juan” tiene significado de negocio. El número 1 no lo tiene cuando lo usamos para representar a Juan. Pues bien, este tipo de claves primarias sin significado en el mundo real se denominan claves subrogadas, claves artificiales o claves sustitutas.

Por ejemplo, podríamos añadir a nuestra tabla de clientes una nueva columna con una asignación automática de números a cada cliente:

Customers table

Ahora, el campo “Customer” sigue siendo una clave primaria (y natural), y el campo “Customer Id” es también una clave primaria (subrogada) que, si queremos aprovecharnos de las ventajas que supone, será la que usemos para definir la relación entre esta tabla y la de ventas. En esta última, por cierto, tendremos que añadir una nueva columna con el identificador de cliente que ha hecho cada compra (es decir, con la clave externa correspondiente), y podríamos eliminar el antiguo campo “Customer” que contenía el nombre (pues esta información ya está contenida en la tabla de clientes):

Sales and Customers tables

Para saber el nombre del cliente que hizo la primera compra, ahora tendríamos que fijarnos en el valor del campo “Customer Id” de la primera fila de la tabla de ventas (el “1”) y buscar ese identificador en la columna “Customer Id” de la tabla de clientes: el cliente fue Juan y vive en Madrid.