Impossible de créer clef étrangère sur comprofiler.user_id

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Impossible de créer clef étrangère sur comprofiler.user_id

    Bonjour à tous.

    Dans le cadre de mon site web, je gère des licences utilisateur.
    J'avais créé une table simple pour mémoriser chaque licence (un peu longue à générer).
    Puis, comme j'ai besoin d'un champs (mon_champs) spécifique contenu dans une table de Communuty Builder, j'ai écris ce code :
    Code:
    user = &JFactory::getuser();
    if ($user->id == 0)
    {   // Not connected => Display error message
        printf('<b><font color="blue">%s</font></b>',_('You must be connected...'));
    }
    else
    {
            // printf("Nickname = %s<br>ID = %d<br>",$user->username,$user->id);
            // #__ replace the database table prefix used by Joomla
            $query = sprintf("SELECT mon_champs FROM #__comprofiler WHERE user_id=%d",$user->id);
    Et puis, je me suis dit, ce serait bien d'attacher ma table à cette table utilisateur de sorte que, lorsqu'un compte est supprimé, l'entrée correspondante dans ma table soit retirée automatiquement.
    J'ai donc tenté de créer dans ma table, une clef étrangère sur #__comprofiler.user_id (ou #__comprofiler.id).
    J'ai donc tenté d'exécuter la requête suivante :
    Code:
    CREATE TABLE MaTable (
        idLicense INT NOT NULL AUTO_INCREMENT,
        fkuserid INT NOT NULL,
        PRIMARY KEY(idLicense),
        FOREIGN KEY(fkuserid)
            REFERENCES xxxx_comprofiler(id)
                ON DELETE CASCADE
                ON UPDATE CASCADE);
    Nb : xxxx_comprofiler : j'ai mis xxxx car joomla préfixe ses table par une identifiant mais dans le vrai code, j'ai mis l'identifiant correcte.
    Impossible de créer la table avec cette clef étrangère, résultat : #1005 - Can't create table 'ttgest_joomla.tlicenses' (errno: 150)

    Impossible de savoir pourquoi !
    Les champs existent bien, les tables sont bien référencées. C'est pourtant pas compliqué de créer une clef étrangère, non ?

  • #2
    Re : Impossible de créer clef étrangère sur comprofiler.user_id

    Bonjour,

    Les Foreign Keys sont utilisées par le storage engine InnoDB de MySQL. Mais dans ta création d etable, tu crées une dépendance foreign key vers une table MyISAM, qui elle n'a pas de support de ces clés étrangères.

    Soit tu convertis la table #__comprofiler en InnoDB, mais dans ce cas, avec quelques risques, de nombreuses autre stables sous Joomla interragissant avec #__comprofiler (quasiment tous les composants ayant une intégration CB), ce qui pourrait poser de très gros problèmes d'effets de bord.

    Soit, et c'est plus logique, tu utilises un trigger (CREATE TRIGGER) qui lui est cross storage engine, poru gérer ces conditions.
    Pas de demande de support par MP.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

    Commentaire


    • #3
      Re : Impossible de créer clef étrangère sur comprofiler.user_id

      J'avoue que j'ai pas tout compris...
      il y a deux types de bases de données sou MySQL ? (InnoDB et MyISAM) ?
      Bon, je vais regarder crete trigger mais dans ce cas je ne sais pas trop comment ça marche...
      Google est mon ami... Mais là c'est vrai que j'ai pas tout compris à ta réponse... Désolé

      Commentaire


      • #4
        Re : Impossible de créer clef étrangère sur comprofiler.user_id

        Envoyé par Feneck91 Voir le message
        J'avoue que j'ai pas tout compris...
        il y a deux types de bases de données sou MySQL ? (InnoDB et MyISAM) ?
        Ce ne sont pas des types de bases de données, mais des "Storage Engines". Et il n'y en a pas que 2, mais une multitude (du mini Memory Storage pour des tables temporaires) au stockage cluster multinodes FEDERATED... cf http://dev.mysql.com/doc/refman/5.5/...e-engines.html

        Envoyé par Feneck91 Voir le message
        Bon, je vais regarder crete trigger mais dans ce cas je ne sais pas trop comment ça marche...
        Google est mon ami... Mais là c'est vrai que j'ai pas tout compris à ta réponse... Désolé
        Et pour comprendre les triggers http://dev.mysql.com/doc/refman/5.5/en/triggers.html

        Ce qu'il faut comprendre, c'est que les foreign keys imposent que le storage engine soit identique pour toutes les tables cibles des foreign.

        Un trigger peut agir au niveau d'une table et par exemple déclencher une procédure stockée (stored procedure), ces dernières pouvant être appliquées quel que soit le storage engine, tout au moins tant qu'on ne cherche pas à détruire une table pouvant être utilisée par une autré instance de requête.

        Mais là on quitte Joomla! pour entrer dans la technologie des SGBD.
        Dernière édition par jisse03 à 07/09/2012, 21h50
        Pas de demande de support par MP.
        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

        Commentaire


        • #5
          Re : Impossible de créer clef étrangère sur comprofiler.user_id

          Ça veut donc "peut-être" dire qu'au lieu de créer une table en MyISAM je pourrais la créer en InnoDB. Je ne vais pas modifier une table Joomla! par contre je peux modifier ma propre table, en plus j'en ai qu'une seule....
          Eh... J'ai dis une bétise, cette table comprofiler est en effet en mode MyISAM (en plus c'est indiqué dans ton message).
          Je vais donc voir tes Triggers.
          Dernière édition par Feneck91 à 08/09/2012, 07h09

          Commentaire

          Annonce

          Réduire
          Aucune annonce pour le moment.

          Partenaire de l'association

          Réduire

          Hébergeur Web PlanetHoster
          Travaille ...
          X