используя has_many: primary_key, когда он не является ключом primary_key в базе данных - PullRequest
0 голосов
/ 02 января 2019

Я работаю над базой кода, которая использует rails, и предыдущие разработчики создали в postgres несколько моделей, которые являются ссылками друг на друга.Однако они используют поле activerecord primary_key, хотя база данных не показывает это поле как primary_key.Есть ли польза или недостаток в этом?Имейте в виду, что в поле 'fake' primary_key есть индекс.

# models
class A < ActiveRecord:Base
    has_many :bs, primary_key: :special_id
end

class B < ActiveRecord::Base
    belongs_to :a, primary_key: :special_id, foreign_key: :special_id
end

Фактический primary_key - id для B, но схема включает id и special_id.Индекс существует на special_id

1 Ответ

0 голосов
/ 02 января 2019

Теоретически преимущество заключается в том, что он более читабелен.В вашем случае A.find(id).bs присоединится к B с соответствующими b_id в вашей таблице A, что может быть не так интуитивно, как использование другого имени, в данном случае special_id.

С точки зрения производительности не должно быть заметных различий, если есть индексы как для столбцов первичного, так и для внешнего ключа.Метод has_many в конечном итоге приведет к запросу, поэтому единственная вычислительная стоимость состоит в том, чтобы поменять имя столбца в строке запроса, которую генерирует ActiveRecord.

Вы можете попробовать сравнить запросы с различными ключами.декларации, но я был бы удивлен, если бы он добавил даже миллисекунду ко времени запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...