Ich schaute mir einen Screencast an, in dem der Autor sagte, dass es nicht gut sei, einen Primärschlüssel auf einer Join-Tabelle zu haben, aber warum nicht.Warum ist es nicht gut, einen Primärschlüssel für eine Join-Tabelle zu haben?
In der Join-Tabelle im Beispiel wurden zwei Spalten in einer Rails-Migration definiert, und der Autor fügte jeder Spalte einen Index, jedoch keinen Primärschlüssel hinzu.
Warum ist es nicht gut, in diesem Beispiel einen Primärschlüssel zu haben?
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: Wie ich zu Cletus erwähnt, ich den potenziellen Nutzen eines Autonummernfeld als Primärschlüssel verstehen können sogar für einen Tisch kommen. In dem Beispiel, das ich oben aufgeführt habe, vermeidet der Autor ausdrücklich, ein Auto-Nummernfeld mit der Syntax ": id => false" in der Anweisung "create table" zu erstellen. Normalerweise würde Rails automatisch ein Nummernfeld mit automatischer Nummer zu einer Tabelle hinzufügen, die in einer solchen Migration erstellt wurde, und dies würde der Primärschlüssel werden. Aber für diese Join-Tabelle hat der Autor das konkret verhindert. Ich war mir nicht sicher, warum er sich entschied, diesem Ansatz zu folgen.
Für Redakteure: Es kann wichtig sein, den Kontext dieser Frage zu betonen. Es ist meistens schlechte Form, keinen Primärschlüssel zu haben. –
Guter Artikel ist Codds 1970 Papier http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf –
Eine Sache zu betrachten, dass Papier 1970 geschrieben wurde, als I/O und Datenspeicherung war relativ viel, viel teurer. In der heutigen Zeit sind die Kosten für das Hinzufügen einer zusätzlichen Primärschlüsselspalte jedoch fast immer gering. Ich würde es lieben, jemanden zu sehen, der einen realen Fall darstellt, bei dem die zusätzliche Spalte ein messbares Problem verursacht. – DGM