La solution la plus extensible consiste à n'avoir qu'une seule table "de base" (connectée aux "j'aime", aux tags et aux commentaires), et à en "hériter" toutes les autres tables. L'ajout d'un nouveau type d'entité implique simplement l'ajout d'une nouvelle table "héritée" - elle se connecte ensuite automatiquement à l'ensemble de la machinerie like/tag/comment.
Le terme entité-relation pour cela est "catégorie" (voir le Guide des méthodes ERwin , section :"Relations de sous-type"). Le symbole de la catégorie est :
En supposant qu'un utilisateur puisse aimer plusieurs entités, une même balise peut être utilisée pour plusieurs entités mais un commentaire est spécifique à une entité, votre modèle pourrait ressembler à ceci :
BTW, il existe à peu près 3 façons d'implémenter la "catégorie ER":
- Tous les types dans un seul tableau.
- Tous les types de béton dans des tableaux séparés.
- Tous les types concrets et abstraits dans des tableaux séparés.
À moins que vous n'ayez des exigences de performances très strictes, la troisième approche est probablement la meilleure (ce qui signifie que les tables physiques correspondent 1:1 aux entités du diagramme ci-dessus).