Questo è un cattivo design. Basta creare una chiave primaria a 2 colonne e chiavi esterne a 2 colonne. Questo è un anti-pattern fondamentale chiamato "codifica delle informazioni nelle chiavi" che (quindi) sono chiamate chiavi "intelligenti", "intelligenti" o "concatenate". Una buona chiave è una chiave "stupida".
Es: :
Inoltre, non c'è necessità per farlo.
Molti DBMS consentono "colonne calcolate" i cui valori vengono calcolati automaticamente da altre colonne. Per rendere uno una chiave primaria o una chiave esterna di solito è necessario "persistente", ovvero occupare memoria come una normale colonna anziché essere calcolata quando necessario come una vista. MySQL non li ha, ma 5.7.5 ha alcune funzionalità dove vengono chiamate "colonne generate", che possono essere "memorizzate". Ma non farlo per PK o FK!
Il vero problema di progettazione è la gestione di database/sottotipi SQL/hierarchies/inheritance/polymorphism .