Ci sono un sacco di tavoli in cui si consiglia di avere una colonna di identità come chiave primaria. Tuttavia, nel caso di una tabella delle relazioni M: M che descrivi, la migliore pratica è NON usare una nuova colonna Identity per la chiave primaria.
Il link di RThomas nel suo commento fornisce gli ottimi motivi per cui la procedura migliore è NON aggiungere una colonna di identità. Ecco lo that link.
Gli svantaggi superano i professionisti in quasi tutti i casi, ma dal momento che hai chiesto pro e contro ho messo un paio di professionisti improbabili in pure.
Contro
aggiunge complessità
può portare a duplicare i rapporti meno che non si impone l'univocità sul rapporto (che una chiave primaria farebbe per impostazione predefinita).
Probabilmente più lento: db deve mantenere due indici anziché uno.
Pro
tutti i pro sono piuttosto abbozzato
Se si ha una situazione in cui avete bisogno di usare la chiave primaria della tabella relazione come iscriverti per una tabella separata (ad esempio una tabella di controllo?) l'unione sarebbe probabilmente più veloce. (Come notato però - l'aggiunta e la rimozione di record sarà probabilmente più lenta. Inoltre, se la tabella delle relazioni è una relazione tra tabelle che utilizzano ID univoci, l'aumento di velocità dall'utilizzo di una colonna Identity nel join vs two sarà minimo.)
L'applicazione, per semplicità, può assumere che ogni tabella con cui lavora abbia un ID univoco come sua chiave primaria. (Questo è scarso design nell'app ma potresti non avere il controllo su di esso.) Si potrebbe immaginare uno scenario in cui è meglio introdurre una complessità extra nel DB rispetto alla complessità extra in tale app.
Semplice articolo sui tasti compositi: http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx – RThomas
non c'è bisogno di una colonna di identità, la chiave primaria è fondamentalmente un insieme di colonne (1 o più) che definiscono in modo univoco i tuoi dati. Aggiungendo una colonna Identity, stai aggiungendo un indice extra e facendo l'indice che probabilmente utilizzerai di più (quello con le 2 colonne importanti) come non cluster, più gli aggiornamenti/inserti saranno un po 'più lenti, ecc. Ecc. Fondamentalmente, nessuna necessità. – Rodolfo
@RThomas - In questo weblog, stanno utilizzando una relazione Clienti-> Prodotti che non dovrebbe avere una chiave composta poiché indica i dati transazionali. Lì * può * essere più relazioni create in momenti diversi, quella tabella ha bisogno di un PKey Identità Unica. ad esempio, ordinando bottiglie di vino, sotto la stessa SKU - a cui fa riferimento un singolo ProductID - (non ideale, ma possibile). Tuttavia, se ogni bottiglia ha il proprio ID, allora "limite di ordine" è discutibile poiché è necessario creare un record di transazione separato per ciascun articolo. O hai sbagliato la struttura, o stai tracciando i dati in modo errato. – hajikelist