Stavo guardando uno screencast in cui l'autore ha detto che non è bello avere una chiave primaria su un tavolo join ma non ha spiegato il perché.Perché non è opportuno avere una chiave primaria su una tabella di join?
La tabella di join nell'esempio aveva due colonne definite in una migrazione di Rails e l'autore ha aggiunto un indice a ciascuna delle colonne ma nessuna chiave primaria.
Perché non è utile avere una chiave primaria in questo esempio?
create_table :categories_posts, :id => false do |t|
t.column :category_id, :integer, :null => false
t.column :post_id, :integer, :null => false
end
add_index :categories_posts, :category_id
add_index :categories_posts, :post_id
EDIT: Come ho già detto a Cletus, posso capire la potenziale utilità di un campo numero di auto come chiave primaria anche per un tavolo aderire. Tuttavia nell'esempio che ho elencato sopra, l'autore evita esplicitamente di creare un campo numerico automatico con la sintassi ": id => false" nell'istruzione "create table". Normalmente Rails aggiungerebbe automaticamente un campo di identificazione automatica a una tabella creata in una migrazione come questa e questa diventerebbe la chiave primaria. Ma per questa tabella di join, l'autore lo ha specificamente prevenuto. Non ero sicuro del motivo per cui ha deciso di seguire questo approccio.
Ai redattori: potrebbe essere importante sottolineare il contesto di questa domanda. È più spesso che non una cattiva forma per NON avere una chiave primaria. –
Il buon articolo è il saggio del Codd del 1970 http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf –
Una cosa da considerare, quella carta fu scritta nel 1970, quando I/O e l'archiviazione dei dati era relativamente, molto più costoso. Nei tempi moderni, tuttavia, i costi di aggiunta di una colonna chiave primaria aggiuntiva sono quasi sempre minuscoli. Mi piacerebbe vedere qualcuno presentare un caso reale in cui la colonna in più crea un problema misurabile. – DGM