banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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

Julie P
Participant actif
Lieu: Pessac
Date d'inscription: 4 Oct 2006
Messages: 107
Site web

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

Julie P
Participant actif
Lieu: Pessac
Date d'inscription: 4 Oct 2006
Messages: 107
Site web

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

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Geodatabase - éditer la table d'une relation (n,m)

Bonjour,

zone12 a écrit:

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]

zone12 a écrit:

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" !!!

zone12 a écrit:

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
smile

A+

Franck

Hors ligne

 

Pied de page des forums

Powered by FluxBB