2014-11-29 3 views
7

Rails 4.2 вновь поддерживает добавление и удаление внешних ключей (в миграции), как: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 

Благодарим за любые разъяснения!

ответ

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 добавит только ограничение foreign key, а add_column добавляет столбец не ограничение.

+0

Спасибо. Поэтому правильно ли заключить, что использование '' 'add_foreign_key'' приведет к лучшей производительности базы данных (поскольку она добавляет внешний ключ)? – TomDogg

+1

технически, он * уменьшает * «производительность базы данных», поскольку он заставляет БД проверять это ограничение для каждого обновления/вставки. Но он добавляет «ссылочную целостность», т. Е. Гарантирует, что ваши данные «имеют смысл», и вы не получите непоследовательных/потерянных данных – mmcrae

Смежные вопросы