Направление имеет значение для одного-ко-многим: это зависит от того, какой магазин является «родительским».
Реляционные магазины включают в себя концепцию «ActivePivot Store», которая является вашим основным хранилищем (на котором основана ваша схема). Затем этот магазин можно присоединить к одному или нескольким магазинам с учетом набора ключевых полей, которые мы будем называть «дочерними» магазинами для простоты. Каждый из этих дочерних магазинов может быть соединен с другими магазинами и т. Д. (Вы можете представить его с помощью ориентированного графа).
Главное правило состоит в том, что у вас никогда не должно быть записи «родительского» хранилища, разрешающей несколько записей «дочернего» хранилища (и не должно быть никаких циклических отношений, которые я считаю).
Упрощенная идея реляционных хранилищ (как RS 1.5.x/AP 4.4.x) заключается в том, что когда одна запись отправляется в «ActivePivot Store», то, начиная с хранилища ActivePivot, она рекурсивно разрешает соединяется, чтобы получить максимум одну запись в каждом из объединенных хранилищ. В зависимости от определения вашей схемы эти записи будут использоваться для заполнения факта перед его вставкой в куб.
Если решение об объединении приведет к более чем одной записи, то AP не сможет выбрать, какой из них использовать, чтобы заполнить этот факт и выдать исключение.
Возвращаясь к вашему примеру, вы можете сделать соединение между Магазином 1 и Магазином 2 только в том случае, если Store 2 является вашим хранилищем ActivePivot или «родителем» Магазина 1 (APStore -> ...-> Store2- > Store1), который, кажется, ваш случай.
Если нет (Store1-> Store2), вам необходимо будет дублировать записи Магазина 1, чтобы гарантировать, что при разрешении соединения всегда будет найдено максимум одна запись. Магазин 1 будет тогда выглядит следующим образом:
| Key 1 | SomeId1 | Measure1
| Key 1 | SomeId2 | Measure1
Вашего присоединиться магазин-затем будет сделан на полях «Key, SomeId» вместо просто «ключа», и что обеспечит вам найти только одну запись, когда разрешающей store1 -> Store2
Спасибо, Дэвид. Так должен ли быть когда-нибудь единственный магазин с типом «ACTIVEPIVOT_STORE», а все остальное - реляционные хранилища ванили? – obrienk
Если ваша схема основана на реляционных хранилищах, тогда да, должен быть только один ACTIVEPIVOT_STORE, а остальные - ванильные магазины. Если у вас две схемы, у вас может быть два ACTIVEPIVOT_STORE, хотя – David