Mon expérience est plus dans la programmation Web que dans l'administration de base de données, alors corrigez-moi si j'utilise la mauvaise terminologie ici. J'essaie de trouver la meilleure façon de concevoir la base de données pour une application que je vais coder.
La situation: j'ai des rapports dans un tableau et des recommandations dans un autre tableau. Chaque rapport peut contenir de nombreuses recommandations. J'ai également un tableau séparé pour les mots clés (pour implémenter le balisage). Cependant, je veux avoir un seul ensemble de mots clés qui s'applique aux rapports et aux recommandations afin que la recherche sur les mots clés vous donne des rapports et des recommandations en tant que résultats.
Voici la structure avec laquelle j'ai commencé:
Reports
----------
ReportID
ReportName
Recommendations
----------
RecommendationID
RecommendationName
ReportID (foreign key)
Keywords
----------
KeywordID
KeywordName
ObjectKeywords
----------
KeywordID (foreign key)
ReportID (foreign key)
RecommendationID (foreign key)
Instinctivement, j'ai l'impression que ce n'est pas optimal et que je devrais faire hériter mes objets étiquetables d'un parent commun et faire étiqueter ce parent de commentaire, ce qui donnerait la structure suivante:
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)
Dois-je aller avec cette deuxième structure? Suis-je en train de manquer des préoccupations importantes ici? De plus, si je choisis le second, que dois-je utiliser comme nom non générique pour remplacer "Object"?
Mise à jour:
J'utilise SQL Server pour ce projet. Il s'agit d'une application interne avec un petit nombre d'utilisateurs non simultanés, donc je ne prévois pas une charge élevée. En termes d'utilisation, les mots clés seront probablement utilisés avec parcimonie. C'est à peu près juste à des fins de rapports statistiques. En ce sens, quelle que soit la solution que j'utilise, cela n'affectera probablement que les développeurs qui devront maintenir ce système en ligne ... mais je me suis dit qu'il était bon de mettre en œuvre de bonnes pratiques chaque fois que je le pouvais. Merci pour toute la perspicacité!