2010-10-07 3 views
2

J'ai une base de données où j'ai des commentaires, des votes, des galeries, des images, etc Pour des exemples, galeries et images peuvent être commentées en utilisant le même formulaire, puis je vais le stocker dans une seule table, commenter .Comment stockez-vous les champs de variables?

Je me demande comment stocker ces informations de type dans la table des commentaires? En utilisant un type ENUM, une clé étrangère contre une table de types, codée en dur sur insert, etc.?

+1

Si le commentaire serait lié à un enregistrement parent auriez-vous vraiment besoin de connaître le type au niveau de commentaire? – Roadie57

+0

@ Roadie57: Personnellement, je voudrais toujours savoir au niveau du commentaire. Cela permettrait de répondre à des questions comme "Combien de commentaires avons-nous reçu dans toutes les galeries?" beaucoup plus simple. –

Répondre

2

La clé étrangère contre une table de type obtiendrait mon vote. Quelque chose comme ceci:

alt text

+0

Bien! Ouais c'est ce que je voulais dire avec l'option # 3. Le CommentType est définitivement optionnel à ce moment-là il semble; Je ne pense pas que cela apporte vraiment beaucoup de support de requête à ce moment-là. Sauf si vous pensez que le type de commentaire est disjoint de la galerie/image. –

+0

Merci pour votre réponse, ce qui signifie que si j'ai besoin d'ajouter une nouvelle ressource dont j'ai besoin pour ajouter une nouvelle table d'intersection référençant à la fois la ressource et les commentaires, cela vaut-il la peine de la maintenir? – John

+0

@John: Basé sur l'information limitée disponible, voici une autre pensée. S'il existe des points communs entre des éléments tels que la galerie et l'image, vous pourriez peut-être créer une table principale "Ressource" et une seule intersection avec les commentaires basés sur ce maître. Vous pouvez ensuite créer "Gallery" et "Image" en tant que tables enfants à partir du maître "Resource" pour conserver les attributs uniques à chaque type. –

2

Il existe probablement plusieurs façons de concevoir ceci tout en conservant les clés étrangères.

La première consiste essentiellement à avoir une table de commentaires pour chaque type; Garde-les séparés. Pour chaque commentaire, disposez d'une clé étrangère dans la galerie ou l'image parent, en fonction de la table.

La seconde est d'avoir une table (disons commentables) qui contient des données communes pour tout ce qui est commentable. Chaque galerie ou image possède une clé étrangère pour une ligne correspondante unique dans les commentaires. Chaque ligne de la table de commentaire est une clé étrangère à la commentable, ainsi que le texte du commentaire, date, etc.

Vous trouverez probablement ce utile de toute façon puisque vous finirez par métadonnées voulez pour la collecte des commentaires dans leur ensemble ... p.ex. pour spécifier si le commentaire est désactivé, activé pour les amis uniquement ou activé pour tout le monde.

Modifier Option 3 est comme l'option 1, mais au lieu d'avoir des tables de commentaires distincts complets pour chaque type commentable, juste avoir associatifs tableaux séparés pour chaque type commentable.

|comments| |gallery_comments| |image_comments | 
--------  ----------------  --------------- 
|id (pk)| |comment_id (fk)| |comment_id (fk)| 
|text | |gallery_id (fk)| |image_id (fk)| 
|date |  ----------------  --------------- 
|author | 
-------- 

Beaucoup mieux que l'option 1 à mon avis.

Questions connexes