Поделиться через


Связи таблиц Microsoft Dataverse

Связи таблиц в Microsoft Dataverse определяют способы, которыми могут быть связаны строки таблицы из других таблиц или той же таблицы. Существует два типа связей таблиц:

Отношения "один ко многим"

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

Например, в школьном сценарии несколько курсов могут проводиться в одной аудитории, поэтому таблица аудиторий будет иметь отношение "один ко многим" с таблицей курсов.

Отношения "многие ко многим"

В отношении таблиц "многие-ко-многим" много строк таблицы могут быть связаны с многими строками другой таблицы. Строки, связанные с помощью отношения "многие ко многим", могут рассматриваться как равные, а отношения — равными.

Например, в одном и том же сценарии учебного заведения, упоминаемом ранее, один учащийся может зарегистрироваться в нескольких курсах, и каждый курс может иметь несколько учащихся. Этот тип связи позволяет использовать более сложные связи данных и управляется с помощью Power Apps в Dataverse.

Как работают связи в Dataverse

Связи таблиц определяют, как строки таблиц могут быть связаны друг с другом в Dataverse. На самом простом уровне добавление столбца подстановки в таблицу создает новую связь 1:N (один ко многим) между двумя таблицами и позволяет поместить этот столбец подстановки в форму. При наличии столбца поиска пользователи могут связать несколько дочерних строк данной таблицы с одной родительской строкой таблицы.

Помимо простого определения того, как строки могут быть связаны с другими строками, связи таблиц 1:N также предоставляют данные для решения следующих вопросов:

  • При удалении строки следует удалять все строки, связанные с этой строкой?
  • При назначении строки следует ли также назначить все строки, связанные с этой строкой, новому владельцу?
  • Как упростить процесс записи данных при создании новой связанной строки в контексте существующей строки?
  • Как пользователи, просматривая строку, смогут просматривать связанные строки?

Таблицы также могут участвовать в отношении N:N (многие ко многим), в котором любое число строк для двух таблиц можно связать друг с другом.

Что использовать: отношения или соединения таблиц

Связи таблиц — это метаданные, которые вносят изменения в Dataverse. Эти связи позволяют запросам эффективно извлекать связанные данные. Используйте связи таблиц для определения формальных связей, определяющих таблицу или которые большинство строк могут использовать. Например, возможность без потенциального клиента не будет полезной. Таблица возможностей в Dynamics 365 for Sales также имеет отношение N:N к таблице конкурентов, также доступной в Dynamics 365 for Sales. Это позволяет добавить несколько конкурентов в возможную сделку. Вы можете записать эти данные и создать отчет, показывающий конкурентов.

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

Типы связей таблиц

При просмотре связей в Power Apps можно подумать, что существует три типа связей таблиц. На самом деле существует только два типа, как показано в следующей таблице.

Тип отношений Description
1:N (один-ко-многим) Отношение между таблицами, в которой одна строка таблицы для Основной таблицы может быть связана со многими другими строками Связанной таблицы из-за столбца подстановки в связанной таблице.

При просмотре основной строки таблицы можно просмотреть список связанных строк таблицы, связанных с ним.

На портале Power Apps текущая таблица представляет основную таблицу.
N:N (многие-ко-многим) Отношение таблицы, зависящее от специальной таблицы связей, иногда называемой таблицей Intersect, поэтому многие строки одной таблицы могут быть связаны со многими строками другой таблицы.

При просмотре строк любой таблицы в связи N:N можно просмотреть список всех строк другой таблицы, связанных с ней.

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

Поведение отношений таблиц

Поведение связанных таблиц важно, так как они помогают обеспечить целостность данных и автоматизировать бизнес-процессы.

Сохранение целостности данных

Некоторые таблицы существуют для поддержки других таблиц. Они сами по себе не имеют смысла. Обычно они содержат обязательный столбец для связи с основной таблицей, которую они поддерживают. Что должно происходить при удалении основной строки?

Вы можете использовать механизм взаимоотношений, чтобы определить, что происходит с связанными строками в соответствии с правилами вашей компании. Больше информации: Добавление расширенного поведения отношения

Автоматизация бизнес-процессов

Предположим, что у вас есть новый продавец, и вы хотите назначить им ряд существующих учетных записей, назначенных другому продавцу. Каждая строка организации может иметь несколько действий задач, связанных с ней. Вы можете легко найти активные учетные записи, которые вы хотите переназначить, и назначить их новому продавцу. Но что произойдет с действиями задач, связанными с организациями? Хотелось бы вам открывать каждую задачу и указывать, должна ли она также быть назначена новому продавцу? Скорее всего, нет. Вместо этого можно разрешить отношению применить некоторые стандартные правила автоматически. Эти правила применяются только к строкам задач, связанным с учетными записями, которые вы переназначаете. Можно выполнить следующие действия:

  • Переназначить все активные задачи.
  • Переназначить все задачи.
  • Не переназначать задачи.
  • Переназначьте все задачи, назначенные бывшему владельцу учетных записей.

Отношение может управлять тем, как действия, выполняемые со строкой для строки основной таблицы, распространяются на все строки связанной таблицы.

Поведение

Существует несколько видов поведения, которые могут применяться при выполнении определенных действий.

Поведение Description
Каскадный активный Выполните действие для всех активных связанных строк таблицы.
Каскадный для всех Выполните действие для всех связанных строк таблицы.
Без каскада Никакие действия не выполняются.
Удалить ссылку Удалите поисковое значение для всех связанных строк.
Ограничить Предотвратить удаление основной строки таблицы при наличии связанных строк таблицы.
Каскадный пользовательский Выполните действие для всех связанных строк таблицы, принадлежащих одному и тому же пользователю, что и основная строка таблицы.

Действия

Это действия, которые могут активировать определенные действия:

колонна Description Options
Назначение Что должно произойти, когда основная строка таблицы назначена другому пользователю? Каскадный для всех
Каскадный активный
Каскад для ответств.
Без каскада
Переподчинение Что должно произойти, когда меняется значение поиска связанной таблицы в отношении родительского типа?
Дополнительные сведения: Родительские отношения таблиц
Каскадный для всех
Каскадный активный
Каскад, принадлежащий пользователю
Без каскада
Предоставление общего доступа Что должно произойти, когда строка основной таблицы делится? Каскадный для всех
Каскадный активный
Каскад для ответств.
Без каскада
Удалить Что должно произойти при удалении строки первичной таблицы? Каскадный для всех
Отменить ссылку на статью
Restrict
Отмена общего доступа Что должно происходить при отмене общего доступа к основной строке таблицы? Каскадный для всех
Каскадный активный
Каскад для ответств.
Без каскада
Слияние Что должно происходить при объединенности основной строки таблицы? Каскадный для всех
Без каскада
Обобщенное представление Каково требуемое поведение представления свертки, связанного с этим отношением? Каскадный для всех
Каскадный активный
Каскад, управляемый пользователем
Без каскада

Замечание

Действия назначения, удаления, объединения и переподчинения не выполняются в следующих ситуациях:

  • Если исходная родительская строка и запрошенное действие содержат те же значения. Пример: попытка запустить назначение и выбор контакта, который уже является владельцем строки.
  • Попытка выполнить действие над родительской строкой, которая уже выполняет каскадное действие.

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

Родительские отношения таблиц

Каждая пара таблиц, имеющих право на связь 1:N, может иметь несколько связей 1:N между ними. Однако обычно только одно из этих отношений можно рассматривать как родительское отношение таблиц.

Родительское отношение таблиц — это любое отношение таблиц 1:N, где один из каскадных параметров в столбце Родительское в следующей таблице имеет значение true.

Действие Родительское Не родительское
Назначение Каскадный для всех
Каскад, принадлежащий пользователю
Каскадный активный
Без каскада
Удалить Каскадный для всех RemoveLink
Restrict
Переподчинение Каскадный для всех
Пользователем управляемый каскад
Каскадный активный
Без каскада
Предоставление общего доступа Каскадный для всех
Каскад для ответств.
Каскадный активный
Без каскада
Отмена общего доступа Каскадный для всех
Управляемый пользователями каскад
Каскадный активный
Без каскада

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

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

Например, если в таблице есть запрос клиента, который может ссылаться на таблицу контактов или учетной записи. Существует два отдельных родительских отношения таблиц 1:N.

Любая таблица действия имеет похожий набор родительских отношений таблиц для таблиц, которые можно связать с помощью столбца подстановки "в отношении".

Доступные ограничения поведения

Учитывая родительские связи, существуют некоторые ограничения, которые следует учитывать при определении связей таблиц.

  • Настраиваемая таблица не может быть основной таблицей в каскадном отношении со связанной системной таблицей. Это означает, что между основной настраиваемой таблицей и связанной системной таблицей не может быть отношений с каким-либо из действий со значением Каскадный для всех, Каскадный активный или Передавать владельцу.
  • Новая связь не может иметь действий, установленных на Cascade All, Cascade Active или Cascade User-Owned, если связанная таблица в этой связи уже существует в качестве связанной таблицы в другой связи, где действия установлены на Cascade All, Cascade Active или Cascade User-Owned. Это позволяет избежать создания отношений с несколькими родительскими сущностями.

Очистка унаследованных прав доступа

Использование каскадных операций повторного использования и совместного использования полезны, если требуется предоставить доступ к строкам в связанных таблицах. Но может быть изменение процесса или проектирования, которое требует изменения каскадных параметров поведения.

Если связь таблицы использует Reparent или Share, и каскадное поведение изменяется на Cascade None, то связь таблицы предотвращает каскадные распространения новых изменений разрешений на связанные дочерние таблицы. Кроме того, необходимо отменить унаследованные разрешения, которые были предоставлены в то время как каскадное поведение было активным.

Очистка прав на унаследованный доступ — это системное задание, которое очищает устаревшие унаследованные права доступа, которые остаются после изменения каскадного поведения на Cascade None. Эта очистка не влияет на любого пользователя, которому был напрямую предоставлен доступ к таблице, но удаляет доступ для всех, кто получил доступ только через наследование.

Вот как работает очистка наследуемых прав доступа:

  1. Идентифицирует и собирает все таблицы, которые были в каскадной связи с обновленным родительским элементом.
  2. Определяет и собирает пользователей, которым предоставлен доступ к связанным таблицам с помощью унаследованного доступа.
  3. Проверяет пользователей, которым предоставлен прямой доступ к связанной таблице и удаляет их из коллекции.
  4. Удаляет для собранных пользователей унаследованный доступ к собранным таблицам.

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

См. также

Мониторинг системных заданий
Создание и изменение связей 1:N (один ко многим) или N:1 (многие к одному)
Создайте связи "многие ко многим" (N:N) для таблиц