2010-08-25 8 views
0

J'ai 3 types de données avec - a) des colonnes communes b) une hiérarchie - et je voudrais savoir comment concevoir la base de données.Héritage de table de classes avec une hiérarchie

Disons qu'au niveau supérieur, il y a une discussion. Dans ce cadre, il y a DiscussionMessages, Files et Comments. Ils ont tous des champs en commun (UserID, CreateDate, Text), mais ont aussi des colonnes uniques (FileName, ContentType, etc.) Les commentaires peuvent être associés à n'importe quel type (même d'autres commentaires) et même avec les fichiers. Après avoir examiné quelques questions ici, je pense que je veux que Class Table Inheritance - une table de base (DiscussionParts) pour stocker les éléments communs, puis des tables spécifiques pour chaque type de données.

DiscussionParts: PartID, DiscussionID, ParentID, PartType (M, F, C), UserID, texte, CreateDate

Messages: MessageID, PartID, Titre

Fichiers : FileID, PartID, FileName, ContentType

Commentaires: CommentID, PartID, Source

La colonne ParentID doit conserver la trace de la hiérarchie. L'ID de discussion permet à un utilisateur de rechercher dans toutes ses discussions du texte dans une requête simple.

Est-ce la conception recommandée pour Class Table Héritage avec une hiérarchie?

Répondre

1

Je suggérerais de le refondre en termes d'entités et éventuellement de fonctionnalités plutôt que de classes. La raison en est que les bases de données ne font pas de "classes" et d '"héritage", et que leur conversion peut conduire à une conception inefficace.

Il semble que "... au plus haut niveau, il y a une discussion." Signifie que c'est votre table supérieure, ayant probablement un ID, un titre, et peut-être du texte qui décrit le sujet du message. À partir de là, votre table Messages est un enfant de Discussions, avec un ID de discussion en tant que clé étrangère, son ID message, son titre, son texte, etc. On dirait que vous construisez un forum, jusqu'ici tout va bien.

Commentaires est un peu difficile. Les commentaires sont probablement ajoutés aux messages? Cela signifie que votre table Commentaires a une clé étrangère pour les messages, plus son propre commentaire et un peu de texte. Mais à partir de la question, je ne peux pas savoir où les fichiers entrent. Sont-ils attachés à une discussion dans son ensemble? Un message? Ou un commentaire? Quelle que soit la réponse à cette question, faites de la table Files un enfant de la table appropriée.

Ainsi, votre hiérarchie n'est pas de classes, mais des tables et ressemble à:

Discussions ----> Messages ---> Commnts
Questions connexes