Kent Posté 30 Août 2006 Posté 30 Août 2006 Bonjour à tous, J'éspere que vous avez passé de bonnes vacances pour ceux qui ont eu la chance d'en avoir. Voici mon probléme : Je suis en train de travailler sur la concéption de la base de donnée d'un nouveau site, mais me voila heurté à un probléme. Je voudrais proposer à mes visiteurs la possibilité d'avoir un profil et le personalisé, aussi je voudrais que ce profil soit creer lors de l'inscription dans une table PROFIL. Ma question est la suivante : comment lié une table MEMBRE à une table PROFIL de façon que lorsqu'un membre s'inscrit le profil correspondant se creé aussi et que lorsqu'un membre est suprimé le profil correspondant le soit aussi. Je pensé mettre un champ id_profil dans la table MEMBRES en clé étrangere, et le même id_profil en clé primaire dans la table PROFIL, mais comment faire pour que cet id soit le même dans les deux tables en le générant avec un autoicrement ? Merci de me dire si je suis dans la bone voie ou pas du tout, et si vous pensiez à d'autres méthodes je suis preneur.
beal2912 Posté 30 Août 2006 Posté 30 Août 2006 Bonjour, comment lié une table MEMBRE à une table PROFIL de façon que lorsqu'un membre s'inscrit le profil correspondant se creé aussi et que lorsqu'un membre est suprimé le profil correspondant le soit aussi. Ca tu dois pouvoir le faire manuellement avec PHP. Sinon pour le gérer directement avec SQL il faut utiliser des Triggers... Sinon quel est la relation entre Membre et profil : - un membre a un unique profil et un profil a un seul membre? - un membre a un seul profil et un profil peu etre utiliser par plusieurs membres? Pour l'autoincrement si tu crées le membre puis le profil tu peux réccupérer ton id entre les 2 insert
Kent Posté 30 Août 2006 Auteur Posté 30 Août 2006 Merci de prendre le temps de me répondre . Les tables sont des tables MySQL et sont définies comme ceci : Pour les contraintes d'intégritées : A un membre est associé un et un seul profil. A un profil est associé un et un seul membre. Voici ce qu'il se passe lors de l'inscription d'un membre pour le moment. $new_entree = mysql_query("INSERT INTO membres VALUES ('','$pseudo','$mdp','$sexe','$email','$jour2n','$mois2n','$annee2n','$style','$departement','$source','$level')"); Je voudrais donc inserer dans cette table MEMBRES un champs id_profil en autoincrement qui lui sera la clé primaire de la table PROFILS ainsi je pourrais faire suivre la requete suivante $new_profil = mysql_query("INSERT INTO profils VALUES ('membres.id_profil', [ autres champs ] , "); Déja pensez-vous que ceci est possible ? Ensuite lors de la désinscription d'un membre dois-je faire quelque chose du genre, ("DELETE FROM membres WHERE id_membre='id'") UNION ("DELETE FROM profils WHERE id_profil='id'"); Ou est-ce que le fait de supprimé le membre dans la table MEMBRES supprimera automatiquement le profil associé dans la table PROFILS ?
beal2912 Posté 30 Août 2006 Posté 30 Août 2006 INSERT INTO profils VALUES ('membres.id_profil', [ autres champs ] , "); Je ne crois pas que ceci soit possible directement La suppression ne sera pas automatique il faut supprimer les valeurs dans chaque table. Ne serait il pas plus simple d'avoir une seule table avec tous les champs ?
Kent Posté 30 Août 2006 Auteur Posté 30 Août 2006 (modifié) A vrai dire j'ai pensé à cette methode ne conaissant pas d'autre et apres avoir creer ma table MEMBRE, je pensé qu'il serait plus "propres" de séparé les données dans les profils des données fournies à l'inscription se trouvant dans la table MEMBRE, je n'ai jamais creer de site auparavant gerant des profils pour ses membres, si vous connaissez une autre méthode de concéption je suis à l'écoute. Il est vrai que tout mettre dans une seule table serait beaucoup plus simple, mais je me retrouveré avec pas mal de champs ... entre creer une table distincte PROFIL et une table distincte MEMBRE ou tout rassembler laquelle des deux méthodes optimiseré les performances ? Modifié 30 Août 2006 par Kent
robinsonvendredi Posté 30 Août 2006 Posté 30 Août 2006 A un membre est associé un et un seul profil.A un profil est associé un et un seul membre. Id que Beal 2912, tu peux n'avoir qu'une seule table pourquoi en faire 2 ? Sinon pour la suppression il existe trois méthodes : - supprimer manuellement l'enregistrement de la table dépendante avant celui de la table principale - un trigger - la commande ON DELETE CASCADE sur la table principale (Pour Mysql je ne suis pas sûr que ces 3 options existent ). <edit> apparemment ON DELETE CASCADE est documenté pour mysql5 </edit>
beal2912 Posté 30 Août 2006 Posté 30 Août 2006 Je crois que le cas n'existe pas en merise : tab_MEMBRE -- 1,1 ------------------ 1,1 -- tab_PROFIL 1,1 pour les cardinalités Les triggers : je n'ai jamais vu comment on pouvait les mettre en place sous phpMyAdmin
Kent Posté 30 Août 2006 Auteur Posté 30 Août 2006 (modifié) Sinon pour la suppression il existe trois méthodes : - supprimer manuellement l'enregistrement de la table dépendante avant celui de la table principale - un trigger - la commande ON DELETE CASCADE sur la table principale (Pour Mysql je ne suis pas sûr que ces 3 options existent ). La premiere méthode je pense que c'est possible il suffit d'envoyé deux requettes distinctes ( au passage ; est-til possible d'utiliser "UNION" en MySQL ? ) Quant aux deux autres je ne les connais pas malheureusement. Je crois que le cas n'existe pas en merise : tab_MEMBRE -- 1,1 ------------------ 1,1 -- tab_PROFIL 1,1 pour les cardinalités membre 1,1 ---------------------- [ EST ASSOCIER ]---------------------- 1,1 Profil A un membre est associer un et un seul profil A un profil est associer un et un seul membre ce qui implique : Une contrainte d'intégrité fonctionelle des deux cotés, si on connais le profil on sait à quel membre celui-ci est associé , et si on connais le membre on sait quel profil lui est associé, sauf erreur de ma part il me semble que ce cas existe bien. Modifié 30 Août 2006 par Kent
robinsonvendredi Posté 30 Août 2006 Posté 30 Août 2006 si vous connaissez une autre méthode de concéption je suis à l'écoute. En général il y a des caractéristiques de profils qu'on retrouve chez plusieurs membres. Tu peux créer une table "groupe" pour attribuer des profils généraux sans les répéter au niveau des membres. Les profils personnels tu les laisses dans la table membre. Donc ta structure c'est une table groupe (c'est plus simple si les groupes sont définis d'avance= pas de suppression ni d'insertion) et une table dépendante membres. Selon l'historique du membre il peut passer d'un groupe à l'autre.
beal2912 Posté 30 Août 2006 Posté 30 Août 2006 Une contrainte d'intégrité fonctionelle des deux cotés, si on connais le profil on sait à quel membre celui-ci est associé , et si on connais le membre on sait quel profil lui est associé, sauf erreur de ma part il me semble que ce cas existe bien. Théoriquement oui mais conceptuellement je crois que tu fusionnes les tables... maintenant je dis peut être des conneries Mais il n'est pas traité ici : http://www.sam-mag.com/P53,53,5,55,,,default.aspx dans les 6 règles strictes, nécessaires et suffisantes pour passer d'un MCD à un MLDR
Kent Posté 30 Août 2006 Auteur Posté 30 Août 2006 Oui je pense aussi que du moment que cette cardinalité est présente il devient inutile de faire deux tables physiquement c'est la fusion. tu es loin de dire des conneries, comme quoi etre etudiant ne suffit pas il faut etre pratiquant aussi. MySQL 5 supporte on delete cascade, je m'y pencheré je dois m'absenter pour l'heure je vous tiendrais au courant de l'avancement. Merci de votre aide et bonne fin de journée
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant