Дизайн базы данных: большая таблица против запроса объекта для каждой строки в dataTable - PullRequest
0 голосов
/ 12 октября 2010

У меня есть таблица NewsFeed.
NewsFeed
+ id
+ fromUserId
+ targetId
+ type

, поэтому новости выглядят так: Tom Wakefield прокомментировал профиль Peter Smith.

Так что либо я добавляю еще два поля в мой NewsFeed вызов fromUserName и targetUserName

ИЛИ

Для каждой строки, отображаемой в моей таблице данных, я запрашиваю из 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 отображаются очень часто.

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Действительно ли выполнение запросов в каждой строке действительно вредит мне с точки зрения производительности

Нет.

Дублирование данных вызывает больше проблем, чем решает.

Дублированные отношения делают обновления почти невозможными для правильной обработки.

Объектно-реляционные менеджеры могут - и часто делают - генерируют правильные SQL-соединения для оптимизации выборок.Также в ORM есть кеш.И база данных имеет кеш.

2-я и 3-я нормальные формы составляют следующее правило: Не дублировать отношения.

В редких случаях вы можете "денормализовать" иулучшить производительность без создания сложной логики обновления.В большинстве других случаев дублированные данные приводят к сложным или медленным обновлениям и вставкам.

1 голос
/ 12 октября 2010

"нормализуйся до боли, денормализуй пока не работает "

IOW: записывать только идентификаторы и использовать JOIN для получения всех данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...