Я пишу систему управления контентом, которая может хранить метаданные о разных типах документов. Каждый тип документа имеет свой собственный набор полей метаданных. Например, в письме есть поля, такие как «Кому», «От», «Адресат», «Отменить адрес» и т. Д., В то время как у MinutesOfMeeting есть поля «DateHeldOn», «TimeHeldOn», «AttendedBy» и т. Д.Одиночный вызов базы данных со многими параметрами и многими вызовами базы данных с несколькими параметрами
Я сохраняю это информация в базе данных в двух таблицах: общая и конкретная. Общая информация о хранилище, которая является общей для всех типов, таких как DocumentOwnerName, DocumentCreatedDate, DocumentSize и т. Д. Специфическая таблица - это не одна таблица, а набор из 35 разных таблиц, по одному для каждого типа документа.
У меня есть страница, содержащая сетку, в которой я показываю список документов. Одна запись соответствует одному документу. Поскольку сетка создана для отображения документов всех типов, поэтому первая строка может отображать букву, вторая - MinutesOfMeeting, третья - памятка и т. Д.
Я также сделал функцию поиска, где пользователь может установить критерии, на основании которых список документов извлекается. Чтобы он работал, для каждой из полей в каждой из конкретных таблиц есть четыре параметра, связанных с поиском, и все эти параметры передаются в центральную процедуру. Затем эта процедура отфильтровывает записи по критериям.
Проблема в том, что касается 35 различных типов документов, каждая из которых имеет 10 полей, в итоге я получаю более тысячи параметров для этой процедуры. Это кошмар для обслуживания. Я ищу решение.
Одним из решений является разобраться с каждой конкретной таблицей индивидуально, возвращая идентификаторы, а затем объединить их. Это прекрасно, за исключением того, что я должен сделать 36 различных вызовов в базе данных, по одному для конкретной таблицы плюс один для общей таблицы.
Все это сводится к простому выбору архитектуры. Должен ли я сделать один вызов базы данных, передающий множество параметров, или мне нужно, чтобы многие вызовы базы данных передавали несколько параметров.
Какой подход более предпочтителен и почему?
Редактировать: веб-сервер и сервер базы данных находятся на одной машине. Поэтому скорость сети не должна иметь значения.
может у пожалуйста, укорачивают свой вопрос ...... – abhi
Или, по крайней мере, облегчить людям понимание того, что является основным вопросом. :-) –
Также обратите внимание, что до тех пор, пока вы находитесь в пределах одной транзакции, несколько запросов (особенно если через подготовленные операторы или хранимые процедуры) не будут значительно медленнее, чем один мега-запрос. –