Association polymorphique compliquée

Bonjour,
J’ai besoin de développer une relation polymorphique et de stocker le
type de la table de référence et l’id dans deux tables différentes
(comme ca, ca ne doit pas être très clair).
Voilà l’exemple :

table PERSONNES

  • id
    -…

table VILLES

  • id
  • nom

table PAYS

  • id
  • nom

table MANDATS

  • id
  • nom
  • lieu_type = VILLE ou PAYS

table ELUS

  • id
  • personne_id
  • mandat_id
  • lieu_id -> fait référence à la table VILLES ou PAYS en fonction du
    lieu_type du mandat associé

Est-il possible de mettre ca en place ?
Si non, quelle solution voyez-vous pour obtenir un résultat similaire ?
Merci à tous
Adrien

Bonjour,

C’est possible, mais est tu sur d’avoir besoin de la table Elus ?
avec personnes, villes, pays et mandats pour faire la jointure tu
devrais pourvoir t’en sortir, non ?

Le 28 juin 09 à 08:42, Adrien N. a écrit :

Oui j’ai besoin de la table ELUS car une personne peut avoir plusieurs
mandats, j’ajoute aussi dans la table ELUS un champ booléen ancien qui
indique si c’est un renouvelement du mandat ou pas.

Quelqu’un peut-il me dire comment réaliser ca en rails, malgrè mes
recherches je ne trouve rien :s Je lis l’anglais mais ne cherche
peut-être pas bien.

Oui j’ai besoin de la table ELUS car une personne peut avoir plusieurs
mandats, j’ajoute aussi dans la table ELUS un champ booléen ancien qui
indique si c’est un renouvelement du mandat ou pas.

D’après ce que j’en comprends, ce n’est pas un argument. Si dans ta
table
mandat tu ajoutes un personne_id, tu as donc une relation personne
has_many
mandats et mandats belongs-o personne, une personne pourra avoir
plusieurs
mandats sans soucis. de plus dans cette meme table mandats tu peux
rajouter
ton champ ‘ancien’.

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

c’est un autre Guillaume qui avait posté dans un premier temps (-;

peut-il y avoir plus d’une personne sur un meme mandat ?

gUI

Le 28 juin 2009 13:39, Adrien N. [email protected] a écrit
:

Ok je n’avais pas bien compris ce que tu voulais dire, alors non cela ne
me va pas car MANDATS sert à lister les mandats possibles existants. Il
n’y a pas forcément une personne élue pour chaque mandat, certains ne
seront peut être pas utilisés.

Posted via http://www.ruby-forum.com/.


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

Guillaume B. wrote:

c’est un autre Guillaume qui avait posté dans un premier temps (-;
oups je n’avais pas vu, désolé

peut-il y avoir plus d’une personne sur un meme mandat ?
oui il peut y avoir plusieurs personne pour un même mandat
bon je donne des exemples pour expliciter un peu tout ca :

ce que j’ai prévu :

  • mandat vas contenir des enregistrement du genre
    (0,maire,villes)
    (1,conseiller municipal,villes)
    (2,ministre,pays)
    (3,président,pays)
  • elu va contenir des enregistrement du genre :
    (0,jacques machin,maire,poitiers)
    (1,michel ducoin,maire,chatellerault)
    (2,jacques vigneret,conseiller municipal,angouleme)
    (3,monique dufour,ministre,france)
    (4,martine dugalet,presidente,irlande)
    NB: j’ai remplacé personne_id,mandat_id,ville_id par
    personne.nom,mandat.nom,ville.nom

la table mandat me sert à obtenir la liste des mandats possibles pour
les afficher dans un formulaire où l’on choisira les mandats de chaque
personne.

donc les solutions que je vois sont :

  1. ce que j’ai dit premièrement
  2. ajouter (dupliquer) type_lieu dans la table elus (c’est peut être le
    plus simple même si ce n’est pas très propre?)
  3. grouper les tables elus et mandats :
    MANDATS
  • id
  • nom
  • lieu_id
  • lieu_type
  • personne_id
    auxquels cas je stockerai la liste des mandats possibles en créant des
    mandats associés à aucune personne (ce sera la liste des mandats que
    j’affiche dans le formulaire)

Une autre précision un peu hors sujet :
Il faudrait aussi que je laisse la possibilité à l’utilisateur d’ajouter
des mandats et des types de lieu (donc de créer une nouvelle table de
lieu par exemple DEPARTEMENTS), je ne sais pas si je pourrai y arriver
sans que l’on ai à modifier du code mais si oui, ma solution devrait
être celle qui permet de faire ca.
J’espère que j’ai été clair.
Merci pour votre aide !
adrien

oui il peut y avoir plusieurs personne pour un même mandat

ok, je vois. je suis pas du tout specialiste du polmorphisme, je pense
que
ce que j’aurais fait à ta place c’est tout simplement de mettre 2 id
dans
ELU, par exemple pays_id et ville_id, et selon le mandat, je remplis
l’un ou
l’autre (et j’utilise l’un ou l’autre).

mais je suis pas sur que ce soit la solution la plus élégante.

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

Ok je n’avais pas bien compris ce que tu voulais dire, alors non cela ne
me va pas car MANDATS sert à lister les mandats possibles existants. Il
n’y a pas forcément une personne élue pour chaque mandat, certains ne
seront peut être pas utilisés.

hum, merci mais non cette solution ne me convient pas, c’est trop moche
:slight_smile: je préfère encore dupliquer type_lieu dans les tables MANDATS et
ELUS

si quelqu’un d’autre pouvez me conseiller, j’aimerai développer ca le
plus proprement possible !

adrien

Salut !

1ère remarque : tu aimerais faire cela le plus proprement possible
comme tu le dis, donc déjà n’utilise jamais de variables ou de noms de
tables en Français dans tes logiciels, et cela quel que soit ton
logiciel.
2ème remarque : a mon avis ça serait très simple à implémenter en
Rails si tes modèles City et Country découlent en STI d’un modèle
Place. D’ailleurs en regardant ton schéma ils ont pour l’instant les
mêmes attributs.

Nicolas.

Le 28 juin 2009 08:42, Adrien N.[email protected] a écrit :

c’est peut être pas très joli mais ca ne change quand même pas grand
chose ?

c’est surtout très piégeux, Rails considérant les singluiers et pluriels
Ã
l’anglaise.

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

Nicolas B. wrote:

Salut !

1�re remarque : tu aimerais faire cela le plus proprement possible
comme tu le dis, donc d�j� n’utilise jamais de variables ou de noms de
tables en Fran�ais dans tes logiciels, et cela quel que soit ton
logiciel.
je vais y penser, mais ca me semble fastidieux de chercher tous les
termes en anglais, surtout que cette aplication ne sera jamais traduite.
c’est peut être pas très joli mais ca ne change quand même pas grand
chose ?

2�me remarque : a mon avis �a serait tr�s simple � impl�menter en
Rails si tes mod�les City et Country d�coulent en STI d’un mod�le
Place. D’ailleurs en regardant ton sch�ma ils ont pour l’instant les
m�mes attributs.
C’est vrai mais j’ai beaucoup simplifié le schéma, en fait pour Ville il
y aura comme information l’adresse de la mairie, telephone, email,etc…
autant d’information qui sont inutiles dans la table pays.
Je peux quand même faire une table lieu polymorphique :
LIEUX

  • id
  • lieu_type
  • lieu_id
    qui renverrai vers les différentes tables de lieu mais c’est moche aussi
    non ? sachant qu’il y a beaucoup de table de lieu
    (pays,regions,departements,communes,cantons…), je ne pense pas que ce
    soit bien de faire ca ?

Plus ca va, plus je me demande bien comment je vais résoudre ce problème
:S
Ma première solution n’est vraiment pas correcte?
Quelle autre approche je peux avoir ?
Dupliquer le champ lieu_type n’est pas optimal mais il n’y a pas non
plus de risque d’incohérence car le type de lieu correspondant a un
mandat ne changera jamais.
Merci
adrien

Je saurai y faire attention :slight_smile:
merci