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`);

Articles connexes


Comment créer des contraintes uniques sur AgensGraph

jagger Je veux utiliser la propriété "id" comme clé primaire sur l'étiquette. agens=# create vlabel v; CREATE VLABEL agens=# create (:v{id:1}); GRAPH WRITE (INSERT VERTEX 1, INSERT EDGE 0) agens=# create (:v{id:1}); GRAPH WRITE (INSERT VERTEX 1, INSERT EDGE 0)

Comment créer des contraintes uniques dans laravel 5.2?

Carlos Carucce Comment créer des contraintes uniques à l'aide de laravel 5.2 Schema Builder? Schema::create('my_pivot', function(Blueprint $table){ $table->increments('id'); $table->integer('table1_id')->unsigned(); $table->integer('table2_id')->u

Relation ForeignKey sur deux champs uniques ensemble

Charles J'aimerais faire une relation comme ça dans django: class ColorModel(models.Model): article = models.ForeignKey(ArticleModel, to_field='name', on_delete=models.CASCADE) color = models.CharField(max_length=10) class Meta: unique

MySQL ignore-t-il les valeurs nulles sur les contraintes uniques?

Hugo Mota J'ai une colonne e-mail que je souhaite être unique. Mais je veux aussi qu'il accepte les valeurs nulles. Ma base de données peut-elle avoir 2 e-mails nuls de cette façon? Mark Byers Oui, MySQL autorise plusieurs NULL dans une colonne avec une contra

MySQL Create Table avec des contraintes uniques

Arlen Beiler Je commence juste avec la syntaxe SQL et j'essaye de créer une table. Voici mon erreur: # 1064 - Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près