Mi experiencia es más en programación web que en administración de bases de datos, así que corríjame si estoy usando la terminología incorrecta aquí. Estoy tratando de encontrar la mejor manera de diseñar la base de datos para una aplicación que codificaré.
La situación: tengo Informes en una tabla y Recomendaciones en otra tabla. Cada informe puede tener muchas recomendaciones. También tengo una tabla separada para palabras clave (para implementar el etiquetado). Sin embargo, quiero tener solo un conjunto de palabras clave que se apliquen tanto a los Informes como a las Recomendaciones para que la búsqueda de palabras clave le brinde informes y recomendaciones como resultados.
Aquí está la estructura con la que comencé:
Reports
----------
ReportID
ReportName
Recommendations
----------
RecommendationID
RecommendationName
ReportID (foreign key)
Keywords
----------
KeywordID
KeywordName
ObjectKeywords
----------
KeywordID (foreign key)
ReportID (foreign key)
RecommendationID (foreign key)
Instintivamente, siento que esto no es óptimo y que debería hacer que mis objetos etiquetables hereden de un padre común, y que ese comentario sea etiquetado, lo que daría la siguiente estructura:
BaseObjects
----------
ObjectID (primary key)
ObjectType
Reports
----------
ObjectID_Report (foreign key)
ReportName
Recommendations
----------
ObjectID_Recommendation (foreign key)
RecommendationName
ObjectID_Report (foreign key)
Keywords
----------
KeywordID (primary key)
KeywordName
ObjectKeywords
----------
ObjectID (foreign key)
KeywordID (foreign key)
¿Debo ir con esta segunda estructura? ¿Me estoy perdiendo alguna preocupación importante aquí? Además, si voy con el segundo, ¿qué debo usar como nombre no genérico para reemplazar "Objeto"?
Actualizar:
Estoy usando SQL Server para este proyecto. Es una aplicación interna con una pequeña cantidad de usuarios no concurrentes, por lo que no preveo una gran carga. En términos de uso, las palabras clave probablemente se usarán con moderación. Es prácticamente solo para fines de informes estadísticos. En ese sentido, cualquier solución que elija probablemente solo afectará a los desarrolladores que necesiten mantener este sistema en el futuro ... pero pensé que es bueno implementar buenas prácticas siempre que pueda. ¡Gracias por toda la perspectiva!