2010-10-08 3 views
4

Voici un exemple de ce que j'ai (prendre le dépassement de pile). J'ai 2 tables, Questions et Answers. J'ai aussi une table Comments. Le tableau des commentaires fera référence à la fois aux questions et aux réponses.Conception de base de données - Colonne dans une table Références Deux tables

Comment dois-je configurer la base de données? Avoir 2 colonnes dans Commentaires, un QuestionId et AnswerId. Avoir une table pour les questions et les réponses? Avoir une table entre les deux qui me dit en quelque sorte Question ou Réponse?

EDIT: Trouvé l'explorateur SO données, il utilise une table pour les questions et réponses ... Je n'aime pas la table POSTS ayant tant de NULLS en elle. Est-ce que cela a des effets négatifs, comme sur la performance? StackOverflow modélise les questions et réponses comme étant la même entité: POSTS

Répondre

1

Ils ont des propriétés identiques, en plus d'indiquer la réponse lorsque acceptée/accordée.

Les commentaires obtiennent leur propre table, et se rapportent à la publication respective en utilisant une clé étrangère - le post_id.

Sans avoir à charger les décharges mensuelles SO, you can view (and query) the SO schema via the StackExchange Data Explorer.

+0

Enfin eu l'occasion d'examiner les données SO. La seule chose que je n'aime pas, c'est qu'il y a beaucoup de colonnes NULL. Cela affecte-t-il la performance de quelque façon que ce soit? – Martin

+0

@Martin: Cela dépend des requêtes que vous devez exécuter. –

1

Créez une autre relation Post_Type pour savoir si l'ID dans votre table Comments est une question ou une réponse.

post_type varchar(20) NOT NULL, 
post_type_id tinyint PRIMARY KEY, 

Ensuite, dans votre table Comments, ajoutez Post_Type.post_type_id comme la clé étrangère, en plus de l'attribut qui garde la trace de votre question Id/Id réponse.

Vous n'avez pas besoin de deux colonnes (QuestionId + AnswerId) dans la table Comments, car cela vous donnera null dans les colonnes, dans votre domaine de problème de scénario.

Cheers.

1

Vous voulez dire que vous pouvez avoir des commentaires sur les questions et les réponses? Vous aurez 5 tables:

question 
answer 
comment 
question_comment 
answer_comment 

Le tableau question_comment aura un comment_id et un question_id. Traite similaire avec answer_comment.

Questions connexes