Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Merge репликация: Many-to-Many  [new]
Андрей Антипов
Member

Откуда:
Сообщений: 7
Друзья,

подскажите как правильно организовать фильтрацию статей для merge-репликации с использованием JOIN-фильтров.

Суть:

Есть 5 таблиц, являющихся частью БД CRM-системы, доступа к исходному коду клиента CRM-системы нет, потому изменения схемы БД недопустимы:
  • User
  • Brick (регион пользователя) (300 строк)
  • Article_Link (таблица для разбивки зависимостей M:M между всеми таблицами БД, где эта связь существует) (1.5 млн строк)
  • Company (организации) (90.000 строк)
  • Contact (сотрудники организаций) (290.000 строк)

    Скрипты на создание таблиц упрощу, главное суть:
    --User
    CREATE TABLE User
    (
    [id] uniqueidentifier NOT NULL DEFAULT NEWID()
    , username nvarchar(50) NOT NULL
    )
    --Brick
    CREATE TABLE Brick
    (
    [id] uniqueidentifier NOT NULL DEAFULT NEWID()
    , username nvarchar(50)
    )
    --Article_Link
    (
    rowguid uniqueidentifier NOT NULL DEAFULT NEWID()
    , article1_id uniqueidentifier NOT NULL
    , article2_id uniqueidentifier NOT NULL
    , relationship_id int NOT NULL
    )
    --Company
    CREATE TABLE _Company
    (
    [id] uniqueidentifier NOT NULL DEFAULT NEWID()
    , [name] nvarchar(255)
    )
    --Contact
    CREATE TABLE _Company
    (
    [id] uniqueidentifier NOT NULL DEFAULT NEWID()
    , [fullname] nvarchar(255)
    )
    


    Контроль целостности осуществляется при помощи триггеров (видимо для повышения масштабируемости CRM) ,т.е. PK на таблицах есть, но явные связи только через таблицу Article_Link.

    Связь М:М описывается в таблице Article_Link как:
    User<->Brick : <user_id>, <brick_id>, 120(relation id), <unique row id>
    Company<->Brick : <company_id>, <brick_id>, 121(relation id), <unique row id>
    Contact<->Company : <contact_id>, <company_id>, 122(relation id), <unique row id>
    Contact<->Brick : <contact_id>, <brick_id>, 123(relation id), <unique row id>

    Для таблицы User используется параметризованный фильтр
    WHERE [_User].username = SUSER_SNAME() 
    


    Все указанные статьи Bidirectional (т.е. записи могут редактироваться/удаляться как на издателе, так и на подписчике)

    Вопрос:
  • Как ограничить размер Article_Link для подписчика (при условии что в ней более 1.5 млн строк) ?
  • Как привязать к таблице User территории Brick и далее организации и контакты?

    В описании к параметризованным и JOIN-фильтрам указано, что не следует использовать в качестве фильтра источники с изменяемыми данными.
  • 21 авг 12, 13:27    [13042805]     Ответить | Цитировать Сообщить модератору
     Re: Merge репликация: Many-to-Many  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9824
    Версии серверов?
    22 авг 12, 16:51    [13050707]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить