J'essaie de concevoir une database à utiliser avec l'application ASP.net MVC. Voici le scénario: Il y a trois entités et les users peuvent postr leurs commentaires pour chacune de ces différentes entités. Je me request juste comment mettre une table pour les commentaires et lier toutes les autres entités à cela. Évidemment, la table des commentaires a besoin de 3 references (key étrangère) pour ces tables mais comme vous le savez, ces foreign keys ne peuvent pas être nulles et une seule peut être remplie pour chaque ligne. Existe-t-il un meilleur moyen que la mise en œuvre de trois arrays différents pour les commentaires de chaque entité?
Soit: une table de commentaires par type d'entité
Ou: une table d'entités maître avec des commentaires enfant et des tables spécifiques EntityType.
Pour les trois tables Entity, PK est EntityID
Il n'y a pas de raccourci ou d'élégance pour avoir une table de commentaires pour 3 parents: c'est faux dans les termes de design de database.
Personnellement, j'irais probablement pour l'option 1 …
Edit, à la reflection:
Parfois, vous devez regarder l'utilisation des données.
Si les 3 entités sont utilisées séparément, sur des écrans séparés, ne se lient pas les unes aux autres alors ce serait l'option 1.
Si les trois entités sont utilisées et affichées set, l'option 2 est plus logique car vous pouvez regrouper datatables plus facilement.
Si vous connectez les trois tables d'entités à la même table de commentaires, vous ne pourrez pas avoir d'intégrité référentielle via des foreign keys. Dans ce scénario, vous auriez une colonne "key" et une colonne "type-entité" dans votre table de commentaires. Pour get les commentaires d'une entité cerain, vous devez filterr par type d'entité.
Personnellement, je préférerais trois tables de commentaires avec la même structure, qui peuvent être jointes par union pour get tous les commentaires pour toutes les entités.
Vous db structure comme à l'image ci-dessous. Vous devez créer CommentHistory lorsque vous créez Entity1 ou Entity2.
Donc, si vous avez besoin de tous les commentaires pour Entity1, vous avez juste besoin de:
Select * from Comment where CommentHistoryId = 5 -- '5' it CommentHistoryId from Entity1