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
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
A voir également:
- 2 fk "unique ensemble"
- 2 ecran pc - Guide
- Word numéro de page 1/2 - Guide
- Vue unique whatsapp - Accueil - WhatsApp
- 2 comptes whatsapp - Guide
- France 2 uhd - Accueil - TV & Vidéo
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
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 :
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.
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.