0

Dans un composant forum question/réponse que je vous écris dans le cadre d'un site, j'ai deux tables qui semblent en théorie comme ceci (qui est, je veux dire les données conservées pour chaque entité):Dois-je combiner ces tables en une seule, ou les garder séparées?

THREAD     POST 
thread_id    post_id 
type_id (question)  writer_id 
writer_id    thread_id 
title     parent_id 
body (optional)  post_body 
followers    date 
merge_id    upvotes 
date     dnvotes 
upvotes    replies 
dnvotes    views 
replies    post_type_id (e.g. answer, comment to an answer etc.) 
views 
anonymous 

La seule les vraies différences entre ces entités sont merge_id (si une question est fusionnée dans une autre, cet id référencera ledit question_id), suiveurs, et title. Les combiner en un semble un peu encombrant et gonflé pour moi, et semble commencer un peu dénormalisé je pense. Et, s'ils sont un, le corps et le titre devraient être nullable ce qu'ils ne devraient pas (je sais qu'il peut y avoir des sauvegardes dans le code).

Je pensais aussi d'avoir fil se composent des seuls attributs ne sont pas en poste qui ressemblerait à ceci:

THREAD 
thread_id (or post_id which would be primary and foreign key refing POST) 
title 
merge_id 
followers 

mais qui ne se sent pas tout à fait raison non plus.

Aussi, si cela fait une différence, je prévois d'afficher les questions avec la réponse la plus élevée, assez souvent, dans le style de quora.

Des conseils de conception seraient les bienvenus.

(aussi, je les gardais quelqu'un générique (fil/post) de sorte que si nécessaire je peux utiliser ces tables pour un blog ou tout autre chose plus tard.)

+0

https://www.postgresql.org/docs/9.6/static/tutorial-inheritance.html –

+0

Ceci est une faq. Sous-typage de la base de données philipxy de stackoverflow.com de Google. – philipxy

+1

la présentation de vos tables dans votre poste est plutôt étrange. Habituellement, on n'écrit pas côte à côte deux listes (de colonnes). Cela les rend difficiles à utiliser. Supposons que quelqu'un souhaite copier la liste des colonnes de la table des fils pour l'utiliser dans sa réponse. Un éditeur simple (fourni par la plupart des navigateurs) ne pouvait pas gérer cela efficacement. On doit copier les colonnes mot par mot. Les colonnes d'une ligne ne sont pas liées donc je ne vois aucun avantage à représenter cela de cette façon. – miracle173

Répondre

0

Il semble à moi comme ceux-ci devraient être deux tables séparées.

Pour vous aider à prendre la décision, découvrez comment vous allez les utiliser. Si vous les traitez de la même manière dans vos requêtes SQL et que vous ne vous souciez généralement pas d'un post ou d'un thread, l'utilisation d'une table unique aurait du sens. Si vous les traitez différemment (ce à quoi je m'attendrais), utilisez deux tables.