Estoy en el proceso de crear una red social. Tiene varias entidades como noticias, fotos, que pueden tener comentarios. Como todos los comentarios tienen las mismas columnas y se comportan de la misma manera, y la única diferencia es su tipo - noticias, fotos o algo más que se agregará en el futuro - decidí crear una tabla para todos los comentarios con una columna llamada type
. Funcionó perfectamente hasta que decidí agregar claves externas a mi esquema de base de datos.¿Cómo puedo crear una clave externa en una columna, cada registro de los cuales puede referirse a una columna en una de varias tablas?
La tabla comment
tienen una columna parent
, que se refiere a id
de news
o photo
tabla, dependiendo de la columna type
.
El problema es que no puedo agregar una clave externa que hace referencia a la tabla desconocida de antemano, y aún más, que hace referencia a varias tablas a la vez.
Toda la base de datos ahora utiliza claves externas, excepto esta columna parent
en la tabla comment
. Me molesta porque es el único lugar donde no puedo agregar una clave externa.
Estoy seguro de que no puedo crear una clave foránea; algo en mi diseño de base de datos necesita ser cambiado. Decidí crear una tabla para que los comentarios estuvieran listos para agregar nuevos tipos de comentarios para nuevas entidades en el futuro -vídeo, música, artículo, etc.- y no entrar en un infierno de mantenimiento cuando quiero agregar una nueva columna para todos los comentarios .
Si tengo que crear una tabla por separado para cada tipo de comentario para poder utilizar completamente las claves foráneas, lo haré. Pero tal vez ya exista otra solución común a este problema, ¿y no lo sé?
Tal vez debería crear algún tipo de tabla de enlaces, que vincule la tabla comment
con las tablas de otras entidades? Pero tal vez esta solución sea aún más compleja que crear una tabla separada para cada tipo de comentario.
Tal vez debería tener varias columnas en la tabla comment
, como newsId
, photoId
, a las que puedo agregar una clave externa?
Estas soluciones simplemente no me parecen elegantes, o simplemente malinterpreto algo. Toda mi percepción de este problema podría estar completamente equivocada. Es por eso que estoy aquí. Por favor comparte tus ideas.
Me ha resultado difícil elegir ** una ** respuesta correcta: la primera se relaciona con una respuesta similar, y la segunda está escrita específicamente para mi pregunta; ambas son buenas. Elegí la segunda, la de APC, porque es más detallada y usa mis términos. Gracias a los dos. –
posible duplicado de [Clave externa que hace referencia a las claves principales en varias tablas?] (Http://stackoverflow.com/questions/668921/key-keyboard-refering-to-primary-keys-across-multiple-tables) –