2 fk "unique ensemble"

Fermé
klyden - 13 janv. 2015 à 09:06
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 - 21 janv. 2015 à 14:13
Bonjour,

Je n'ai pas pratiqué mysql depuis un bon moment.

Je souhaite avoir une table qui contients diverses informations.
- une fk qui pointe sur une table personne
- une fk qui pointe sur une table automobile
- la table contiendra divers champs qui indiquent ce que la personne pense de l'automobile.

Je souhaite qu'une personne ne puisse donné son avis qu'une fois pour la même automobile. et donc rendre "unique" le couple "fk_personne"+ "fk_automobile".

A vrai dire je ne me rappel même plus le nom de cette pratique, donc impossible pour moi de me renseigner auprès de mon pote google :/

Est-ce que quelqu'un, à défaut de me donner la solution, pourrait m'indiquer des mots-clefs pour trouver de la doc ?

Merci d'avance
A voir également:

1 réponse

flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 281
21 janv. 2015 à 14:13
Salut,

La solution est très simple, il te suffit de créer une primary key ou à défaut une unique key, basée sur tes deux foreign keys.

Démonstration :

mysql> select * from personne;
+-------------+--------------+
| id_personne | nom_personne |
+-------------+--------------+
| 1 | toto |
| 2 | titi |
+-------------+--------------+
2 rows in set (0.00 sec)

mysql> select * from automobile;
+---------------+----------------+
| id_automobile | nom_automobile |
+---------------+----------------+
| 1 | turbovroum |
| 2 | pouetmobile |
+---------------+----------------+
2 rows in set (0.00 sec)

mysql> create table commentaire (id_personne int(10) unsigned, id_automobile int(10) unsigned, commentaire varchar(64), foreign key (id_personne) references personne(id_personne), foreign key(id_automobile) references automobile(id_automobile), primary key (id_personne, id_automobile));
Query OK, 0 rows affected (0.00 sec)

mysql> desc commentaire;
+---------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id_personne | int(10) unsigned | YES | MUL | NULL | |
| id_automobile | int(10) unsigned | YES | MUL | NULL | |
| commentaire | varchar(64) | YES | | NULL | |
+---------------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


mysql> insert into commentaire values (1, 1, 'Trop de la balle cette Turbovroum !');
Query OK, 1 row affected (0.00 sec)

mysql> insert into commentaire values (1, 1, 'En fait non, elle est nulle.');
ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'


J'ai choisi une primary key dans cet exemple, mais l'instruction "primary key (id_personne, id_automobile)" lors de la création de la table "commentaire" aurait tout aussi bien pu être "unique key (id_personne, id_automobile)", avec exactement le même résultat.
0