Получение наиболее эффективного запроса на основе нескольких таблиц / первичных и внешних ключей - PullRequest
0 голосов
/ 12 января 2011

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

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

Вот мои таблицы: departments_classes | classes_vendors | departments | vendors | classes | products | gateway

Любое руководство очень ценится.

Дополнительная информация: примерно 350 классов, 18 отделов и 12 страниц шлюза ...

Ответы [ 2 ]

1 голос
/ 12 января 2011

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

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

В любом случае все будет хорошо, все зависит от того, как вы предпочитаете это делать, и что, по вашему мнению, будет проще построить, протестировать и поддерживать.

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

Я видел драматических улучшений скорости в моих запросах (CFQUERYs, работающих против MS SQL) с простым введением индексов.

В MS SQL вы делаете это так:

CREATE NONCLUSTERED INDEX yourIndexName ON yourTableName(yourFieldName)

Надеюсь, это поможет!

0 голосов
/ 12 января 2011

Ваша проблема звучит похоже на обычный сценарий для определения прав пользователя.Пользователь может принадлежать к какой-либо Группе, с которой связаны Права, или Пользователю могут быть назначены Права индивидуально.В вашем случае, пользователь - это шлюз, группа - это отдел, а права - это классы.Затем шлюз может быть связан с любым количеством отделов и / или классов.

Используя эту модель, вам просто нужно добавить таблицу gateway_classes, как вы описываете, вместе с таблицей gateway_departments.затем можно использовать UNION для объединения запроса «классов шлюзов» с запросом «отделов шлюзов» (или, возможно, чего-то более элегантного), но я думаю, что эта схема действительно потребует от вас необходимости без введения избыточной информации.

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