Para comprender realmente las claves, debe comprenderlas en tres niveles: conceptual, lógico y físico. Voy a revertir mi orden habitual y discutir primero lo físico.
La mayoría de los programadores tienden a pensar en el nivel físico. En el nivel físico, una clave es un sustituto (suplente) para la dirección de una fila. Cuando se debe hacer referencia a una fila, se puede usar una copia de la clave para especificar la fila. Cuando se hace una referencia a una fila en otra fila, la copia se conoce como una clave externa.
Los programadores más experimentados tienen un conocimiento profundo de los punteros y direcciones, y entenderían exactamente cómo funcionaba la estructura de datos si solo utilizara punteros y direcciones. Antes de que las bases de datos relacionales se volvieran dominantes, de hecho había bases de datos que usaban punteros a los registros incrustados en otros registros para unir los datos.
Una desventaja de utilizar claves en lugar de punteros es que el DBMS tiene que usar un índice para traducir una referencia de tecla a un puntero para recuperar la fila en cuestión. Una ventaja es que el nivel de indirección permite que el DBMS baraje todas las filas de una tabla para cualquier propósito, siempre que el DBMS actualice todos los índices relevantes en consecuencia.
Visto en este nivel, las claves también podrían ser simples, enteros y autoincrementadas. Funcionan más rápido que otros tipos de claves y evitan ciertos problemas de administración de datos que surgen cuando faltan los datos suministrados por el usuario o son inconsistentes. Sin embargo, eludir los problemas de administración de datos en este nivel puede crear un campo de minas en los dos niveles superiores.
En el nivel lógico, una clave es un subconjunto mínimo de los datos en una tupla (fila) que permite especificar una sola tupla coincidente, y cuando el DBMS recupera el contenedor para esa tupla, todos los atributos en el tupla ahora están disponibles. Cada relación tiene al menos una clave candidata. En el peor de los casos, la tupla completa es la única clave candidata. Cuando existen varias claves candidatas para una relación única (tabla), la práctica común es elegir una clave candidata como clave principal y hacer todas las referencias a través de esta clave primaria.
(En realidad, la relación y la tabla no son sinónimos, pero estoy simplificando aquí. Del mismo modo, tupla y la fila no son sinónimos, aunque parecen idénticos a primera vista.)
La razón principal para declarar una primaria La clave es descartar claves duplicadas o claves faltantes. A veces las personas de la base de datos eligen dejar duplicados y la ausencia de claves faltantes hasta los programadores cuyas aplicaciones escriben en la base de datos. Más comúnmente, una restricción de clave primaria sirve para reflejar un error de vuelta a un programa que infringe una restricción de clave primaria.
Cuando un DBMS configura una restricción de clave primaria, también crea un índice en la clave primaria. Esto permite que el DBMS encuentre duplicados rápidamente, y también acelera ciertas consultas que usan la (s) columna (s) clave.
En el nivel conceptual, las claves son el medio por el cual la comunidad de usuarios identifica instancias de entidades, ya sean personas (empleados, viajeros, etc.), cosas (cuentas bancarias, habitaciones de hotel, etc.) o lo que sea . La clave son los datos y la entidad identificada por la clave no es información. La clave se puede ver como un sustituto de la entidad en la base de datos.
En el nivel conceptual, las claves siempre son naturales, y el sistema nunca las suministra automáticamente. Sin embargo, en el mundo real, las claves a menudo se manejan mal, y las consecuencias de la mala gestión se ven superadas por lo que se llama "sentido común". Inculcar el sentido común en un sistema automatizado generalmente no es factible.
Nunca describí realmente un índice en lo anterior, pero está implícito en lo que dije. Un índice es una estructura de datos que sirve para asignar desde una clave a un puntero. En todas las bases de datos que es probable que use, los índices son declarados por el generador de bases de datos (o quizás un DBA) y administrados por el DBMS.
gracias, un entendimiento básico era todo lo que realmente estaba buscando, solo quería asegurarme de estar tomando la decisión correcta (y puedo seguir tomando la decisión correcta) cuando agrego una clave a una tabla –
Buena respuesta. FWIW, algunos RDBMS permiten múltiples NULL en columna (s) que tienen una restricción única. Y no cubriste claves extranjeras. –
Bill, dado que me acabo de dar cuenta de que el OP estaba preguntando específicamente sobre MySQL (que es uno de los RDBMS que permite múltiples NULL con restricciones ÚNICAS), modificaré mi respuesta ... tienes razón. Pero el OP no preguntó por claves extranjeras ... – delfuego