0

假设我有 3 个模型音乐家、开发人员和医生,每个人都有一些共同的属性,例如姓名、姓氏、生日和电子邮件,但他们有一些特定的属性,例如音乐家(乐器、乐队)、开发人员(语言、SO)和医生(执照、诊所)。

我的方法是这样的:

class Person < ActiveRecord::Base
    belongs_to :general, :polymorphic => true
end

class Musician < ActiveRecord::Base
    has_one :person, :as => general
end

class Developer < ActiveRecord::Base
    has_one :person, :as => general
end

class Doctor < ActiveRecord::Base
    has_one :person, :as => general
end

问题是,这种模型关系会因为多态关联而影响性能?还是有更好的解决方案可以考虑?

4

1 回答 1

2

是的,多态关联确实会影响性能。有时是积极的,有时是消极的,都取决于您的应用程序的使用方式。

就您提出的情况而言,我不会使用多态关联。我将只有 3 个模型,在三个模型中具有共同的属性,如姓名、姓氏、生日和电子邮件。这更有利,因为如果您想找出音乐家的名字,您只需要在 Musician 表中进行 1 次数据库调用。在多态关联情况下,您需要在 Musician 表和 Person 表中进行 2 次数据库调用。

于 2012-10-23T22:36:27.813 回答