Forum Programmation.autre Relations entre table dans MySQL

Posté par  .
Étiquettes : aucune
0
28
juin
2004
Salut à tous,

je gère une base de donnée (exploité par PHP) pour mon site Internet.

Dans cette base, il y a plusieurs tables :
- association
- commerce
- etc...

Je dois créer une table qui contient la liste des manifestations qui se dérouleront prochainement.

Pour cela, il y aura les champs :
- id
- titre
- texte
- date_debut
- date_fin
- heure (a voir)
- organisateur

C'est sur le champ organisateur qu'il y a un problème. Je voudrai qu'il puisse faire la relation avec la clé primaire de 'association' ou la clé primaire de 'commerce'.

Je sais faire une relation simple (un champ lié à un autre champ d'une autre table) mais je ne sais pas lier un champ à plusieurs champs de plusieurs tables.

Je ne sais même pas si c'est faisable.

Pouvez vous m'éclairer ?

Merci.

PS : mes tables sont au format InnoDB
  • # Table intermediaire

    Posté par  (site web personnel) . Évalué à 2.

    une solution c'est de rajouter un champ qui t'indique si le champ 'organisateur' est de type 'association' ou 'commerce'.
    Et lá pas de manip sous innoDb, ce n'est pas supporté.
    Sinon, tu ajoutes un champ organisateur_asso et un champ organisateur_commerce qui peuvent etre nul. Ensuite, tu les déclare tous les deux en clés étrangeres.

    Sinon y'a-t-il un SGBDOO libre ? (je suis resté a MySQL, et je connais les possibilites de PostGreSQL)
    • [^] # Re: Table intermediaire

      Posté par  . Évalué à 2.

      Sinon, tu ajoutes un champ organisateur_asso et un champ organisateur_commerce qui peuvent etre nul. Ensuite, tu les déclare tous les deux en clés étrangeres.

      C'est la solution actuellement utilisée. Mais puisque je réorganise le site en profondeur (changement du moteur du site), et que la base de données évolue fortement, je me suis dis que ce serai plus propre un seul champ.
  • # une solution parmi d'autres

    Posté par  . Évalué à 2.

    ce que tu veux implementer est une relation d'héritage, en effet, deux types d'entités de ton modèle, à savoir 'association' et 'commerce' ont en commun une caractéristique (celle de pouvoir être organisateur pour une manifestation). C'est dans ce genre de situation que l'héritage intervient.

    tu fais une table 'personne' ou 'interlocuteur' ou ce que tu veux

    dedans tu comptabilises tous les interlocuteurs (commerces et associations), via un id, et, si tu veux, un nom. Ensuite, dans tes tables association et commerce, tu utilises comme id pour les entrées leur id de la table 'interlocuteur'.

    Dans ta table manifestation, la clé organisateur se réfère à la clé primaire de la table 'interlocuteur'.

    Pour savoir s'il s'agit d'un commerce ou d'une association, tu cherches si l'id est présent dans la table commerce ou dans la table association.

    Ma solution a de nombreux problèmes : impossible de s'assurer qu'un élément présent dans 'interlocuteur' est présent dans l'une des deux tables ? Ni de s'assurer qu'un élément présent dans association n'est pas présent dans commerce.

    C'est les limites de MySQL...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.