Estoy creando una tabla de base de datos y no tengo asignada una clave primaria lógica. Entonces, estoy pensando en dejarlo sin una clave principal, pero me siento un poco culpable por eso. ¿Debería?
¿Deberían todas y cada una de las tablas tener una clave primaria?
database
database-design
Daniel Silveira
fuente
fuente
Respuestas:
Respuesta corta: sí .
Respuesta larga:
En MySQL, el motor de almacenamiento InnoDB siempre crea una clave principal si no la especificó explícitamente, lo que crea una columna adicional a la que no tiene acceso.
Tenga en cuenta que una clave primaria puede ser compuesta.
Si tiene una tabla de enlaces de muchos a muchos, crea la clave principal en todos los campos involucrados en el enlace. Por lo tanto, se asegura de no tener dos o más registros que describan un enlace.
Además de los problemas de coherencia lógica, la mayoría de los motores RDBMS se beneficiarán al incluir estos campos en un índice único.
Y dado que cualquier clave primaria implica la creación de un índice único, debe declararlo y obtener consistencia lógica y rendimiento.
Vea este artículo en mi blog para saber por qué siempre debe crear un índice único sobre datos únicos:
PD: Hay algunos casos muy, muy especiales en los que no necesita una clave principal.
Principalmente incluyen tablas de registro que no tienen ningún índice por razones de rendimiento.
fuente
Siempre es mejor tener una clave principal. De esta manera, cumple con la primera forma normal y le permite continuar a lo largo de la ruta de normalización de la base de datos .
Como han dicho otros, hay algunas razones para no tener una clave principal, pero la mayoría no se verá perjudicada si hay una clave principal
fuente
Casi siempre que he creado una tabla sin una clave principal, pensando que no la necesitaría, terminé volviendo y agregando una. Ahora creo incluso mis tablas de unión con un campo de identidad generado automáticamente que utilizo como clave principal.
fuente
Excepto por algunos casos muy raros (posiblemente una tabla de relación de muchos a muchos, o una tabla que usa temporalmente para cargar grandes cantidades de datos), diría lo siguiente:
Bagazo
fuente
¿Alguna vez necesitarás unir esta tabla a otras tablas? ¿Necesita una forma de identificar un registro de forma exclusiva? Si la respuesta es sí, necesita una clave principal. Suponga que sus datos son algo así como una tabla de clientes que tiene los nombres de las personas que son clientes. Es posible que no haya una clave natural porque necesita las direcciones, correos electrónicos, números de teléfono, etc. para determinar si este Sally Smith es diferente de ese Sally Smith y almacenará esa información en tablas relacionadas, ya que la persona puede tener múltiples teléfonos, direcciones , correos electrónicos, etc. Supongamos que Sally Smith se casa con John Jones y se convierte en Sally Jones. Si no tiene una clave artificial sobre la mesa, cuando actualiza el nombre, simplemente cambió 7 Sally Smiths a Sally Jones a pesar de que solo uno de ellos se casó y cambió su nombre.
Dices que no tienes una clave natural, por lo tanto, tampoco tienes ninguna combinación de campo para hacerla única, esto hace que la clave artificial sea crítica.
Siempre que no tengo una clave natural, una clave artificial es imprescindible para mantener la integridad de los datos. Si tiene una clave natural, puede usarla como el campo clave en su lugar. Pero personalmente, a menos que la clave natural sea un campo, todavía prefiero una clave artificial e índice único en la clave natural. Te arrepentirás más tarde si no pones uno.
fuente
Simplemente agréguelo, lo lamentará más tarde cuando no lo hizo (selección, eliminación, vinculación, etc.)
fuente
Es una buena práctica tener un PK en cada mesa, pero no es NECESARIO. Lo más probable es que necesite un índice único y / o un índice agrupado (que sea PK o no) dependiendo de su necesidad.
Consulte las secciones Claves principales e índices agrupados en los Libros en línea (para SQL Server)
"Las restricciones de CLAVE PRIMARIA identifican la columna o el conjunto de columnas que tienen valores que identifican de forma exclusiva una fila en una tabla. No hay dos filas en una tabla que puedan tener el mismo valor de clave primaria. No puede ingresar NULL para ninguna columna en una clave primaria. Se recomienda utilizar una columna entera pequeña como clave principal. Cada tabla debe tener una clave primaria. Una columna o combinación de columnas que califican como valor de clave primaria se denomina clave candidata. "
Pero luego vea esto también: http://www.aisintl.com/case/primary_and_foreign_key.html
fuente
No estoy de acuerdo con la respuesta sugerida. La respuesta corta es: NO .
El propósito de la clave primaria es identificar de forma exclusiva una fila en la tabla para formar una relación con otra tabla. Tradicionalmente, se usa un valor entero auto-incrementado para este propósito, pero hay variaciones a esto.
Sin embargo, hay casos, por ejemplo, el registro de datos de series de tiempo, en los que la existencia de dicha clave simplemente no es necesaria y solo ocupa memoria. Hacer una fila única es simplemente ... ¡no es obligatorio!
Un pequeño ejemplo: Tabla A: LogData
No se necesita clave principal.
Tabla B: Usuario
La clave primaria (Id) necesaria para ser utilizada como una "clave externa" para la tabla LogData.
fuente
Sé que para usar ciertas características de la vista de cuadrícula en .NET, necesita una clave principal para que la vista de cuadrícula sepa qué fila necesita actualizarse / eliminarse. La práctica general debe ser tener una clave primaria o un grupo de claves primarias. Yo personalmente prefiero lo primero.
fuente
Para que sea una prueba de futuro, realmente deberías. Si desea replicarlo, necesitará uno. Si quieres unirlo a otra mesa, tu vida (y la de los pobres tontos que tienen que mantenerla el próximo año) será mucho más fácil.
fuente
Siempre tengo una clave principal, incluso si al principio todavía no tengo un propósito en mente para ello. Ha habido algunas ocasiones en que eventualmente necesito un PK en una tabla que no tiene uno y siempre es más difícil ponerlo más tarde. Creo que hay más ventajas al incluir siempre uno.
fuente
Estoy en el papel de mantener la aplicación creada por el equipo de desarrollo offshore. Ahora tengo todo tipo de problemas en la aplicación porque el esquema original de la base de datos no contenía CLAVES PRIMARIAS en algunas tablas. Por lo tanto, no permita que otras personas sufran debido a su mal diseño. Siempre es una buena idea tener claves primarias en las tablas.
fuente
En resumen, no. Sin embargo, debe tener en cuenta que ciertas operaciones CRUD de acceso de cliente lo requieren. Para futuras pruebas, tiendo a utilizar siempre claves primarias.
fuente
Si está utilizando Hibernate, no es posible crear una Entidad sin una clave principal. Estos problemas pueden crear problemas si está trabajando con una base de datos existente que se creó con scripts sql / ddl simples, y no se agregó ninguna clave principal
fuente