Mysql - créer des contraintes uniques sur les deux champs
yoann84
J'utilise mysql (mariadb). J'ai une table "events_ratings", qui contient 4 colonnes
CREATE TABLE `event_ratings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_event` int(11) NOT NULL,
`rating` int(1) NOT NULL,
`id_user` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
PRIMARY KEY `id`,
ADD CONSTRAINT `idevent` FOREIGN KEY (`id_event`) REFERENCES `events_fb` (`id`) ON UPDATE CASCADE,
ADD CONSTRAINT `iduser` FOREIGN KEY (`id_user`) REFERENCES `users` (`id`) ON UPDATE CASCADE;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Le but de ce tableau est de donner une note aux utilisateurs, donc :
- Chaque utilisateur peut évaluer un événement (sur la base de son unique "id_user"). L'utilisateur peut évaluer de nombreux événements comme il le souhaite mais jamais le même.
Donc, fondamentalement, id_user ET id_event ne devraient jamais avoir de valeurs en double. Je sais comment rendre une colonne unique mais comment faire une contrainte basée sur deux champs ?
Merci
Alexandra Neverovskaïa
Vous auriez besoin d'ajouter une contrainte unique et de spécifier les deux champs comme ceci :
ALTER TABLE `events_rating` ADD UNIQUE `unique_user_event`(`id_user`, `id_event`);