2011-01-17 4 views
1

Je me demande simplement lequel d'entre eux serait préférable d'utiliser dans une application web. J'ai une application web qui permet à l'utilisateur de publier sur le site. Il y a trois différents types de poteaux mais assez similaires pour que je puisse les mettre sous une même table. Est-ce que ça va?Question à propos de la normalisation

Je pourrais normaliser les tables de cette manière? (Mise sous le type ou l'autre)

Tableau 1

UserPost 
post_id 
user_id 
type 

Tableau 2

Post 
post_id 
datetime 
text 

OR serait en utilisant une table de mieux?

Tableau

Post 
user_id 
post_id 
datetime 
type 
text 

Je me penche vers la troisième voie, à moins que quelqu'un peut signaler les inconvénients.

+0

Si je vous ai bien compris, vous avez deux différents types de postes avec différents ensembles de colonnes? Et certaines colonnes sont égales? –

+1

Si je comprends bien, il y a trois différents types de messages qui sont toujours plus ou moins un texte – Matten

+0

Oui, trois types d'entrées utilisateur sont un texte. Je suppose que je peux autoriser/interdire le type dans le code, mais stocker le tout au même endroit. –

Répondre

1

Dans la première approche, vous devrez toujours créer une ligne dans les deux tables pour chaque poste utilisateur. Donc, il n'y a pas d'inconvénient en ayant seulement une table, user_id devrait alors être une clé étrangère pour votre table d'utilisateur, post_id la clé primaire et les autres colonnes contiennent les données. Il n'y a aucune raison de créer deux tables.

Si les trois différents types de messages sont descriptibles par un champ commun, un discriminateur comme type est correct.

1

Combinez les tables, il n'y a pas vraiment d'avantage à les séparer comme vous l'avez fait dans Table1 et Table2. Maintenant, si le tableau 1 a une clé séparée de post_id, vous pouvez éliminer une certaine redondance. Exemple:

Table 1 

UserPost 
user_post_id 
user_id 
type 

Table 2 

Post 
post_id 
user_post_id 
datetime 
text 
0

Sur la base de votre dernier commentaire je crois comprendre que post_id serait une clé candidate dans les trois de vos tables par exemple. Si cela est correct, je vous suggère de créer une table pour chaque ensemble unique d'attributs (chaque type de message). Donc, si tous les messages ont les mêmes attributs en commun, il est logique de les avoir tous dans une table, mais s'il y en a deux ou trois, alors deux ou trois tables seraient plus appropriées.

+0

Voici un exemple. L'utilisateur peut soumettre un lien d'image, un lien vidéo YouTube ou une mise à jour d'état. Ils sont tous un "post". Pensez-vous qu'ils ont besoin de tables séparées et quels sont les avantages/inconvénients de cela? –