Este es un mal diseño. Simplemente haga una clave principal de 2 columnas y claves externas de 2 columnas. Este es un antipatrón fundamental llamado "codificación de información en claves" que (por lo tanto) se denominan claves "inteligentes", "inteligentes" o "concatenadas". Una buena llave es una llave "tonta".
Además, no hay necesidad para hacer esto.
Muchos DBMS permiten "columnas calculadas" cuyos valores se calculan automáticamente a partir de otras columnas. Para hacer que una sea una clave principal o una clave externa, generalmente la necesitaría "persistente", es decir, que ocupe memoria como una columna normal en lugar de que solo se calcule cuando sea necesario, como una vista. MySQL no los tiene, pero 5.7.5 tiene alguna funcionalidad donde se les llama "columnas generadas", que se pueden "almacenar". ¡Pero no hagas esto por PK o FK!
El problema de diseño real es el manejo de base de datos/subtipos de SQL/jerarquías/herencia/polimorfismo .