Фильтрация реплицируемых данных - Join фильтры

ОГЛАВЛЕНИЕ

 

Join фильтры

Join фильтры позволяют использовать в Merge репликации перекрестные отношениям между таблицами, когда в публикации фильтр по одной таблице основан на значениях из другой таблицы. Join фильтр определяет отношения между двумя таблицами, которые будут использоваться в течение Merge процесса. Это подобно обычному объединению двух таблиц. Join фильтры используют имена двух статей и заданное условие объединения, которое представляет отношения между этими двумя таблицами в публикуемых статьях. Условие объединения задаётся обычно в такой форме:


ARTICLE1_TABLE.COLUMN = ARTICLE2_TABLE.COLUMN

Join фильтры обычно используются вместе с фильтрами строк и позволяют Merge процессу поддерживать ссылочную целостность между этими двумя таблицами. Если таблица, издаваемая с фильтром строк, ссылается на foreign key в другой издаваемой таблице, статья foreign key таблицы должна иметь Join фильтр для обеспечения ссылочной зависимости от статьи primary key таблицы.

Enterprise Manager использует это правило автоматически при создании публикации для того, чтобы предложить объединение с логикой фильтрации для foreign key таблицы, основанной на foreign key ссылках. По этой причине, а также для простоты использования, рекомендуется, чтобы Вы предварительно определили отношения primary key и foreign key, а затем выбрали автоматическую генерацию Join фильтра, при создании публикации средствами Create Publication Wizard.

Обратите внимание: Синтаксис создания ограничений FOREIGN KEY в CREATE TABLE или ALTER TABLE предполагает возможность использования опции NOT FOR REPLICATION. Когда эта опция установлена, Microsoft SQL Server 2000 предполагает, что ссылка была проверена, когда пользователь внёс изменения в данные. Поэтому SQL Server 2000 пропускает дополнительные шаги дальнейшей обработки, в которых проверяется ссылка во время синхронизации данных Merge процессом. Если эта опция включена, должен быть определен Join фильтр, который позволит избежать появление недопустимых по foreign key строк на подписчике.

Join фильтры строго не ограничены отношениями primary key - foreign key. Join фильтр может быть основан на любой логике сравнения, которая сопоставляет данные в двух таблицах статьи, но эта логика должна использовать, если возможно, проиндексированные столбцы для обеспечения более высокой эффективности.
Merge процесс умеет оптимизировать эффективность в зависимости от того, основано ли условие объединения на уникальном столбце, что имеет место, когда Join фильтр представляет foreign key отношения. Если условие объединения основано на уникальном столбце, в целях повышения эффективности, для этой статьи свойство join_unique_key должно быть включено.

Хотя в фильтре строк можно использовать подзапрос, это нельзя ещё считать Join фильтром. Если Вы обновляете строку в таблице упомянутым выше подзапросом, запрос не будет переоценён, и строка не будет включена в репликацию. Join фильтры существуют только в Merge репликации.

Предупреждение: Join фильтры, оперирующие большим количеством таблиц будут существенно снижать эффективность репликации. Не рекомендуется задействовать в Join фильтре более четырёх таблиц.