Dit is een slecht ontwerp. Maak gewoon een primaire sleutel met 2 kolommen en externe sleutels met 2 kolommen. Dit is een fundamenteel antipatroon dat "informatie in sleutels coderen" wordt genoemd en die (daardoor) "slimme", "intelligente" of "aaneengeschakelde" sleutels worden genoemd. Een goede sleutel is een "domme" sleutel.
Bovendien is het niet nodig om dit te doen.
Veel DBMS'en staan "berekende kolommen" toe waarvan de waarden automatisch worden berekend uit andere kolommen. Om er een primaire sleutel of externe sleutel van te maken, zou je deze normaal gesproken "aanhoudend" nodig hebben, dat wil zeggen dat het geheugen in beslag neemt als een normale kolom versus alleen wordt berekend wanneer dat nodig is, zoals een weergave. MySQL heeft deze niet, maar 5.7.5 heeft enige functionaliteit waarbij ze "gegenereerde kolommen" worden genoemd, die kunnen worden "opgeslagen". Maar doe dit niet voor PK's of FK's!
Het eigenlijke ontwerpprobleem is het omgaan met database/SQL-subtypes/hiërarchieën/inheritance/polymorphism .