Hola marke10:
Hay varias formas de abordar este problema. No nos dices cómo es la estructura completa de tus tablas, por lo que no puedo darte una respuesta puntual. Una idea sería que tu llave en la tabla Nombres_y_especies fuera una llave compuesta, justamente por los campos nombre y especie, No importa si estos dos campos son a su vez FK sobre otras tablas, Checa este script:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.11 sec)
Query OK, 2 rows affected (0.05 sec)
Query OK, 0 rows affected (0.13 sec)
Query OK, 2 rows affected (0.06 sec)
Query OK, 0 rows affected (0.19 sec)
->('animal', 'gallina');
Query OK, 2 rows affected (0.06 sec)
+--------+---------+
| nombre | especie |
+--------+---------+
| ave | aguila |
| animal | gallina |
+--------+---------+
mysql> #intentamos insertar un registro existente
ERROR
1062 (23000): Duplicate entry
'animal-gallina' for
key 'PRIMARY'
mysql> #intentamos insertar un valor que no exista en la tabla nombres
fails
(`pruebas`.
`nombres_y_especies`, CONSTRAINT `nombres_y_especies_ibfk_1`
mysql> #intentamos insertar un valor que no exista en la tabla especies
Observa que los criterios de integridad de los datos se están respetando, primero evitando duplicados:
Código:
Duplicate entry 'animal-gallina' for key 'PRIMARY'
y los respectivos errores porque los valores no existen en las tablas foráneas:
Código:
FOREIGN KEY (`nombre`) REFERENCES `nombres` (`nombre`)
FOREIGN KEY (`especie`) REFERENCES `especies` (`especie`)
Dale un vistazo para ver si te sirve.
Saludos.
Leo.