Bonjour!
J'ai un problème avec une des tables de ma base de données sql. J'utilise mysql.
En effet, j'ai une table job avec entre autres entrées, job_id(clé primaire), job_name, user_id(référence au user associé), host_id(référence au host associé).
Dans ma table, on ne devrait pas avoir deux fois un même non de job pour un même user_id ET un host_id.
Mais je veux bien permettre deux fois un même nom de job pour le même user_id avec un host_id différent, le même nom de job pour le même host_id avec un user_id différent.
J'ai utililé les méthodes suivantes :
-
alter table job add constraint job_id unique(job_name, user_id, host_id)
Commande accepté.
Mais elle ne marche pas comme je veux, car il y a erreur si je veux créer un job avec le même nom qu'un job existant sous le même user, mais avec un host différent, pourtant je veux que la contrainte d'unicité s'applique à la fois sur les trois champs, et non sur les trois deux à deux.
-
alter table job add constraint job_name unique(user_id, host_id);
Génère l'erreur :
ERROR 1062 (23000): Duplicate entry '1-5' for key 'job_name'
-
alter table job add unique index(job_name, user_id, host_id);
Commande acceptée.
Celle ci ne me signale plus d'erreur à la création de mes entrées, mais à chaque création d'un job avec le même job_name, l'ancienne valeur est simplement mise à jour sur les autres champs, il n'y a qu'une seule occurrence du job name dans la table.
Bref le problème est peut être compliqué à résoudre, car je n'ai pas encore trouvé de solution, mais ma problématique est facile à comprendre.
En algo j'aurais demandé au sgbd de faire ceci:
1 2 3
| pour une entrée de job,
si il existe job avec même job_name, même user_id ET même host_id, ne pas créer l'entrée
si non créer l'entrée et ajouter un nouvel index |
Je ne sais pas si vous avez une solution, je n'en ai pas trouvé qui satisfasse mon besoin sur le net.
Merci par avance.
Partager