我正在观看一个屏幕录像,作者说在联接表上不要有主键,但没有解释原因。
在这个例子中,联接表在Rails迁移中定义了两个列,并且作者为每个列添加了索引,但没有设置主键。
为什么在这个例子中不应该有主键呢?
在这个例子中,联接表在Rails迁移中定义了两个列,并且作者为每个列添加了索引,但没有设置主键。
为什么在这个例子中不应该有主键呢?
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
编辑:正如我对Cletus所提到的,我可以理解自动编号字段作为联接表的主键的潜在有用性。但是在我上面列出的示例中,作者明确避免使用语法“:id => false”在“create table”语句中创建自动编号字段。通常情况下,Rails会自动向迁移中创建的表添加一个自动编号id字段,并将其作为主键。但是对于这个联接表,作者特意防止了这种情况。我不确定他为什么决定采用这种方法。