Rails 4.2 外键

7
Rails 4.2新支持在迁移中添加和删除外键,例如:
# add a foreign key to `articles.author_id` referencing `authors.id`
add_foreign_key :articles, :authors

我不理解的是:这个怎么做到的。
add_foreign_key :articles, :authors

与此不同的是:
add_column :articles, :author_id, :integer

感谢您的解释!
1个回答

9
区别在于这一行:
add_foreign_key :articles, :authors

实际上,这将会生成以下内容:
ALTER TABLE "articles" ADD CONSTRAINT articles_author_id_fk FOREIGN KEY ("author_id") REFERENCES "authors" ("id");

虽然这个:

add_column :articles, :author_id, :integer

将会生成:

ALTER TABLE "articles" ADD COLUMN author_id INT(11);

两者不同,因为add_foreign_key只会添加外键约束,而add_column则是添加列而非约束。


谢谢。那么,结论是使用add_foreign_key会导致更好的数据库性能(因为它添加了一个外键),这个结论正确吗? - TomDogg
1
从技术上讲,它会降低数据库性能,因为它强制DB在每次更新/插入时检查此约束。但它增加了引用完整性,即确保您的数据“有意义”,并且您不会得到不一致/孤立的数据。 - Don Cheadle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接