Questo è uno dei tanti casi in cui dovresti abbracciare il male minore che è Chiavi surrogate . Qualunque tabella abbia una chiave primaria di (col1,col2,col3)
dovrebbe avere una chiave aggiuntiva creata dal sistema, come un'identità o GUID.
Non si specifica il tipo di dati di (col1,col2,col3)
, ma se per qualche motivo sei allergico alle chiavi surrogate puoi abbracciare il male leggermente più grande di una "chiave combinata", dove invece di un valore creato dal database il tuo campo chiave univoco deriva da altri campi. (In questo caso, sarebbe qualcosa di simile a CONCAT(col1, '-', col2, '-', col3)
).
Se nessuno dei due precedenti è pratico, ti verrà lasciato il più grande malumore di dover specificare manualmente tutte e tre le colonne ogni volta che esegui una query su un record. Ciò significa che qualsiasi altro oggetto o tabella che fa riferimento a questo avrà bisogno di non avere uno, ma tre distinti campi per identificare il record di cui stai parlando.
Idealmente, btw, avresti qualche chiave aziendale nei dati effettivi che puoi garantire in base al design: saranno unici, in continua evoluzione e mai vuoti. (O almeno cambiando così raramente che il db può gestire gli aggiornamenti in cascata abbastanza bene.)
Puoi comunque utilizzare una chiave surrogata per le prestazioni in questo caso, ma questo è un dettaglio di implementazione piuttosto che un requisito di modellazione dei dati.