Bonjour,

J'essaie de contruire une relation entre la table users et la table roles depuis phpmyadmin.
Les deux tables sont en innoDB.
La colonne role dans la table users est en INT comme l'id de la table roles.
Lorsque je veux passer users.role en clé UNIQUE j'ai une erreur si je ne la défini pas comme NULL, je peux la passer en INDEX si elle est NULL.

Dans phpmyadmin quand je veux construire la relation à la base de la BDD dans le concepteur j'ai une erreur quand je pointe users.role -> roles.id et ce peut importe le type de relation on delete et on update.

J'ai du mal à comprendre comment créer la relation entre les deux tables pour avoir le type de rôle dans ma table users.

Merci d'avance pour votre aide.

8 réponses


Kareylo
Réponse acceptée

Oui, mais ta clé étrangère est à faire sur ta table users

La première erreur vient du fait que ta colonne users.role est NULLABLE et que tu veux la rendre UNIQUE.
Si tu fais ça, tu dis à ta BDD que tu ne peux pas avoir 2 lignes avec users.role à NULL.

Pour la deuxième erreur, à vue de nez, je dirais que tu as des contraintes sur le champ roles.id que tu n'as pas sur users.role, du style : UNSIGNED, INT. Pour "régler" le soucis, ton champ users.role doit avoir ces même contraintes (AUTOINCREMENT et NULLABLE ne poseront pas de problème).

Je te remercie pour ton aide, mais je ne comprends pas plus comment régler le problème. En effet, de ce que me renvoie phpmyadmin, je peux faire de users.role soit un INDEX soit une clé UNIQUE dans le cas de l'index il peut être NULL dans le cas de la clé UNIQUE je n'ai pas le choix il faut qu'il ait une valeur par défaut (soit NULL soit autre chose) mais comme je veux que ce champ récupère automatiquement au moins une des valeurs de la table rôle je ne peux pas le faire puisqu'il faut que le lien soit fait. Et quand je mets une valeur à 3 qui correspond à la clé INVITEE j'ai une erreur SQL m'indiquant qu'il ne peut pas définir 3 comme valeur par défaut.
Et je ne peux pas AUTOINCREMENT puisque les users ont déjà un ID en AI et que le nombre de role est limité par la table role.
Il y a un truc que je ne comprends pas ou que j'ai loupé dans construction de mes tables.

La solution est de ne pas mettre users.role en unique, sinon tu vas devoir créer un rôle pas user et je doute que c'est ce que tu veux faire.

Pour l'erreur, c'est sûrement un problème de champ. Est-ce que ton champ users.role à les mêmes attributs que roles.id ? (sans prendre en compte le autoincrement)

Sans savoir à quoi ressemble vraiment tes deux tables, je ne peux que deviner.

Alors voici la structure de ma BDD

la table users

https://ibb.co/GHDzD16

La table roles

https://ibb.co/1fgpyXx

Quand je suis dans le concepteur de phpmyadmin.

https://ibb.co/SKbVsGk

Peu importe ce que je mets dans les deux champs il m'envoie une erreur pas toujours du même type.

https://ibb.co/85yf1zD

Tu fais ta foreign key sur la mauvaise table :)

Je pige pas. Le point d'origine est toujours l'ID et l'étranger la colonne du lien?

Donc en gros c'est roles.id -> users.role
J'ai toujours une erreur en faisant ça, donc je vais reprendre les bases des jointures pour comprend où je merde.
Merci pour ton aide.
Je le passe en résolu.