Svantaggi della chiave primaria composta

4

Per il sito Web che gestisco (eCommerce) ora ho bisogno di creare una tabella che sembra richiedere la chiave primaria composta di 5 colonne. Non ho mai usato 5 colonne come chiave primaria prima, solo 2 e raramente 3.

Mi chiedo se vi siano degli svantaggi, specialmente per quanto riguarda le prestazioni, poiché ci si aspetta che questa particolare tabella abbia milioni di record.

Non ho ancora scelto un meccanismo di archiviazione.

Sono molto interessato alle prestazioni. Come sarebbe, ad esempio, "INSERT ... ON DUPLICATE KEY UPDATE" il rendimento delle query sul lavoro in termini di prestazioni rispetto alla chiave a colonna singola? Ci sono altri svantaggi di prestazioni riguardanti le operazioni MySQL su questa tabella?

    
posta Lukáš Rutar 03.06.2015 - 09:50
fonte

2 risposte

0

Non dovrebbe esserci alcun impatto significativo sulle prestazioni

Un indice cluster è fondamentalmente gratuito - perché non usarlo?

Inserisci controllo per univoco è un indice cerca
È molto molto veloce per la chiave singola o composita

Anche se ci sono implicazioni sulle prestazioni per me l'integrità dei dati vince sempre Se i dati hanno una chiave composta naturale, devi utilizzare una chiave composita

Suppongo tu abbia FK su quelle cinque colonne
La tabella FK dovrebbe essere ID, Value
E l'FK dovrebbe fare riferimento all'ID
Quindi ora la ricerca dell'indice è su ID
Crea una vista per esporre i valori PK

La frammentazione influirà sulle prestazioni degli indici sia cluster che non cluster. Prova e disponi l'ordine della chiave per riflettere l'ordine di inserimento più comune. Prova e inserisci nell'ordine della chiave composta.

    
risposta data 03.07.2015 - 21:08
fonte
1

Il più grande svantaggio è che sono necessari 5 valori per identificare una riga. Se la tua applicazione utilizza un layer O / RM (Object / Relation Mapping), allora avrai adattamenti per mappare queste righe di database agli oggetti in un linguaggio di programmazione. O / RM sono più facili da configurare quando ogni tabella ha una chiave primaria a singola colonna.

Una volta entrati nei framework delle applicazioni web, gli URL nel browser spesso includono una sorta di identificatore per i dati nel database e si presuppone che ci sia solo un pezzo di dati necessari per identificare una risorsa, ad es. una chiave primaria a singola colonna. Ciò rende più difficile l'utilizzo dei moderni framework di applicazioni Web (Ruby on Rails, ASP.NET MVC di Microsoft per nominarne alcuni).

Programmazione a parte, e se in futuro dovessi aggiungere una colonna che insieme agli altri 5 dovrebbe essere unica? Ora stai modificando la tua chiave composita. Basta che sia semplice. Utilizzare una chiave primaria a singola colonna. Se hai bisogno che queste 5 colonne siano univoche, considera l'aggiunta di un vincolo univoco o un indice univoco a quelle colonne.

Lo svantaggio successivo delle chiavi composite in generale, e in particolare delle chiavi composite che richiedono questo numero di colonne, è che tutti questi dati devono essere specificati e copiati nelle tabelle figlio per poter stabilire relazioni appropriate tra le tabelle.

  • Le modifiche alle regole aziendali in futuro potrebbero imporre la duplicazione di questi valori. Come verranno identificati i dati, quindi?
  • I valori vengono duplicati tra le tabelle quando sono necessari riferimenti a chiavi esterne
  • O / RM sono più difficili da configurare
  • I framework di applicazioni Web Modern MVC sono più difficili da configurare per includere le chiavi composite

Nient'altro che svantaggi per me.

Il più grande mal di testa che ho incontrato con gli sviluppatori è che assumono che "unicità dei dati" equivale a "identificare una riga nel database". Questo è raramente il caso. Ho trovato applicazioni e database molto più semplici da mantenere e facili da compilare, impostando le chiavi primarie a singola colonna e utilizzando le chiavi composite come eccezione alla regola, quindi rafforzando l'univocità dei dati utilizzando vincoli o indici univoci su tali colonne. / p>     

risposta data 03.06.2015 - 16:26
fonte

Leggi altre domande sui tag