es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo tener una única clave foránea para diferentes tablas en MySQL?

Digamos que tengo las siguientes tablas:

tabla_a

id | col_1 | col_2 | col_3

En la tabla_a, id es la clave primaria

tabla_b

id | col_1 | col_2 | col_3

En la tabla_b, id es la clave primaria

tabla_c

id | col_1 | col_2 | col_3 | entity_id | entity_table

En la tabla_c, id es la clave primaria, entity_id es la clave foránea a tabla_a o tabla_b y entity_table puede tener el valor de tabla_a o tabla_b.

Ahora, extrapolemos esto y supongamos que tenemos 10 tablas diferentes a las que entity_id puede tener claves foráneas.

Lo que estoy tratando de hacer es vincular entity_id a la tabla específica basándome en la columna entity_table, que proporciona el nombre de la tabla.

He investigado y parece que no podemos tener múltiples claves foráneas en una sola columna que apunten a múltiples tablas. ¿Cómo puedo resolver esto y cómo sería una buena solución?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución podría ser crear una nueva columna en tabla_c para cada posible clave foránea, nombrándolas algo como a_id, b_id, c_id, etc. Luego, en tabla_entidad, en lugar de almacenar el nombre real de la tabla, guardar un código para cada tabla. Por ejemplo, a para tabla_a, b para tabla_b, etc.

    Luego, en el código de tu aplicación, puedes usar un interruptor o una declaración if/else para determinar qué columna utilizar en función del valor en tabla_entidad. Por ejemplo, si tabla_entidad es a, utilizar la columna a_id como clave foránea.

    Otra alternativa sería crear una tabla separada que mapee cada código posible con el nombre de tabla y el nombre de columna correspondientes. De esta manera, podrías agregar nuevas tablas en el futuro sin tener que modificar el código de tu aplicación.

    En general, este enfoque requeriría más configuración inicial y posiblemente una lógica de aplicación más compleja, pero permitiría flexibilidad para agregar nuevas tablas en el futuro.

Comments are closed.