2010-10-12 2 views
0

J'ai une table de NewsFeed.
NewsFeed
+ id
+ fromUserId
+ targetId
+ TypeBase de données de conception: plus grande table vs interroger l'entité pour chaque ligne de données Tableau

si les nouvelles sont comme ceci: Tom Wakefield a commenté le profil de Peter Smith.

Alors soit j'ajouter deux champs dans mon NewsFeed appel fromUserName et targetUserName

OU

Pour chaque ligne que j'affiche dans mon dataTable je requête du Entity.

<p:dataTable value="#{myBean.news}" var="item"> 
    <p:column> 
     <h:outputText value="#{myBean.getName(item.fromUserId)} " /> 
     <h:outputText value="commented on " /> 
     <h:outputText value="#{myBean.getName(item.targetId)}" /> 
    </p:column> 
</p:dataTable> 

puis à l'intérieur myBean.java

myBean.java

public String getName(Long userId){ 
    User u = mySessionBean.findUserById(userId); 
    return u.getFName() + " " + u.getLName(); 
} 

Quel chemin est le meilleur? Est-ce que faire une requête à chaque ligne me fait vraiment beaucoup mal en terme de performance?

Note: la base de données s'attend à avoir beaucoup d'utilisateurs. News sont afficher très souvent.

Répondre

1

« Normaliser jusqu'à ce qu'il fait mal, dénormaliser jusqu'à ce qu'il fonctionne »

OIEau: enregistrer uniquement les ID et de l'utilisation pour obtenir JOIN l'ensemble des données.

+0

Nous vous remercions de votre participation +1 –

1

Est-ce que faire la requête à chaque ligne vraiment me blesser beaucoup en terme de performance

No.

données Duplication provoque plus de problèmes qu'elle en résout.

Les relations dupliquées rendent les mises à jour pratiquement impossibles à traiter correctement. Object-Relational Les gestionnaires peuvent - et le font souvent - générer des jointures SQL appropriées pour optimiser les extractions. Les ORM ont également un cache. Et la base de données a le cache.

Les 2ème et 3ème formes normales correspondent à la règle suivante: Ne pas dupliquer les relations.

Dans de rares cas, vous pouvez «dénormaliser» et améliorer les performances sans créer de logique de mise à jour complexe. Dans la plupart des autres cas, les données dupliquées entraînent des mises à jour et des insertions complexes ou lentes ou les deux.

+0

Nous vous remercions de votre participation. Je vais suivre votre conseil. +1 –

Questions connexes