База данных запросов - Лучшая практика - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть несколько таблиц базы данных ниже.Я хочу отобразить каждого пользователя в сетке данных и соответствующем ему значении поля 'Pass'.

Текущий запрос - 1. Загрузить всех пользователей из таблицы пользователей 2. Пользователи, добавленные в таблицу данных 3. Цикл просмотра данных - для каждого пользовательского запроса.я) ExamGeography, II) ExamMath, III) ExamSpanish

    foreach (DataGridViewRow dgvRow in resultsDataGridView.Rows)
    {
    dgvRow.Cells["geographyCol"].Value = 'query result from ExamGeography i.e. SELECT Pass FROM ExamGeography WHERE User=@User'
        dgvRow.Cells["mathCol"].Value = 'query result from ExamMath i.e. SELECT Pass FROM ExamMath    WHERE User=@User'
    // ...
    }

Таким образом, каждый пользователь делает новый вызов в базу данных.Всегда ли лучше совершать как можно меньше звонков в базу данных?Вместо нескольких звонков на одну и ту же таблицу?Что можно считать лучшей практикой / наилучшей производительностью?

Должен ли мой запрос быть, например, «SELECT Pass FROM ExamGeography» (без предложения WHERE) и возвращаться для всех пользователей?

User Table

User (PK) ----------- Member
User1                 Y
User2                 Y
User3                 N

ExamGeography Table

User (FK) ----------- Pass
User1                  Y
User2                  Y
User3                  Y

ExamMath Table

User (FK) ----------- Pass
User1                  N
User2                  Y
User3                  Y

ExamSpanish Table

User (FK) ----------- Pass
User1                  Y
User2                  N
User3                  N


DataGridView Display

Username   Geography     Math      Spanish
User1          Y           N           Y
User2          Y           Y           N
User3          Y           Y           N

1 Ответ

1 голос
/ 07 февраля 2012

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

Как только вы получите все данные из базы данных (используйте для этого хранимые процедуры), вы можете перебирать результаты вдля цикла, поместите их в новое представление таблицы данных, и Боб станет вашим дядей.

В результате ваш запрос должен выглядеть примерно так:

SELECT *
FROM UserTable a
JOIN ExamGeographyTable b
    ON a.User = b.User
JOIN ExamMathTable c
    ON a.User = c.User
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...