No veo una respuesta que señale (lo que considero) el punto realmente fundamental, es decir, que una clave primaria es lo que garantiza que no obtendrá dos entradas en la tabla para la misma entidad del mundo real (como modelado en la base de datos). Esta observación ayuda a establecer qué opciones son buenas y malas para la clave primaria.
Por ejemplo, en una tabla de códigos y nombres de estados (EE. UU.), El nombre o el código podría ser la clave principal; constituyen dos claves candidatas diferentes, y una de ellas (normalmente la más corta, el código) se elige Clave primaria. En la teoría de las dependencias funcionales (y las dependencias de unión - 1NF a 5NF - son las claves candidatas las que son cruciales en lugar de una clave primaria.
Como contraejemplo, los nombres humanos generalmente son una mala elección para la clave primaria. Hay muchas personas que se conocen con el nombre de "John Smith" o algunos otros nombres similares; incluso teniendo en cuenta los segundos nombres (recuerde: no todo el mundo tiene uno, por ejemplo, yo no), hay muchas posibilidades de duplicación. En consecuencia, la gente no usa nombres como claves primarias. Inventan claves artificiales como el número de seguro social (SSN) o el número de empleado y las utilizan para designar a la persona.
Una clave primaria ideal es breve, única, memorable y natural. De estas características, la singularidad es obligatoria; el resto tiene que ser flexible dadas las limitaciones de los datos del mundo real.
Cuando se trata de determinar la clave principal de una tabla dada, por lo tanto, debe observar lo que representa esa tabla. ¿Qué conjunto o conjuntos de valores de columna de la tabla identifican de forma única cada fila de la tabla? Esas son las claves candidatas. Ahora, si cada clave candidata consta de 4 o 5 columnas, entonces puede decidir que son demasiado torpes para hacer una buena clave primaria (principalmente por razones de brevedad). En esas circunstancias, puede introducir una clave sustituta, un número generado artificialmente. Muy a menudo (pero no siempre) un simple entero de 32 bits es suficiente para la clave sustituta. Luego, designa esta clave sustituta como clave principal.
Sin embargo, aún debe asegurarse de que las otras claves candidatas (porque la clave sustituta también es una clave candidata, así como la clave primaria elegida) se mantengan como un identificador único, normalmente colocando una restricción única en esos conjuntos de columnas.
A veces, a las personas les resulta difícil identificar qué es lo que hace que una fila sea única, pero debería haber algo para hacer eso, porque la simple repetición de una información no la hace más verdadera. Y si no tiene cuidado y obtiene dos (o más) filas que pretenden almacenar la misma información, y luego necesita actualizar la información, existe el peligro (especialmente si usa cursores) de que actualice solo una fila en lugar de cada fila, por lo que las filas no están sincronizadas y nadie sabe qué fila contiene la información correcta.
Esta es una opinión bastante dura, en algunos aspectos.
No tengo ningún problema en particular con el uso de un GUID cuando se necesitan, pero tienden a ser grandes (como en 16-64 bytes) y se usan con demasiada frecuencia. Muy a menudo, bastaría con un valor de 4 bytes perfectamente correcto. El uso de un GUID donde un valor de 4 bytes sería suficiente desperdicia espacio en disco y ralentiza incluso el acceso indexado a los datos, ya que hay menos valores por página de índice, por lo que el índice será más profundo y se deben leer más páginas para llegar al información.