usar una tabla primaria poner modificar llave las hacer foraneas foranea eliminar declarar crear con compuesta como claves clave mysql foreign-keys primary-key foreign-key-relationship primary-key-design

una - llave foranea compuesta mysql



MySQL-Usando clave externa como clave principal tambiƩn (1)

Tengo la tabla 1 con una clave primaria user_id y la tabla 2 donde user_id es una clave externa.

Solo 1 registro por user_id puede existir en la tabla 2, y ningún registro puede existir sin él.

PREGUNTA: ¿ user_id en la tabla 2 puede ser clave tanto externa como primaria al mismo tiempo, y si es así, es una buena idea, cuáles son los pros / contras?


Sí, puede hacer esto (y debe hacerlo, desde el punto de vista del diseño de la base de datos).

Sin embargo, considere lo que significa si user_id es la clave principal en la tabla 2. En efecto, está diciendo que cada fila en la tabla 2 corresponde a un usuario, pero ya tiene una tabla donde cada fila corresponde a un usuario: tabla 1. Esto plantea la pregunta "¿por qué, entonces, no coloca todos los datos de la tabla 2 en columnas que admiten nulos en la tabla 1?". Después de todo, tener dos tablas significa que tendrá que hacer dos consultas para obtener estos datos en lugar de una.

Ahora hay algunos escenarios donde esta práctica podría ser una buena idea:

  • si tiene muchos usuarios pero solo unas pocas filas en la tabla 2, tal vez la consulta en la tabla 2 solo se realice rara vez; al mismo tiempo, gana espacio de almacenamiento y velocidad de modificación en la tabla 1
  • Es posible que en el futuro la clave principal de la tabla 2 cambie, mientras que la clave externa permanezca; Si coloca todos los datos en la tabla 1, esta modificación probablemente rompería el modelo de su base de datos.

Puede ser una buena idea, pero depende de los detalles de su aplicación.