2010-10-12 60 views
0

我有一张NewsFeed的表。
NewsFeed
+ ID
+ fromUserId
+目标ID
+型数据库设计:大表vs查询数据中每一行的实体表

这样的消息是这样的:Tom Wakefield评论Peter Smith的资料。

所以任我添加两个字段到我NewsFeed呼叫fromUserNametargetUserName

OR

对于每一行我在dataTable中显示我将从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> 

然后里面myBean.java

myBean.java

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

哪种方式更好?每个行的查询在性能方面真的让我受到了很大的冲击

注意:数据库期望有很多用户。 News经常显示。

回答

1

“正常化,直到它伤害,反规范化 直到它的作品”

督察:只记录ID和使用连接来获取整个数据。

+0

感谢您的配合+1 – 2010-10-12 13:22:44

1

是否在每一行进行查询真的伤害了我很多的性能

复制数据会导致更多的问题比它解决的术语。

重复的关系使更新几乎不可能正确处理。

对象关系管理器可以 - 而且经常 - 生成适当的SQL连接来优化提取。另外ORM的缓存。数据库有缓存。

第二个和第三个正常形式达到以下规则:不重复关系。

在极少数情况下,您可以“反规范化”并在不创建复杂更新逻辑的情况下提高性能。在其他大多数情况下,重复的数据会导致更新和插入,这些更新和插入要么是复杂的,要么是两者都慢。

+0

感谢您的意见。我会接受你的建议。 +1 – 2010-10-12 14:24:06