#1 Wed 06 July 2011 17:31
- zone12
- Participant actif
- Date d'inscription: 3 Jan 2008
- Messages: 56
Geodatabase - éditer la table d'une relation (n,m)
Bonjour,
Ma question est simple : comment remplir automatiquement la table d'une relation de cardinalité (n,m) ?
Dans une Geodatabase, lorsqu'on crée une relation (n,m), la relation est aussi une table (que l'on peut importer dans ArcMap puis l'ouvrir, l'éditer).
D'après l'aide (pas très bavarde sur le sujet hormis la dernière phrase) et le support ESRi, il semble qu'il faille remplir à la main la table correspondant à une relation "plusieurs à plusieurs".
Dans l'aide ArcGis10 il est dit :
Relations plusieurs vers plusieurs
Dans les relations de type un vers un et un vers plusieurs, les valeurs de la clé primaire dans la classe d'origine sont directement liées aux valeurs de la clé étrangère dans la classe de destination.
En revanche, les relations plusieurs vers plusieurs nécessitent l'utilisation d'une table intermédiaire pour mapper les associations. De ce fait, lorsque vous créez une relation plusieurs vers plusieurs, une table intermédiaire est créée automatiquement. La table intermédiaire mappe les valeurs de clé primaire de l'origine sur les valeurs de clé étrangère de la destination. Chaque ligne associe un objet d'origine à un objet de destination.
Les relations de type plusieurs vers plusieurs nécessitent l'utilisation d'une table intermédiaire.
Seuls les champs sont générés lors de la création de la table intermédiaire. ArcGIS ne sait pas à quels objets de destination les objets d'origine sont associés et les lignes doivent donc être créées manuellement dans ArcMap. Le remplissage de cette table constitue la phase la plus longue de la configuration de la relation.
Une idée ?
Hors ligne
#2 Thu 07 July 2011 01:48
- mame1985
- Participant assidu
- Lieu: Montréal
- Date d'inscription: 16 Oct 2010
- Messages: 444
Re: Geodatabase - éditer la table d'une relation (n,m)
Bonjour
Si mes souvenirs sont bons
j'ai dejà fait ce genre de travail mais je me rappelle j'avais tous construit sous acces
c'etait genre (bus, troncons, batiments_s,batiments_P,prprietaires etc)
sinon tu peux utiliser les relaionshipclass sous arc catalogue et faire l'edition sous arc map
Merci
Mame
Hors ligne
#3 Thu 07 July 2011 08:53
- zone12
- Participant actif
- Date d'inscription: 3 Jan 2008
- Messages: 56
Re: Geodatabase - éditer la table d'une relation (n,m)
En effet sous Access je vois bien comment faire et l'édition sous ArcMap je vois aussi.
Le problème c'est que si j'ai des milliers de lignes dans la table de ma relation (n,m), je vais passer beaucoup de temps à les créer une par une sous ArcMap (et c'est ce que je ne voudrais pas faire).
J'ai peut être une solution de contournement :
plutôt que de faire : tableA --- relation(n,m) --- tableB
je pense faire : tableA --- relation(1,n) --- tableC --- relation(n,1) ---tableB
Ce qui je crois revient au même ?
Dernière modification par zone12 (Thu 07 July 2011 09:25)
Hors ligne
#4 Thu 07 July 2011 10:27
Re: Geodatabase - éditer la table d'une relation (n,m)
Dans mon souvenir le plus simple était de créer d'abord la table "intermédiaire", et ensuite la relation à partir de cette table en utilisant l'outil ad hoc de l'arctoolbox (un truc genre "create relationship from table"). Ce qui je crois reviens effectivement à votre solution?
Hors ligne
#5 Fri 08 July 2011 11:01
- zone12
- Participant actif
- Date d'inscription: 3 Jan 2008
- Messages: 56
Re: Geodatabase - éditer la table d'une relation (n,m)
En effet, j'ai créé moi-même la table intermédiaire (tableA --- relation(1,n) --- tableC --- relation(n,1) ---tableB) que j'ai pu remplir automatiquement. J'ai ensuite défini des relations (1,n).
Ca fera l'affaire pour le moment.
Merci de vos retours.
Hors ligne
#6 Fri 08 July 2011 15:25
Re: Geodatabase - éditer la table d'une relation (n,m)
Par contre, à partir de cette table, on peut créer directement la relation (n,m) (ArcToolbox -> Data Management Tools -> Relatioship Classes -> Table to Relationship).
Hors ligne
#7 Mon 11 July 2011 16:11
- zone12
- Participant actif
- Date d'inscription: 3 Jan 2008
- Messages: 56
Re: Geodatabase - éditer la table d'une relation (n,m)
Sauf erreur de ma part, le problème de "Table to Relationship" est que la relation (n,m) ne repose pas sur les 2 clés étrangères des tables liées (2 nouveaux champs sont créés et leur mise à jour est manuelle).
Les champs de la table renseignée dans "Relationship Table" sont seulement ajoutés et ne constituent pas une clé primaire composée.
Donc il n'est pas possible de remplir automatiquement la clé composée (les 2 champs créés) ni de maintenir automatiquement l'intégrité référentielle.
Dans la solution de contournement : (tableA --- relation(1,n) --- tableC --- relation(n,1) ---tableB) , il est possible de maintenir cette intégrité mais dans un seul sens uniquement (ce qui semble être semblable aux SGBD).
Une suppression dans tableA entraine une/des suppression dans tableC mais une suppression dans tableB n'entraine aucune suppression dans la tableC . De plus on peut renseigner la tableC automatiquement avant de créer les relations.
Hors ligne
#8 Thu 14 July 2011 10:56
Re: Geodatabase - éditer la table d'une relation (n,m)
Bonjour,
le problème de "Table to Relationship" est que la relation (n,m) ne repose pas sur les 2 clés étrangères des tables liées (2 nouveaux champs sont créés et leur mise à jour est manuelle).
Les champs de la table renseignée dans "Relationship Table" sont seulement ajoutés et ne constituent pas une clé primaire composée.
Je ne comprends pas, la table intermédiaire permettant de mettre en place la relation n,m possède au minimum deux champs : l'identifiant de la première table (sa clé primaire) et l'identifiant de la deuxième (sa clé primaire) (comme le montre ce schéma) :
[img]http://help.arcgis.com/fr/arcgisdesktop/10.0/help/004t/GUID-02E08A70-B567-449B-85E7-94346B21CF6E-web.gif[/img]
Donc il n'est pas possible de remplir automatiquement la clé composée (les 2 champs créés) ni de maintenir automatiquement l'intégrité référentielle.
Ben... si... manuellement c'est possible de récupérer automatiquement les deux clés en sélectionnant les deux objets en relations : http://help.arcgis.com/fr/arcgisdesktop … 00m000000/
Le problème est que pour remplir cette relation en masse en utilisant l'outil Table vers classe de relations (Gestion des données), il faut générer cette table...
D'après, la solution de contournement que tu proposes, tu as réussi à créer un tableC qui contient, pour un objet, la clé de la tableA et la clé de la tableB, cette tableC est la table qui permet d'utiliser l'outil "Table to Relationship" !!!
Dans la solution de contournement : (tableA --- relation(1,n) --- tableC --- relation(n,1) ---tableB) , il est possible de maintenir cette intégrité mais dans un seul sens uniquement (ce qui semble être semblable aux SGBD).
Une suppression dans tableA entraine une/des suppression dans tableC mais une suppression dans tableB n'entraine aucune suppression dans la tableC . De plus on peut renseigner la tableC automatiquement avant de créer les relations.
C'est pour cela qu'il faut mieux utiliser la classe de relation n,m
A+
Franck
Hors ligne