привязать данные из нескольких таблиц к конкретному элементу управления - PullRequest
0 голосов
/ 23 февраля 2011

Q:

У меня следующий случай, и мне нужен лучший ответ по производительности:

Я буду использовать расширенный контроль, такой как просмотр сетки или графика, и данные, которые должны быть связаны сЭтот элемент управления: данные из набора таблиц в моей базе данных. Не одна таблица.

Какая форма для этих данных лучше всего?

Сначала я подумал:

хранимая процедура, содержит мою логику (и я хочу спросить здесь о том, какова лучшая производительность), использовать временную таблицу или объединения или ... и т. Д.

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

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Наиболее распространенным способом является объединение таблиц в хранимой процедуре sql. Производительность обычно не является проблемой, если вы не объединяете множество таблиц или не используете несколько вложенных операторов выбора.

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

EDIT

Поскольку вы, похоже, действительно не хотите использовать сохраненные процессы. Как насчет компромисса? Вы можете использовать LINQ для сущностей, чтобы объединить несколько наборов данных в C # после получения их всех из БД отдельно.

Вот пример:

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;
ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails;

var query =
    from order in orders
    join detail in details
    on order.SalesOrderID
    equals detail.SalesOrderID into orderGroup
    select new
    {
        CustomerID = order.SalesOrderID,
        OrderCount = orderGroup.Count()
    };

И здесь является ссылкой на дополнительную информацию.

1 голос
/ 23 февраля 2011

Если информация в таблицах имеет какой-либо общий идентификатор, вы должны использовать соединение напрямую или через хранимую процедуру.

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

Если у вас возникают проблемы с производительностью, это, скорее всего, связано с отсутствием или неправильностью индексов, или с неправильным запросом, и тогда вы можете вернуться с конкретным вопросом о том, как оптимизировать этот запрос:)

Если, с другой стороны, данные не поддаются объединению, возможно, вам нужно обработать данные из одной таблицы, чтобы узнать, с чем связываться в других, тогда вы можете создать классы для хранения данных в c # во время выполнения. соответствующие.

Если вы используете как минимум 3,5 из c #, вы можете использовать Linq для присоединения к полученным структурам данных после анализа данных.

Если вы используете c # 2.0, вы можете использовать все хранимые процедуры для сопоставления и, возможно, использовать временные таблицы, к которым вы присоединяетесь, или переменные таблиц, или, возможно, функцию с табличными значениями, которая анализирует одну таблицу и возвращает новую таблицу, которую вы может присоединиться.

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