2011-03-31 14 views
12

¿Alguna vez sucederá que diseñemos una tabla que no necesite una clave principal?¿Cuándo no necesitamos una clave principal para nuestra tabla?

+9

Cuando solo tiene una fila en la tabla –

+0

@Shakti @EBAG, esto es cierto, pero 1) ¿Cuándo sucede esto? y, 2) sería una mala práctica limitar sus datos a tener siempre una fila.Mejor diseñar la base de datos con el futuro en mente. Estoy seguro de que estaba bromeando, pero si la pregunta es legítima, entonces EBAG necesita saber que incluso con una sola fila, ninguna clave principal es una mala idea. – rockerest

+1

@rockerest: cuando desee tener una tabla que represente varias opciones de configuración. Desea utilizar columnas diferentes para que los tipos de datos apropiados se utilicen para cada opción (por ejemplo, si desea un valor de reintentos para algo, se almacena como un int). En ese caso, desea asegurarse de que solo haya una sola fila. Por supuesto, en ese caso, la clave primaria ideal (teórica) sería una sin columnas, pero no conozco ningún producto SQL que le permita declararlo. –

Respuesta

19

La clave principal hace un montón de cosas detrás de las escenas, incluso si su aplicación nunca lo usa. Por ejemplo, clustering mejora la eficiencia (porque heap tables son un desastre).

Sin mencionar, si ALGUIEN alguna vez tiene que hacer algo en su mesa que requiera tirar una fila específica y no tiene una clave principal, usted es el malo.

+0

De acuerdo: solo agrega la clave principal y no lo pienses más. –

1

La clave principal no es obligatoria, pero no es una buena práctica crear tablas sin clave principal. DBMS crea un índice automático en PK, pero puede hacer que una columna sea única e indexarla, p. user_name columna en users tabla generalmente se hacen únicos e indexados, por lo que puede optar por omitir PK aquí. Pero es sigue siendo una mala idea porque PK se puede utilizar como clave externa para la integridad referencial.

En general, usted debe casi siempre tener PK en una tabla a menos que tenga una razón muy fuerte para justificar el no tener una PK.

Las tablas de enlaces (en una relación de muchos a muchos) pueden no tener una clave principal. Pero, personalmente, me gusta tener PK en esas tablas también.

+0

También agrego un PK a mis tablas de muchos a muchos. No estoy seguro por qué, pero me siento "más seguro" con ellos :) – rockerest

+0

@rockerest mismo aquí. :) – Nishant

+1

¡Las tablas de muchos a muchos también deben tener una clave principal! No porque se sienta más seguro, sino para tener una forma rápida de identificar los registros. Tal como lo necesita en (casi) todas las demás tablas, como se describe en las otras respuestas. –

6

Sí.

Si tiene una tabla que siempre se buscará completamente, y se hace referencia a ninguna otra tabla, como algún tipo de configuración autónoma o tabla de configuración, no tiene sentido tener una clave principal, y el algunos podrían argumentar que agregar un PK en esta situación sería una decepción del uso normal de tal tabla.

Es raro , y probablemente cuando se realiza con mayor frecuencia que se hace erróneamente, pero existen, y tales casos puede ser válido.

+0

¿Por qué querrías filas duplicadas en dicha tabla? Cuando dices que nunca quieres "buscar" filas individuales, ¿eso significa que nunca quieres actualizarlas y que reemplazarías cada fila por cada cambio en los datos? ¿O quiere decir que los datos son de solo lectura? – sqlvogel

+0

@dportas: todo lo que dijiste. '' unique'' es una forma de evitar filas duplicadas. No tener un PK es una forma de indicar que esta tabla nunca debe ser referida desde otra tabla. El caso de uso más común para esto (y, en general, las tablas sin clave son muy poco comunes) es la clásica tabla de configuraciones de registro único. No creo que sea "bueno" omitir la definición de PK, pero es incorrecto exigir que cada tabla tenga uno. Si fuera así, no tendríamos la opción. –

+0

@crjh: estoy de acuerdo en que una clave "primaria" siempre es superflua. Mi interpretación de su respuesta fue que usted quiso decir "sin clave". Si quería decir: "una tabla debe tener al menos una clave candidata, una de las cuales puede ser llamada principal o no", entonces estoy de acuerdo. Una tabla restringida para tener una fila no es una excepción porque implícitamente tiene una clave (vacía). – sqlvogel

3

Depende.

¿Qué es la clave principal/clave única?

En el diseño de bases de datos relacionales, una clave única puede identificar de forma única cada fila en una tabla, y está estrechamente relacionada con el concepto de Superkey. Una clave única comprende una sola columna o un conjunto de columnas. No hay dos filas distintas en una tabla que puedan tener el mismo valor (o combinación de valores) en esas columnas si no se utilizan los valores NULL. Dependiendo de su diseño, una tabla puede tener arbitrariamente muchas claves únicas, pero a lo sumo una clave principal.

Por lo tanto, cuando no se tiene que diferenciar (únicamente identificar) cada fila,
que no tienen que usar la clave primaria

Por ejemplo, una mesa grande para los registros, sin
utilizando la clave principal, puede tener un tamaño de datos bastante más pequeño y más rápido para la inserción

+1

... pero mucho más lento para la recuperación. Volver a la discusión sobre tablas agrupadas versus agrupadas. Si no hay una clave principal, recuperar algo de la tabla llevará mucho más tiempo. – rockerest

Cuestiones relacionadas