En el modelo relacional, cualquier la columna o conjunto de columnas que se garantiza que están presentes y únicas en la tabla se puede llamar una clave candidata para la tabla. "Presente" significa "NO NULO". Es una práctica común en el diseño de la base de datos designar una de las claves candidatas como la clave principal, y usar referencias a la clave primaria para referirse a toda la fila, o al elemento temático que describe la fila.
En SQL, una restricción PRIMARY KEY equivale a una restricción NOT NULL para cada columna de clave principal, y una restricción UNIQUE para todas las columnas de clave primaria tomadas juntas. En la práctica, muchas claves principales resultan ser columnas individuales.
Para la mayoría de los productos DBMS, una restricción PRIMARY KEY también dará como resultado que se genere un índice automáticamente en las columnas de clave principal. Esto acelera la actividad de comprobación de sistemas cuando se realizan nuevas entradas para la clave principal, para asegurarse de que el nuevo valor no duplica un valor existente. También acelera las búsquedas basadas en el valor de la clave primaria y se une entre la clave principal y una clave externa que hace referencia a ella. Cuánta aceleración se produce depende de cómo funciona el optimizador de consultas.
Originalmente, los diseñadores de bases de datos relacionales buscaron claves naturales en los datos tal como se proporcionan. En los últimos años, la tendencia ha sido siempre crear una columna llamada ID, un entero como la primera columna y la clave principal de cada tabla. La característica de autogeneración del DBMS se utiliza para garantizar que esta clave sea única. Esta tendencia está documentada en los "estándares de diseño de Oslo".No es necesariamente un diseño relacional, pero sirve para algunas necesidades inmediatas de las personas que lo siguen. No recomiendo esta práctica, pero reconozco que es la práctica predominante.
Un índice es una estructura de datos que permite un acceso rápido a unas pocas filas en una tabla, basándose en una descripción de las columnas de la tabla que están indexadas. El índice consiste en copias de ciertas columnas de tabla, denominadas claves de índice, intercaladas con punteros a las filas de la tabla. Los punteros generalmente están ocultos a los usuarios de DBMS. Los índices funcionan en conjunto con el optimizador de consultas. El usuario especifica en SQL qué datos se buscan y el optimizador presenta estrategias de índice y otras estrategias para traducir lo que se busca en una estrategia para encontrarlo. Existe algún tipo de principio de organización, como clasificación o hash, que permite que un índice se use para búsquedas rápidas y ciertos otros usos. Todo esto es interno al DBMS, una vez que el generador de la base de datos ha creado el índice o declarado la clave primaria.
Se pueden generar índices que no tienen nada que ver con la clave principal. Una clave principal puede existir sin un índice, aunque esto generalmente es una muy mala idea.
¡gracias, has sido muy útil! Sin embargo, me preguntaba si configurar una columna como PK diferente de establecer una columna como entero único que autoincrementa. ¿Hace algo más bajo el capó? – Mala
He corregido para responder a su pregunta sobre las desventajas de los índices. Las claves primarias también funcionan como índices, por lo que cuando tienes un PK en una columna, todas las consultas para SELECT u ORDER BY basadas en esa identificación serán más rápidas. Además, se garantizará que cada 'id' sea único, por lo tanto, no tendrá identificaciones duplicadas como las que podría tener si solo tiene una columna INT que está actualizando. –
Una clave principal no necesita ser numérica, o un solo campo. y la columna de IDENTIDAD se ajustaría mejor a esa descripción. En cambio, una clave principal sirve para decirle al RDBMS que los campos especificados pueden identificar de manera única una sola fila en la tabla. Esencialmente un ÍNDICE ÚNICO. Es normal (pero no obligatorio) que las claves primarias sean también el factor de control en qué orden se almacenan los datos (Clave principal en clúster en SQLServer) y mejoran significativamente la toma de tiempo para encontrar filas de datos (para leer, escribir, lo que sea) – MatBailie