Afficher les relations plusieurs à plusieurs dans des hiérarchies dérivées (Master Data Services)
S’applique à : SQL Server - Windows uniquement Azure SQL Managed Instance
Les hiérarchies dérivées affichent des relations un à plusieurs et peuvent désormais également afficher des relations plusieurs à plusieurs.
Relations plusieurs à plusieurs
Une relation plusieurs à plusieurs entre deux entités peut être modélisée via l’utilisation d’une troisième entité effectuant un mappage entre les elles :
Dans l’exemple ci-dessus, il existe une relation plusieurs à plusieurs entre les entités Employee et TrainingClass , fournie par l’entité de mappage ClassRegistration. Un employé peut être inscrit en tant qu’un étudiant dans plusieurs classes, et chaque classe peut contenir plusieurs étudiants.
Vous pouvez créer une hiérarchie dérivée affichant, par exemple, les étudiants par classe, ou inverser la relation et afficher les classes regroupées par étudiant.
Remarque
SQL Server 2016 (13.x) a introduit une hiérarchie dérivée pour les relations plusieurs à plusieurs. Cette fonctionnalité n’était pas disponible avant cette version.
Accédez d’abord à la page de gestion des hiérarchies dérivées, puis créez une hiérarchie dérivée :
Ensuite, ajoutez des niveaux à la nouvelle hiérarchie dérivée, en commençant par le bas. Dans cet exemple, nous souhaitons afficher étudiants (employés) regroupés par classe. L’entité mployee entité est par conséquent le niveau feuille de la hiérarchie, et est ajoutée en premier :
Dans la capture d’écran ci-dessus, notez que l’entité employé apparaît sous Niveaux actuels , au milieu, comme le seul niveau. L’aperçu de la hiérarchie dérivée à droite affiche simplement la liste de tous les membres de l’entité Employee. La section Entités et hiérarchies disponibles à gauche montre les niveaux qui peuvent être ajoutés en plus du niveau supérieur en cours (Employee). La plupart d’entre eux sont des attributs basés sur un domaine (DBA) sur l’entité Employee , y compris le DBA Department .
À partir de SQL Server, un nouveau type de niveau modélise les relations plusieurs à plusieurs, par exemple : Class (mappé via ClassRegistration.Student). Le nom du niveau est plus détaillé que les autres afin de refléter les informations supplémentaires nécessaires pour décrire clairement la relation de mappage. Faites glisser ce niveau vers le niveau Employee dans la section Niveaux actuels :
L’aperçu affiche à présent les employés regroupés en fonction des classes de formation auxquelles ils sont inscrits. Dans la mesure où il s’agit d’une relation plusieurs à plusieurs, chaque membre enfant peut avoir plusieurs parents. Dans l’exemple ci-dessus, l’employé 6 {Hillman, Reinout N} est enregistré en tant qu’étudiant dans deux classes, 1 {Master Data Services 101} et 4 {Career-Limiting Moves}.
Cette relation de mappage peut également être affichée de façon inversée, en regroupant les classes par étudiant :
Là encore, nous voyons comment un enfant peut apparaître sous plusieurs parents : la classe de formation 1 {Master Data Services 101} s’affiche sous 6 {Hillman, Reinout N} et 40 {Ford, Jeffrey L}.
Les membres de l’entité de mappage ClassRegistration n’apparaissent nulle part dans la hiérarchie dérivée. Ils servent simplement à définir les relations entre les membres parents et enfants dans la hiérarchie.
Vous pouvez modifier la relation plusieurs à plusieurs en modifiant les membres de l’entité qui mappe de l’une des manières suivantes. La relation plusieurs à plusieurs est en lecture seule dans la page de l’explorateur Hiérarchie dérivée .
Modifiez les membres de l’entité de mappage dans la page de l’ explorateur d’entités en utilisant le complément Master Data Services pour Excel, ou en procédant à une mise en lots des données.
Glissez-déplacez les nœuds enfants entre les parents dans la page de l’ explorateur Hiérarchie dérivée.
Cette méthode modifie les membres existants quand c’est possible, et ajoute de nouveaux membres si nécessaire. Les membres existants ne sont pas supprimés.
Par exemple, avec l’entité de mappage ClassRegistration, lorsque vous déplacez un étudiant vers le nœud inutilisé, la valeur d’attribut de classe du membre d’entité de mappage correspondant est modifiée sur Null, et le membre n’est pas supprimé. Inversement, lorsque vous déplacez un étudiant à partir du nœud inutilisé vers une classe, s’il existe un membre de mappage correspondant à l’étudiant pour lequel la classe est Null, ce membre est modifié en remplaçant la classe Null par le nouveau parent. Si aucun membre n’est trouvé, un membre est ajouté.
Ce processus évite la suppression de membres pour empêcher toute suppression involontaire d’autres données utilisateur, par exemple, si l’entité de mappage contient des attributs autres que les deux attributs définissant la relation parent-enfant. Les utilisateurs doivent opérer explicitement les suppressions directement sur l’entité qui effectue le mappage.
Le nouveau niveau plusieurs à plusieurs peut apparaître n’importe où dans une hiérarchie dérivée dont le niveau d’attribut basé sur un domaine (DBA) est autorisé. Un niveau plusieurs à plusieurs peut se trouver en haut, comme dans les exemples ci-dessus. Il peut être au-dessus ou au-dessous d’un niveau DBA, y compris récursif. Il peut être sous un niveau supérieur de la hiérarchie explicite (déconseillé). Des relations plusieurs à plusieurs peuvent être chaînées dans une même hiérarchie dérivée.
Des niveaux plusieurs à plusieurs peuvent être masqués, tout comme les autres niveaux de la hiérarchie dérivée.
Relation plusieurs à plusieurs dans l’exemple de modèle
La hiérarchie dérivée Region Climate de l’exemple de modèle Customer fournie avec Master Data Services vous permet de visualiser une démonstration d’une relation plusieurs à plusieurs.
Comme illustré dans l’image ci-dessous, le nom du niveau qui modélise cette relation est Climate (mappé via RegionClimate.Region). L’aperçu montre les régions regroupées selon les types de climats auxquels elles sont associées. Il s’agit d’une relation plusieurs à plusieurs car certaines régions (membres enfants) sont associées à plusieurs climats (parents). Par exemple, ACPR {Asia Pacific} est associé à A {Tropical} et B {Dry}.
Pour obtenir des instructions sur le déploiement de l’exemple de modèle Customer et les autres exemples de modèles fournis avec Master Data Services, consultez Déploiement des exemples de modèles et de données.
Relation un à plusieurs.
Un membre d’une hiérarchie dérivée peut être le parent de nombreux membres enfants, mais il ne peut généralement pas avoir plus d’un parent (pour les exceptions, voir Sécurité des membres). Par exemple, il existe deux entités, Employee et Department, dans lesquelles chaque employé appartient à un seul service. Cette relation est modélisée en ajoutant à l’entité Employee un attribut basé sur un domaine (DBA) qui fait référence à l’entité du service :
Il s’agit d’une relation un à plusieurs, car chaque employé fait partie d’un seul service, et chaque service peut compter plusieurs employés. Il est possible de créer une hiérarchie dérivée qui affiche les employés regroupés par service :
Sécurité des membres
Une hiérarchie permettant une duplication des membres (permettant à un membre d’avoir plusieurs parents) ne peut pas être utilisée pour affecter des autorisations de sécurité de membre. Par exemple :
Une hiérarchie dérivée qui n’ancre pas les récursions Null (chaque membre au niveau récursif apparaît sous la racine et sous son parent récursif).
Une hiérarchie dérivée récursive avec un niveau au-dessus du niveau récursif (chaque membre du niveau récursif apparaît sous son parent non récursif et son parent récursif).
Une hiérarchie dérivée avec un niveau plusieurs à plusieurs (un enfant peut être mappé de nombreux parents).
Collections
Les Hiérarchies explicites et collections sont déconseillées. La procédure stockée de conversion (udpConvertCollectionAndConsolidatedMembersToLeaf) convertit des membres de la collection en membres feuille, et crée des hiérarchies dérivées plusieurs à plusieurs pour capturer les informations d’appartenance.