Insertion données provenant d'une table dans une autre

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 avr. 2006, 15:51

Donc un carnet d'adresse peut contenir plusieurs agent et un agent peut être dans plusieurs carnets d'adresses.

En modélisation, c'est ce qu'on appelle une relation n-n, ce qui veut dire qu'il te faut une table intermédaire qui va contenir les associations entre les agents et les carnets d'adresse.

Je te propose le schéma suivant :

Code : Tout sélectionner

CREATE TABLE agent_carnet ( `idcarnet` int(11) NOT NULL default '0', `idagent` int(11) NOT NULL default '0', KEY `assoc` (`idcarnet`, `idagent`) )
A chaque fois que tu veut mettre un agent dans un carnet d'adresse, il te suffit d'insérer une ligne dans cette table avec l'id du carnet et l'id de l'agent

Pour voir les agents d'un carnet, il te suffit de sélectionner toutes les lignes de cette table où idcarnet correspond et vice-versa
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 avr. 2006, 17:06

lol, j'ai enfin compris le fonctionnement, je peux proposer alors une solution :

Les tables :

1. Compte d'une personne enregistrée (A)

2. Carnet d'adresse contenant les contacts d'une personne (B)

3. Contact définissant les infos utiles (Agents compris mais pas les seuls contacts possibles) (C)

4. Agents pouvant être aussi des contacts (D)

Relations entre tables :

(A) <--- 1/1 --- (B) : une personne a un carnet d'adresses (B dépond de A)

(B) --- 1/N ---> (C) : le carnet d'une personne contient N contacts (Agents compris mais pas les seuls)

(C) <--- 1 --- (D) : 1 Agent est un contact potentiel

Remarque : le sens de la flêche est une dépondence, qui sera représentée par la migration de la clé primaire en tant que clé étrangère dans le sens inverse de la flêche

Donc :
(A): Table Personne (id, ....) Clé primaire = id

(B): Table Carnet_adresse (id_personne, id_contact) Clé étrangères = id_personne et id_contact
Le carnet d'adresse est alors une association entre la personne et ses contacts

(C): Table Contact (id, nom, prenom, adresse, ville, cp, email, tel,....) Clé primaire = id

(D): Agent (id, id_contact, ....) Clé primaire = id, Clé étrangère = id_contact
Un Agent est aussi un contact

Comment utiliser le modèle :
1. une personne peut être créée sans conditions relationnelles
2. un contact peut être créé sans conditions relationnelles
3. un carnet est créé pour une personne existante et un contact existant
4. En créant un Agent, un contact est forcement créé ou existant

Une proposition de remplissage d'un carnet d'adresses d'une personne existante

Organigramme du Formulaire:

1. Saisie id Personne (choix d'une valeur existante ou nouveau)
2. Saisie Infos Contact (nouveau ou existant)
3. Enregistrer l'id personne et l'id_contact dans la table "Carnet_adresse"
4. Répéter les actions 2 et 3 pour ajouter d'autres contacts dans le carnet de la même personne
Modifié en dernier par sadeq le 10 avr. 2006, 13:05, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 206 Messages

06 avr. 2006, 17:46

Merci bcp c'est bien plus clair. Je réflechir à tous ça. je vous montrerai l'avancée demain :)

Mais en tout cas j'ai bien saisie le principe cette fois ci

Meric pour votre aide